广西学校网站建设,杭州市造价网价格查询,网站推广策划方案大数据精准获客,什么平台可以做网站推广文章目录 决策树算法核心是要解决两个的关键问题sklearn中的决策树模型sklearn建模步骤分类树Criterionrandom_state splitter剪枝参数max_depthmin_samples_leafmin_samples_splitmax_featuresmin_impurity_decrease确认最优剪枝参数目标权重参… 文章目录 决策树算法核心是要解决两个的关键问题sklearn中的决策树模型sklearn建模步骤分类树Criterionrandom_state splitter剪枝参数max_depthmin_samples_leafmin_samples_splitmax_featuresmin_impurity_decrease确认最优剪枝参数目标权重参数重要属性和接口 回归树参数、属性、接口Criterion 交叉验证 决策树算法核心是要解决两个的关键问题
1、如何从数据表中照出最佳节点和最佳分支 2、如何让决策树停止生长防止过拟合 就是说假如我有一张数据表数据表中有成千上万个特征我要把他们都提问完吗 sklearn中的决策树模型 本文主要是学习分类树和回归树
sklearn建模步骤 from sklearn import tree
clf tree.DecisionTreeClassifier()
clf clf.fit(x_train, y_train)
result clf.score(x_test, y_test)分类树
Criterion
为了将表格转化为一棵树决策树需要找到最佳节点和最佳分支方法对于分类数来说衡量最佳的方法是叫做不纯度通常来说不纯度越低决策树对训练集的拟合效果越好所有的决策树算法都是将和不纯度相关的某个属性最优化不管我们用那个算法都是追求的与不纯度相关的指标最优化 不纯度基于节点来计算树中的每个节点都会有一个不纯度并且子节点的不纯度一定低于父节点的不纯度在一棵决策树上叶子节点的不纯度一定是最低的 Criterion这个参数就是用来决定不纯度计算方法的sklearn中提供了两种方法 一种是输入“entropy”使用信息熵 一种是输入gini,使用基尼系数 我们无法干扰信息熵和基尼系数的计算所以这里我们知道怎么算的即可sklearn中的方法我们是无法干扰的 相比于基尼系数来说信息熵对于不纯度更加敏感对不纯度的更强但在实际使用中两者的效果差不多信息熵的计算相比于基尼系数会慢一点因为基尼系数没有对数运算因为信息熵对于不纯度更加敏感所以信息熵在计算决策树时候会更加仔细所以对于高维数据或者噪音很多的数据来说很容易过拟合 关于参数如何选择 我们可以看到我们的决策树中并没有用到我们所给的所有属性
clf tree.DecisionTreeClassifier(criterion entropy, random_state30)
clf clf.fit(Xtrain, Ytrain)
score clf.score(Xtest, Ytest) # 返回预测的准确度accuracy
scorerandom_state splitter
用来设置分支中的随机模式的参数默认为None在高维度时随机性会表现更明显低维度数据几乎不会显现我们任意给random_state一个数值可以让模型稳定下来 决策树是随机的 splitter也是用来控制决策树中随机选项的可以输入best决策树虽然分支时会随机但会有限选择更重要的特征进行分支输入random分支时会更加随机树会更深拟合将会降低这也是防止过拟合的一种方法
clf tree.DecisionTreeClassifier(criterion entropy, splitterbest)
clf clf.fit(Xtrain, Ytrain)
score clf.score(Xtest, Ytest) # 返回预测的准确度accurac
score剪枝参数
在不加限制的情况下一颗决策树会生长到衡量不纯度的指标最优或没有更多的特征可用停止这样的决策树往往会过拟合也就是说他会在训练集上表现很好在测试集上表现却很糟糕
score clf.score(Xtrain, Ytrain)
score我们要分清楚过拟合的概念过拟合也就是说他会在训练集上表现很好在测试集上表现却很糟糕但如果我们在训练集和测试集上的表现效果都很好的话不能称为过拟合 剪枝策略对于决策树的影响巨大正确的剪枝策略是决策树优化的核心
max_depth
限制树的最大深度超过设定深度的树枝全部剪掉 这是用的最广泛的剪枝参数在高维度低样本量时非常有效决策树多生长一层对样本的需求量就会增加一倍所以限制决策树的深度能够特别有效的限制过拟合在集成算法中也非常常用在实际使用过程中建议我们从3开始尝试看看拟合的效果再决定是否增加深度
min_samples_leafmin_samples_split
这两个是用来限制叶子节点的参数 min_samples_leaf建议从5开始使用 min_samples_split一个节点至少包含min_samples_split个样本才被允许进行分支
max_featuresmin_impurity_decrease 确认最优剪枝参数
使用确认超参数的曲线
import matplotlib.pyplot as plt
test []
for i in range(10):clf tree.DecisionTreeClassifier(criterion entropy, random_state30, splitterrandom, max_depth i 1)clf clf.fit(Xtrain, Ytrain)score clf.score(Xtest, Ytest) # 返回预测的准确度accuracytest.append(score)
plt.plot(range(1,11), test,color red, labelmax_depth)
plt.legend()
plt.show()目标权重参数 重要属性和接口
fit score apply predict
回归树
参数、属性、接口
Criterion
回归树衡量分枝质量的指标支持的有三种 1、mse使用均方误差 2、friedman_mse误差费尔德曼均方误差 3、mae绝对均方误差 这里面也有许多数学原理但是我们在使用sklearn时不用关心因为这些因素我们并无法干预 属性依然是feature_importance_ 接口中依然是 fit score apply predict 是最核心
交叉验证
交叉验证是用来验证模型稳定性的一种方法我们将数据划分为n份依次使用其中一份作为测试集其他n-1份作为训练集多次计算模型的精确性来评估模型的平均准确程度 导入所需要的库
from sklearn.datasets import load_diabetes
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeRegressor导入数据集
diabetes load_diabetes()实例化并交叉验证
regressor DecisionTreeRegressor(random_state 0) #实例化
cross_val_score(regressor, diabetes.data, diabetes.target, cv 10, scoring neg_mean_squared_error) #交叉验证参数解读 1、第一个参数可以是回归也可以是分类这里的模型不止可以是决策树可以是其他的支持向量机、随机森林等等模型可以是任何我们实例化后的算法模型 2、第二个参数是完整的不需要分测试集和训练集的特征矩阵交叉验证会自己帮我们划分测试集和数据集 3、第三个参数是数据的标签完整的数据标签 4、cv 10是将数据集分成10分每次用其中的一份作为测试集通常我们将这个数设为5 5、scoring用后面的neg_mean_squared_error衡量我们交叉测试的结果当默认时会返回R2可能为负数但是我们在做回归时最常用的是均方误差neg_mean_squared_error是负均方误差R2越接近1越好