绘制决策树尝试3
目录
代码解读AI
随机状态
种子
定义决策树回归模型 tree的decision regressor
fit
还可用来预测
export
效果图
我的X只有一个特征 为何这么多分支 ???
这是CART回归
CART回归
为什么说代码是CART回归?
不是所有的决策树都是CART
回归中mse的具体
步骤 1: 选择最优分割点
步骤 2: 比较分割点
步骤 3: 构建树节点
步骤 4: 递归构建树
从零开始的决策树
关于特征的选择顺序(:众生平等,每个特征的每个特征值作为分叉点时都是平等的比较)
实例1
想要的文字——feature name
实例2
书本复现成功
这会跟着书上来,代码差不多懂了
代码解读AI
from sklearn.datasets import make_regression
- 这行代码是从 scikit-learn 库的 datasets 模块中导入
make_regression
函数。make_regression
函数用于生成回归分析用的数据集。
from sklearn.model_selection import train_test_split
- 这行代码是从 scikit-learn 库的 model_selection 模块中导入
train_test_split
函数。train_test_split
函数用于将数据集分割成训练集和测试集。
from sklearn.tree import DecisionTreeRegressor
- 这行代码是从 scikit-learn 库的 tree 模块中导入
DecisionTreeRegressor
类。DecisionTreeRegressor
是一个用于回归任务的决策树模型。
MSE
from sklearn.metrics import mean_squared_error
- 这行代码是从 scikit-learn 库的 metrics 模块中导入
mean_squared_error
函数。mean_squared_error
函数用于计算预测值和实际值之间的均方误差。
import numpy as np
- 这行代码是导入 numpy 库,并将其命名为 np。Numpy 是一个用于数值计算的库,广泛用于处理数组。
# 生成数据集
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
- 这行代码使用
make_regression
函数生成一个回归数据集,其中包含 100 个样本,每个样本有 1 个特征,添加了 0.1 的噪声,并且设置随机状态为 42 以确保结果的可重复性。
随机状态
在机器学习和数据科学中,random_state
参数是一个用于控制随机性的种子值。当算法中涉及到随机性时,比如数据的随机打乱(洗牌)、随机分割、或者算法中的一些随机过程(比如随机森林中的树选择),设置 random_state
参数可以确保你的结果是可复现的。
以下是 random_state
参数的几个关键点:
-
可复现性:设置一个固定的
random_state
值可以确保每次运行代码时,随机过程的结果都是一样的。这对于调试代码、比较不同模型的表现以及与他人分享研究成果时非常有用。 -
随机性:如果不设置
random_state
,则每次运行代码时,随机过程都会产生不同的结果,因为它们会使用不同的随机种子。 -
数值:
random_state
可以是一个整数,也可以是None
。如果设置为整数,比如 42,那么每次使用该种子时,随机数生成器都会产生相同的随机数序列。如果设置为None
,则每次运行时都会使用不同的种子,导致结果可能不同。 -
不同上下文:在不同的库和函数中,
random_state
的行为可能略有不同。但基本概念是相同的,即控制随机数生成器的种子。
例如,在使用 train_test_split
函数时,设置 random_state
确保每次分割数据集时,训练集和测试集的内容都是一样的。这有助于确保实验结果的一致性,使得模型评估更加可靠。
种子
random_state
参数在功能上类似于种子(seed)。在许多编程环境和库中,设置随机数生成器的种子是为了确保随机过程的可复现性。以下是两者之间的相似之处:
-
控制随机性:
random_state
和种子(seed)都是用来初始化随机数生成器的,确保每次生成的随机数序列是相同的。 -
可复现性:使用固定的
random_state
或种子值,你可以确保在多次运行同一代码时,随机事件的结果是一致的。 -
数值输入:
random_state
和种子通常都是一个整数,这个整数作为随机数生成算法的起始点。 -
默认行为:如果不设置
random_state
或种子,那么每次运行代码时,都会使用不同的随机种子,导致随机结果不同。
不同之处在于,random_state
是某些库(如scikit-learn)中的参数名称,而“种子”通常是在更基础的随机数生成函数(如Python的random.seed()
或numpy.random.seed()
)中使用的术语。但它们的核心目的是相同的,即为了控制随机数生成过程的可复现性。
例如:
-
在使用
numpy
生成随机数时,你会使用numpy.random.seed()
:import numpy as np np.random.seed(42)
-
在使用 scikit-learn 的
train_test_split
函数时,你会使用random_state
参数:尺寸
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
在这两个例子中,无论是设置 numpy
的种子还是设置 train_test_split
的 random_state
,目的都是为了确保随机操作的可复现性。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
在上面的代码中,random_state=42
确保每次执行分割操作时,都会得到相同的 X_train
、X_test
、y_train
和 y_test
。
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
简而言之,random_state
是特定于某些库和函数的参数,用于控制那些函数的随机行为,而种子(seed)是一个更通用的概念,用于控制整个程序或脚本中的随机数生成。两者都是为了确保随机操作的复现性,但它们的应用范围和上下文有所不同。
- 这行代码使用
train_test_split
函数将数据集划分为训练集和测试集,其中测试集占总数据的 20%,并且设置随机状态为 42 以确保可重复性。random_state
和种子(seed)在概念上是相似的,但它们的使用场景和上下文有所不同。以下是它们之间的主要区别: -
上下文:
- 种子(Seed):通常指的是在较低级别的随机数生成函数中使用的参数,如 Python 的
random.seed()
或 NumPy 的numpy.random.seed()
。这些函数直接控制随机数生成器的状态。 - random_state:这个参数通常出现在机器学习库(如 scikit-learn)中的模型或函数中,用于确保模型训练过程中的随机性是可复现的。它通常用于初始化随机数生成器,但不是直接与底层随机数生成器交互。
- 种子(Seed):通常指的是在较低级别的随机数生成函数中使用的参数,如 Python 的
-
使用目的:
- 种子:用于确保整个程序或脚本中的随机数生成是可复现的。设置种子后,所有依赖于随机数生成的操作都会产生相同的序列。
- random_state:通常用于特定的函数或模型,确保该函数或模型的行为是可复现的,而不影响程序中其他部分的随机数生成。
-
范围:
- 种子:设置后,会影响所有后续的随机数生成操作,除非再次设置种子。
- random_state:只影响设置了该参数的特定函数或模型,不会影响程序中其他部分的随机数生成。
-
实现方式:
- 种子:在底层库中直接设置随机数生成器的状态。
- random_state:在机器学习库中,可能是一个参数,它在内部用来设置随机数生成器的种子,但是对用户来说是一个更高级别的抽象。
定义决策树回归模型 tree的decision regressor
# 创建决策树回归模型
tree_regressor = DecisionTreeRegressor(random_state=42)
- 这行代码创建了一个
DecisionTreeRegressor
对象,用于进行回归分析,并设置随机状态为 42。
fit
tree_regressor.fit(X_train, y_train)
- 这行代码使用训练集数据
X_train
和y_train
来训练决策树回归模型。
还可用来预测
# 预测
y_pred_tree = tree_regressor.predict(X_test)
- 这行代码使用训练好的决策树模型对测试集
X_test
进行预测,得到预测结果y_pred_tree
。
v
# 计算均方误差
mse_tree = mean_squared_error(y_test, y_pred_tree)
- 这行代码使用
mean_squared_error
函数计算测试集的实际值y_test
和预测值y_pred_tree
之间的均方误差。
python
复制
# 输出结果
X_train[:5], y_train[:5], mse_tree # 显示部分训练数据和决策树回归的均方误差
- 这行代码打印出训练集中的前 5 个样本及其标签,以及决策树回归模型的均方误差。这有助于了解模型训练的数据以及模型在测试集上的性能。
数据大小约为——
export
import pydotplus
这行代码导入了pydotplus
库,它是一个用于生成Graphviz图形的Python接口。Graphviz是一个开源的图形可视化软件,可以用来生成结构化的图形。
from IPython.display import Image
这行代码从IPython.display
模块导入了Image
类,用于在Jupyter Notebook中显示图像。
from six import StringIO
这行代码导入了StringIO
类,它来自six
库。StringIO
是一个在内存中读写字符串的类,这里用于存储Graphviz的DOT语言描述。
from sklearn import tree
这行代码导入了scikit-learn库中的tree
模块,它包含了决策树相关的类和函数。
tree_regressor = tree.DecisionTreeRegressor()
tree_regressor.fit(X_train, y_train)
这两行代码创建了一个决策树回归器对象,并使用训练数据X_train
和相应的目标值y_train
来训练这个模型。
dot_data = StringIO()
这行代码创建了一个StringIO
对象,用于存储决策树的Graphviz描述。
tree.export_graphviz(tree_regressor, out_file=dot_data,filled=True, rounded=True)
这行代码调用了export_graphviz
函数,
它将决策树模型转换为Graphviz的DOT语言格式,并将其写入dot_data
对象。
filled=True
表示节点应该有颜色填充,
rounded=True
表示节点应该有圆角。
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
这行代码使用pydotplus
库将DOT语言描述转换为Graphviz图形对象。
Image(graph.create_png())
这行代码使用Image
类来显示Graphviz图形对象生成的PNG图像。在Jupyter Notebook中,这将直接显示决策树的图像。
需要注意的是,上述代码片段中的tree_regressor
变量似乎是在代码中定义的,但实际上并没有在您提供的代码中定义。正确的代码应该先创建一个决策树回归器实例,然后才能使用它来拟合数据和导出图形。例如:
tree_regressor = tree.DecisionTreeRegressor()
tree_regressor.fit(X_train, y_train)
效果图
我的X只有一个特征 为何这么多分支 ???
大概原因是:
判断是否分叉的依据是样本数多少,有那么多样本当然要分叉,而分那个叉?哪一个特征的那一个点,everywhere都会测试!没有说那个特征优先的说法
这是CART回归
这段代码使用了CART(分类与回归树)算法。具体来说,它是通过Scikit-Learn库中的DecisionTreeRegressor
类实现的。CART是一种流行的机器学习方法,用于构建决策树来进行分类和回归任务。在这个例子中,它被用作回归树,因为DecisionTreeRegressor
专门用于回归问题。
CART(Classification And Regression Trees)是一种决策树学习方法,它可以用于分类(Classification)问题,也可以用于回归(Regression)问题。以下是关于CART回归的详细解释:
CART回归
-
基本概念:
- 回归树:在CART回归中,决策树被用来预测一个连续的目标变量(即数值型输出)。
- 分割准则:CART使用"基尼不纯度"(Gini impurity)作为分类问题的分割准则,
而回归问题使用的是最小化平方误差(平方损失)。
-
工作原理:
- 在构建回归树时,CART算法会寻找能够将数据分割成两个子集的特征和阈值,使得这两个子集的均方误差(MSE, Mean Squared Error)最小。
- 对于每个节点,算法会计算分割后的子节点的平均响应值(通常是目标变量的平均值)。需要解读原理
- 树的每个叶节点都会被赋予一个预测值,通常是落在该叶节点中的所有样本的目标变量的平均值。
-
特点:
- 非参数方法:CART不需要对数据的分布做出假设,因此是一种非参数方法。
- 处理不同类型的数据:它可以处理数值型和类别型特征。
- 易于理解:生成的决策树结构直观,易于解释。
为什么说代码是CART回归?
如果在代码中看到了DecisionTreeRegressor
类的使用,那么可以判断这是在实现CART回归。以下是一个简单的例子:
from sklearn.tree import DecisionTreeRegressor# 假设X是特征矩阵,y是目标变量
X = [[...], [...], ...] # 特征数据
y = [...] # 目标变量数据# 创建一个CART回归模型
regressor = DecisionTreeRegressor()# 训练模型
regressor.fit(X, y)# 使用模型进行预测
predictions = regressor.predict(X)
在这个例子中,DecisionTreeRegressor
就是用来实现CART回归的类。当调用fit
方法时,算法会根据X和y训练一个回归树,这个过程就是CART回归的核心。预测时,模型会根据训练好的树结构来预测目标变量的值。
不是所有的决策树都是CART
不是所有的决策树都是CART(Classification And Regression Trees)。决策树是一种广泛使用的机器学习算法,可以根据不同的分割标准和构建方法分为多种类型。以下是一些常见的决策树类型:
-
ID3(Iterative Dichotomiser 3):
- ID3算法使用信息增益(Information Gain)作为分割标准。
- 主要用于分类问题。
- ID3算法倾向于选择具有大量值的属性。
-
C4.5:
- C4.5是ID3的改进版,使用增益率(Gain Ratio)作为分割标准,以减少偏向于选择具有大量值的属性的问题。
- 既可以用于分类问题也可以用于回归问题,但更常用于分类。
-
CART:
- 如前所述,CART既可以用于分类也可以用于回归。
- 分类树使用基尼不纯度(Gini Impurity)作为分割标准。
- 回归树使用最小化平方误差(平方损失)作为分割标准。
-
CHAID(Chi-squared Automatic Interaction Detection):
- CHAID使用卡方检验来确定最佳分割点。
- 通常用于市场研究,特别是预测消费者行为。
-
MARS(Multivariate Adaptive Regression Splines):
- MARS是一种回归方法,它使用分段线性回归模型来适应数据。
-
Conditional Inference Trees:
- 这种类型的决策树使用统计测试来确定分割标准,而不是信息论或基尼不纯度。
- 它可以更好地处理数据中的噪声和非平稳性。
每种决策树算法都有其独特的特点、优势和局限性。CART是其中一种流行的算法,但不是唯一的一种。在选择决策树算法时,需要根据具体的应用场景和数据特性来决定使用哪一种。
CART(Classification And Regression Trees)是一种决策树算法,它既可以用于分类问题也可以用于回归问题。
-
分类树(Classification Trees):当CART用于分类问题时,它通过基尼不纯度(Gini Impurity)来选择最优的分割点,从而将数据集分成不同的类别。
-
回归树(Regression Trees):当CART用于回归问题时,它通过最小化平方误差(即每个子节点的数据点与该节点平均值之差的平方和)来选择最优的分割点,目的是预测一个连续的目标变量。
CART算法的核心在于递归地分割数据集,直到满足某些停止条件,如节点的纯度达到一定程度、节点中的样本数量低于某个阈值或者树的深度达到预设的最大值等。在分类树中,最终的叶子节点代表一个分类,而在回归树中,叶子节点通常输出一个预测值,这个值通常是落在该叶子节点内所有训练样本目标值的平均值
回归中mse的具体
以下是一个简化的例子,详细解释了CART回归树如何通过最小化平方误差来选择最优分割点。
假设我们有以下一组数据,每个数据点包含一个特征X
和一个连续的目标变量Y
:
复制
X: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Y: [2, 3, 2, 5, 7, 8, 8, 9, 10, 12]
我们的目标是构建一个回归树来预测Y
的值。
步骤 1: 选择最优分割点
首先,我们需要找到最优的分割点。我们考虑将数据集分成两部分,并计算分割前后的平方误差。
假设我们考虑在X=5
处分割数据:
- 左子节点(X <= 5): [1, 2, 3, 4, 5]
- 右子节点(X > 5): [6, 7, 8, 9, 10]
对于左子节点,计算所有Y
值的平均值:
平均值 = (2 + 3 + 2 + 5 + 7) / 5 = 4
左子节点的平方误差:
复制
平方误差 = (2-4)^2 + (3-4)^2 + (2-4)^2 + (5-4)^2 + (7-4)^2 = 10
对于右子节点,计算所有Y
值的平均值:
【分割点左侧所有的Y平均值作为分割点左侧预测值】 【分割点右侧侧所有的Y平均值作为分割点右侧侧预测值】
平均值 = (8 + 8 + 9 + 10 + 12) / 5 = 9.4
右子节点的平方误差:
平方误差 = (8-9.4)^2 + (8-9.4)^2 + (9-9.4)^2 + (10-9.4)^2 + (12-9.4)^2 = 2.8
总平方误差(分割后):
总平方误差 = 左子节点平方误差 + 右子节点平方误差 = 10 + 2.8 = 12.8
我们重复这个过程,考虑不同的分割点(例如X=3
, X=6
等),并计算每个分割点的总平方误差。
步骤 2: 比较分割点
假设我们计算了所有可能的分割点,并得到了以下总平方误差:
- 分割点
X=3
: 总平方误差 = 15.6 - 分割点
X=5
: 总平方误差 = 12.8 - 分割点
X=7
: 总平方误差 = 14.0
在这些分割点中,X=5
给出了最小的总平方误差(12.8),因此我们选择X=5
作为最优分割点。
步骤 3: 构建树节点
现在我们使用X=5
来构建树的第一个节点,并将数据分为左右两个子节点。每个子节点将包含分割点一侧的数据点。
步骤 4: 递归构建树
接下来,我们递归地对每个子节点重复上述步骤,直到满足停止条件(例如,节点的样本数量小于某个阈值,或者平方误差不再显著减少)。
最终,我们得到了一个回归树,它可以用来预测新的数据点。例如,如果有一个新的数据点X=4
,它将被分配到X=5
左边的子节点,并且预测值将是该子节点所有Y
值的平均值,即4。
从零开始的决策树
关于特征的选择顺序(:众生平等,每个特征的每个特征值作为分叉点时都是平等的比较)
在分类与回归树(CART)算法中,特征选择的过程遵循以下步骤来构建决策树:
-
计算不纯度:
- 对于分类树,CART算法通常使用基尼不纯度(Gini Impurity)来评估数据集的纯度。
- 对于回归树,CART算法使用最小二乘回归(Least Squares Regression)来评估数据集的方差。
-
分割特征的选择:
- 对于每个特征,算法会尝试所有可能的分割点。分割点通常是特征值的中点。
- 对于分类问题,算法会计算每个特征在每个可能的分割点处的基尼不纯度,并找到能够最大程度减少基尼不纯度的分割点。
- 对于回归问题,算法会计算每个特征在每个可能的分割点处的平方误差,并找到能够最小化平方误差的分割点。
-
比较特征:
- 一旦找到了每个特征的最佳分割点,算法会比较这些分割点,选择能够最大程度减少不纯度(分类树)或最小化平方误差(回归树)的特征作为节点的分割特征。
-
递归过程:
- 使用选定的特征和分割点对数据进行分割,生成两个子节点。
- 对每个子节点重复上述过程,直到满足停止条件(例如,节点的样本数量小于预定的阈值,或者节点的纯度已经足够高)。
以下是CART算法在特征选择上的关键点:
- 贪婪算法: CART算法是一个贪婪算法,它在每一步选择当前最佳的特征和分割点,而不考虑后续步骤的可能影响。
- 特征重要性: 在CART中,特征的重要性可以通过它在树中的使用频率以及在分割点处减少的不纯度或平方误差的量来衡量。
- 处理高维数据: 当特征数量非常多时,CART算法的计算开销会很大,因为它需要评估每个特征的所有可能分割点。为了处理高维数据,可能需要使用特征选择技术来预先筛选出最重要的特征,或者使用随机森林等集成方法来提高效率。
总的来说,CART算法通过递归地选择在每个步骤上最佳的特征和分割点来构建决策树,直到达到预定的停止条件。
实例1
import pandas as pd# 客户信息 DataFrame
customers_df = pd.DataFrame({'CustomerID': [1, 2, 3, 4], 'CustomerID2': [8, 2, 3, 4],# 'CustomerName': ['Alice', 'Bob', 'Charlie', 'David'],'CustomerID3': [8, 2, 7, 4],'Time':[10,20,10,40]
})
pd.DataFrame(customers_df.groupby(["Time"]).sum(["CustomerID"])).reset_index()
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error
import numpy as np# 生成数据集
# X, y = make_regression(n_samples=100, n_features=4, noise=0.1, random_state=42)# # 划分训练集和测试集
# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)X_train=customers_df
y_train=X_train.Time
# 创建决策树回归模型
tree_regressor = DecisionTreeRegressor(random_state=42,max_depth=2)
tree_regressor.fit(X_train, y_train)# 预测
y_pred_tree = tree_regressor.predict(X_test)# 计算均方误差
mse_tree = mean_squared_error(y_test, y_pred_tree)# 输出结果
X_train[:5], y_train[:5], mse_tree # 显示部分训练数据和决策树回归的均方误差
import pydotplus
from IPython.display import Image
from six import StringIO
from sklearn import tree
tree_regressor=tree_regressor.fit(X_train, y_train)
dot_data=StringIO()
tree.export_graphviz(tree_regressor,feature_names=['f1','f2','f3','f4'] ,out_file=dot_data,
filled=True, rounded=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())
想要的文字——feature name
实例2
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error
import numpy as np# 生成数据集
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# X_train=customers_df
# y_train=X_train.Time
# 创建决策树回归模型
tree_regressor = DecisionTreeRegressor(random_state=42,max_depth=4)
tree_regressor.fit(X_train, y_train)# 预测
y_pred_tree = tree_regressor.predict(X_test)# 计算均方误差
mse_tree = mean_squared_error(y_test, y_pred_tree)# 输出结果
X_train[:5], y_train[:5], mse_tree # 显示部分训练数据和决策树回归的均方误差
import pydotplus
from IPython.display import Image
from six import StringIO
from sklearn import tree
tree_regressor=tree_regressor.fit(X_train, y_train)
dot_data=StringIO()
tree.export_graphviz(tree_regressor,#feature_names=['f1','f2','f3','f4'] ,out_file=dot_data,
filled=True, rounded=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())
书本复现成功
相关文章:
绘制决策树尝试3
目录 代码解读AI 随机状态 种子 定义决策树回归模型 tree的decision regressor fit 还可用来预测 export 效果图 我的X只有一个特征 为何这么多分支 ??? 这是CART回归 CART回归 为什么说代码是CART回归? 不是所有的决…...
【逻辑学导论第15版】A. 推理
识别下列语段中的前提与结论。有些前提确实支持结论,有些并不支持。请注意,前提可能直接或间接地支持结论,而简单的语段也可能包含不止一个论证。 例题: 1.管理得当的民兵组织对于一个自由国家的安全是必需的,因而人民…...
qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别
qt-C笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别 code review! 参考笔记 1.qt-C笔记之重写QGraphicsItem的paint方法(自定义QGraphicsItem) 文章目录 qt-C笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphic…...
[Java]泛型(二)泛型方法
1.定义 在 Java 中,泛型方法是指在方法声明中使用泛型类型参数的一种方法。它使得方法能够处理不同类型的对象,而不需要为每种类型写多个方法,从而提高代码的重用性。 泛型方法与泛型类不同,泛型方法的类型参数仅仅存在于方法的…...
ProfibusDP主机与从机交互
ProfibusDP 主机SD2索要数据下发:68 08 F7 68 01 02 03 21 05 06 07 08 1C 1668:SD2 08:LE F7:LEr 68:SD2 01:目的地址 02:源地址 03:FC_CYCLIC_DATA_EXCHANGE功能码 21:数据地址 05,06,07,08&a…...
jQuery小游戏(二)
jQuery小游戏(二) 今天是新年的第二天,本人在这里祝大家,新年快乐,万事胜意💕 紧接jQuery小游戏(一)的内容,我们开始继续往下咯😜 游戏中使用到的方法 key…...
【MQ】如何保证消息队列的高可用?
RocketMQ NameServer集群部署 Broker做了集群部署 主从模式 类型:同步复制、异步复制 主节点返回消息给客户端的时候是否需要同步从节点 Dledger:要求至少消息复制到半数以上的节点之后,才给客户端返回写入成功 slave定时从master同步数据…...
简易计算器(c++ 实现)
前言 本文将用 c 实现一个终端计算器: 能进行加减乘除、取余乘方运算读取命令行输入,输出计算结果当输入表达式存在语法错误时,报告错误,但程序应能继续运行当输出 ‘q’ 时,退出计算器 【简单演示】 【源码位置】…...
AI大模型开发原理篇-4:神经概率语言模型NPLM
神经概率语言模型(NPLM)概述 神经概率语言模型(Neural Probabilistic Language Model, NPLM) 是一种基于神经网络的语言建模方法,它将传统的语言模型和神经网络结合在一起,能够更好地捕捉语言中的复杂规律…...
SpringBoot 基础特性
SpringBoot 基础特性 SpringApplication 相关特性 自定义 banner 在主配置文件写 banner.txt 的地址 #也可以不写默认路径就是 banner.txt #从类路径下找 banner #类路径就是 编译的target 目录 还有导入的第三方类路径。 spring.banner.locationclasspath:banner.txt#控制…...
网站快速收录:提高页面加载速度的重要性
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/32.html 网站快速收录中,提高页面加载速度具有极其重要的意义。以下从多个方面详细阐述其重要性: 一、提升用户体验 减少用户等待时间:页面加载速度直接…...
如何使用formlinker,重构微软表单创建的数字生产力法则?
仅需三步:上传文件-下载文件-导入文件到微软表单 凌晨两点的格式炼狱:被浪费的300万小时人类创造力 剑桥大学的实验室曾捕捉到一组震撼数据:全球教育工作者每年花在调整试题格式上的时间,足够建造3座迪拜哈利法塔。当北京某高校的…...
从零搭建一个Vue3 + Typescript的脚手架——day3
3.项目拓展配置 (1).配置Pinia Pinia简介 Pinia 是 Vue.js 3 的状态管理库,它是一个轻量级、灵活、易于使用的状态管理库。Pinia 是 Vue.js 3 的官方状态管理库,它可以帮助开发者更好地管理应用的状态。Pinia 是一个开源项目,它有丰富的文档…...
Three.js实战项目02:vue3+three.js实现汽车展厅项目
文章目录 实战项目02项目预览项目创建初始化项目模型加载与展厅灯光加载汽车模型设置灯光材质设置完整项目下载实战项目02 项目预览 完整项目效果: 项目创建 创建项目: pnpm create vue安装包: pnpm add three@0.153.0 pnpm add gsap初始化项目 修改App.js代码&#x…...
Linux——网络(tcp)
文章目录 目录 文章目录 前言 一、TCP逻辑 1. 面向连接 三次握手(建立连接) 四次挥手(关闭连接) 2. 可靠性 3. 流量控制 4. 拥塞控制 5. 基于字节流 6. 全双工通信 7. 状态机 8. TCP头部结构 9. TCP的应用场景 二、编写tcp代码函数…...
Ubuntu Server 安装 XFCE4桌面
Ubuntu Server没有桌面环境,一些软件有桌面环境使用起来才更加方便,所以我尝试安装桌面环境。常用的桌面环境有:GNOME、KDE Plasma、XFCE4等。这里我选择安装XFCE4桌面环境,主要因为它是一个极轻量级的桌面环境,适合内…...
分享|通过Self-Instruct框架将语言模型与自生成指令对齐
结论 在大型 “指令调整” 语言模型依赖的人类编写指令数据存在数量、多样性和创造性局限, 从而阻碍模型通用性的背景下, Self - Instruct 框架, 通过 自动生成 并 筛选指令数据 微调预训练语言模型, 有效提升了其指令遵循能…...
指针空值——nullptr(C++11)——提升指针安全性的利器
C11引入的nullptr是对指针空值的正式支持,它提供了比传统NULL指针更加安全和明确的指针空值表示方式。在C语言中,指针操作是非常基础且常见的,而如何安全地处理指针空值,一直是开发者关注的重要问题。本文将详细讲解nullptr的引入…...
C++游戏开发
C 是游戏开发中广泛使用的编程语言,因其高性能、灵活性和对硬件的直接控制能力而备受青睐。以下是 C 游戏开发的一些关键点: 1. 游戏引擎 Unreal Engine:使用 C 作为主要编程语言,适合开发高质量 3D 游戏。Unity:虽然…...
【Docker】ubuntu中 Docker的使用
之前记录了 docker的安装 【环境配置】ubuntu中 Docker的安装; 本篇博客记录Dockerfile的示例,docker 的使用,包括镜像的构建、容器的启动、docker compose的使用等。 当安装好后,可查看docker的基本信息 docker info ## 查…...
Linux C openssl aes-128-cbc demo
openssl 各版本下载 https://openssl-library.org/source/old/index.html#include <stdio.h> #include <string.h> #include <openssl/aes.h> #include <openssl/rand.h> #include <openssl/evp.h>#define AES_KEY_BITS 128 #define GCM_IV_SIZ…...
【卫星通信】链路预算方法
本文介绍卫星通信中的链路预算方法,应该也适用于地面通信场景。 更多内容请关注gzh【通信Online】 文章目录 下行链路预算卫星侧参数信道参数用户侧参数 上行链路预算链路预算计算示例 下行链路预算 卫星侧参数 令卫星侧天线数为 M t M_t Mt,每根天线…...
【Elasticsearch】 索引模板 ignore_missing_component_templates
解释 ignore_missing_component_templates 配置 在Elasticsearch中,ignore_missing_component_templates 是一个配置选项,用于处理索引模板中引用的组件模板可能不存在的情况。当您创建一个索引模板时,可以指定一个或多个组件模板࿰…...
Github 2025-01-30 Go开源项目日报 Top10
根据Github Trendings的统计,今日(2025-01-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…...
Linux 下注册分析(4)
系列文章目录 Linux 设备树 Linux 下注册分析(1) Linux 下注册分析(2) Linux 下注册分析(3) Linux 下注册分析(4) 文章目录 系列文章目录1、device_create简介device_createdevice_c…...
PhotoShop中JSX编辑器安装
1.使用ExtendScript Tookit CC编辑 1.安装 打开CEP Resource链接: CEP-Resources/ExtendScript-Toolkit at master Adobe-CEP/CEP-Resources (github.com) 将文件clone到本地或者下载到本地 点击AdobeExtendScriptToolKit_4_Ls22.exe安装,根据弹出的…...
目前市场主流的AI PC对于大模型本地部署的支持情况分析-Deepseek
以下是目前市场主流AI PC对**大模型本地部署支持情况**的综合分析,结合硬件能力、软件生态及厂商动态进行总结: --- ### **一、硬件配置与算力支持** 1. **核心处理器架构** - **异构计算方案(CPUGPUNPU)**:主流…...
51单片机开发:独立键盘实验
实验目的:按下键盘1时,点亮LED灯1。 键盘原理图如下图所示,可见,由于接GND,当键盘按下时,P3相应的端口为低电平。 键盘按下时会出现抖动,时间通常为5-10ms,代码中通过延时函数delay…...
微服务网关鉴权之sa-token
目录 前言 项目描述 使用技术 项目结构 要点 实现 前期准备 依赖准备 统一依赖版本 模块依赖 配置文件准备 登录准备 网关配置token解析拦截器 网关集成sa-token 配置sa-token接口鉴权 配置satoken权限、角色获取 通用模块配置用户拦截器 api模块配置feign…...
STM32 TIM输入捕获 测量频率
输入捕获简介: IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器…...
python | OpenCV小记(一):cv2.imread(f) 读取图像操作(待更新)
python | OpenCV小记(一):cv2.imread(f)读取图像操作 1. 为什么 [:, :, 0] 提取的是第一个通道(B 通道)?OpenCV 的通道存储格式索引操作 [:, :, 0] 的解释常见误解 1. 为什么 [:, :,…...
解析静态链接
文章目录 静态链接空间与地址分配相似段合并虚拟地址分配符号地址确定符号解析与重定位链接器优化重复代码消除函数链接级别静态库静态链接优缺点静态链接 一组目标文件经过链接器链接后形成的文件即可执行文件,如果没有动态库的加入,那么这个可执行文件被加载后无需再进行重…...
Ollama 运行从 ModelScope 下载的 GGUF 格式的模型
本文系统环境 Windows 10 Ollama 0.5.7 Ollama 是什么? Ollama 可以让你快速集成和部署本地 AI 模型。它支持各种不同的 AI 模型,并允许用户通过简单的 API 进行调用 Ollama 的安装 Ollama 官网 有其下载及安装方法,非常简便 但如果希…...
【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)
文章目录 【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)1. JDK介绍2. 下载 JDK3. 安装 JDK4. 配置环境变量5. 验证安装6. 创建并测试简单的 Java 程序6.1 创建 Java 程序:6.2 编译和运行程序:6.3 在显示或更改文件的…...
探索性测试与自动化测试的结合
随着软件开发周期的不断缩短和质量要求的不断提高,测试行业正在经历一场深刻的变革。自动化测试因其高效性和可重复性成为测试团队必不可少的工具,而探索性测试(Exploratory Testing, ET)则因其灵活性和创意性在面对复杂、动态变化…...
我是如何写作的?
以前是如何写作的 从小学三年级开始学写作文,看的作文书,老师布置作文题目,内容我都是自己写的。那时会积累一些好词,听到什么好词就记住了。并没有去观察什么,也没有好好花心思在写作上。总觉得我写的作文与真正好的…...
智慧园区管理系统为企业提供高效运作与风险控制的智能化解决方案
内容概要 快鲸智慧园区管理系统,作为一款备受欢迎的智能化管理解决方案,致力于为企业提供高效的运作效率与风险控制优化。具体来说,这套系统非常适用于工业园、产业园、物流园、写字楼及公寓等多种园区和商办场所。它通过数字化与智能化的手…...
INCOSE需求编写指南-附录 B: 首字母缩略词和缩写
附录 Appendix B: 首字母缩略词和缩写ACRONYMS AND ABBREVIATIONS AD 难易程度的进阶 Advancement Degree of Difficulty AI 人工智能 Artificial Intelligence CM 配置管理 Configuration Management ConOps 运作理念 Concept of Operations COTS 商业现货 Comme…...
VS2008 - debug版 - 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
文章目录 VS2008 - debug版 - 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。概述笔记VS2008安装环境VS2008测试程序设置默认报错的情况措施1措施2备注 - exe清单文件的问题是否使用静态库?_BIND_TO_CURRENT_VCLIBS_VERSION的出处…...
Docker容器数据恢复
Docker容器数据恢复 1 创建mongo数据库时未挂载数据到宿主机2 查找数据卷位置3 将容器在宿主机上的数据复制到指定目录下4 修改docker-compose并挂载数据(注意端口)5 重新运行新容器 以mongodb8.0.3为例。 1 创建mongo数据库时未挂载数据到宿主机 versi…...
翼星求生服务器搭建【Icarus Dedicated Server For Linux】
一、前言 本次搭建的服务器为Steam平台一款名为Icarus的沙盒、生存、建造游戏,由于官方只提供了Windows版本服务器导致很多热爱Linux的小伙伴无法释怀,众所周知Linux才是专业服务器的唯一准则。虽然Github上已经有大佬制作了容器版本但是容终究不够完美,毕竟容器无法与原生L…...
如何在data.table中处理缺失值
📊💻【R语言进阶】轻松搞定缺失值,让数据清洗更高效! 👋 大家好呀!今天我要和大家分享一个超实用的R语言技巧——如何在data.table中处理缺失值,并且提供了一个自定义函数calculate_missing_va…...
react中如何获取dom元素
实现代码 const inputRef useRef(null) inputRef.current.focus()...
引入@Inject的依赖包
maven引入Inject的依赖包 在 Maven 项目中引入 Inject 注解所需的依赖包同样取决于你打算使用的依赖注入框架。以下是一些常见框架及其 Maven 依赖配置的示例: 1. Google Guice 如果你打算使用 Google Guice,你需要在 pom.xml 文件中添加 Guice 的依赖…...
Deep Seek R1本地化部署
目录 说明 一、下载ollama 二、在ollama官网下载模型 三、使用 后记 说明 操作系统:win10 使用工具:ollama 一、下载ollama 从官网下载ollama: ollama默认安装在C盘,具体位置为C:\Users\用户名\AppData\Local\Programs\O…...
RDMA 工作原理 | 支持 RDMA 的网络协议
注:本文为 “RDMA” 相关文章合辑。 英文引文机翻未校。 图片清晰度受引文所限。 Introduction to Remote Direct Memory Access (RDMA) Written by: Dotan Barak on March 31, 2014.on February 13, 2015. What is RDMA? 什么是 RDMA? Direct me…...
再见了流氓软件~~
聊一聊 最近一直在测试软件,需要装各种软件和工具配合测试,导致现在电脑都快装满了,需要把不用的软件卸载。电脑自带的卸载只能一个一个卸载,不但麻烦还卸载不干净。 相信很多人也有这方面的需要,电脑装了很多软件&a…...
165. 比较版本号
两个注意的点: 分割字符串的时候,要用split("\\.")而不能用split("."),因为前者表示“对.使用斜杠转义,\\表示一个斜杠”,而后者表示匹配任意单个字符,例如version2 "1.2.3&quo…...
一文大白话讲清楚webpack进阶——9——ModuleFederation实战
文章目录 一文大白话讲清楚webpack进阶——9——ModuleFederation实战1. 啥是ModuleFederation2. 创建容器应用3. 创建远程应用4. 启动远程应用5. 使用远程应用的组件 一文大白话讲清楚webpack进阶——9——ModuleFederation实战 1. 啥是ModuleFederation 先看这篇文章&#…...
【llm对话系统】LLM 大模型Prompt 怎么写?
如果说 LLM 是一个强大的工具,那么 Prompt 就是使用这个工具的“说明书”。一份好的 Prompt 可以引导 LLM 生成更准确、更相关、更符合你期望的输出。 今天,我们就来聊聊 LLM Prompt 的编写技巧,掌握这把解锁 LLM 潜能的钥匙! 一…...