机器学习实战2-决策树算法( 二 )


这是用的最广泛的剪枝参数,在高维度低样本量时非常有效,决策树多生长一层对样本的需求量就会增加一倍,所以限制决策树的深度能够特别有效的限制过拟合,在集成算法中也非常常用,在实际使用过程中,建议我们从3开始尝试,看看拟合的效果再决定是否增加深度
&&
这两个是用来限制叶子节点的参数,
建议从5开始使用
:一个节点至少包含个样本才被允许进行分支
&&e
确认最优剪枝参数
使用确认超参数的曲线
import matplotlib.pyplot as plttest = []for i in range(10):clf = tree.DecisionTreeClassifier(criterion = "entropy", random_state=30, splitter="random", 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", label="max_depth")plt.legend()plt.show()
目标权重参数
重要属性和接口
fit
score
apply
回归树 参数、属性、接口
回归树衡量分枝质量的指标,支持的有三种
1、mse使用均方误差
2、误差费尔德曼均方误差
3、mae绝对均方误差
这里面也有许多数学原理,但是我们在使用时不用关心,因为这些因素我们并无法干预
属性依然是

机器学习实战2-决策树算法

文章插图
接口中依然是
fit
score
apply
是最核心
交叉验证
交叉验证是用来验证模型稳定性的一种方法,我们将数据划分为n份,依次使用其中一份作为测试集,其他n-1份作为训练集,多次计算模型的精确性来评估模型的平均准确程度
导入所需要的库
from sklearn.datasets import load_diabetesfrom sklearn.model_selection import cross_val_scorefrom 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、用后面的or衡量我们交叉测试的结果,当默认时会返回R2可能为负数,但是我们在做回归时最常用的是均方误差,or是负均方误差,R2越接近1越好
sin函数模拟实例(回归树)
导入库
import numpy as npfrom sklearn.tree import DecisionTreeRegressorimport matplotlib.pyplot as plt
随机种子
rng = np.random.RandomState(1)
生成数据
x = np.sort(5 * rng.rand(80, 1), axis=0)y = np.sin(x).ravel() # 降维使我们的数据只有一维# y = np.sin(x).ravel()我们现实中不可获得的数据的真实的状况,所以我们需要加入一些噪声print(y.shape)y[::5] += 3 * (0.5 - rng.rand(16)) # 这里涉及切片的用法,行、列、最后一个是步长,这里表示对所有的数进行步长为5的切片,这一步是添加噪声