1 sklearn的学习笔记--决策树( 二 )


分类树总结1.2 回归树
回归树主要不同于决策树的在于其关于label的预测并不是一个指定的 , 出现截断式的输出 , 而是一种体现连续化的分布 , 更多的是拟合一条比较好的曲线去代替其中对应的内容 。
回归树衡量分支质量的指标支持三种不同的标准:
在本次学习中 , 我们采用波士顿房价来进行训练 , 在中提供相应的数据集用于学习模型
from sklearn.tree import DecisionTreeRegressorfrom sklearn.datasets import load_bostonfrom sklearn.model_selection import cross_val_scoreimport pandas as pdboston = load_boston()# 将波士顿房价进行可视化的输出来展示pd.concat([pd.DataFrame(boston.data),pd.DataFrame(boston.target)],axis=1)
根据上图我们可以检出 , 一种拥有13个不同的指标如下所示 , 其中最后为其对应的标签 。
array([‘CRIM’, ‘ZN’, ‘INDUS’, ‘CHAS’, ‘NOX’, ‘RM’, ‘AGE’, ‘DIS’, ‘RAD’, ‘TAX’, ‘’, ‘B’, ‘LSTAT’], dtype=’
搭建模型三部曲
regressor = DecisionTreeRegressor(random_state=0)cross_val_score(regressor, boston.data, boston.target, cv=10)#array([ 0.48141081,0.60461936, -1.32633384,0.54154398,0.75705408,#0.33934083,0.18757206,0.40679147, -1.9602183 , -0.32967889])# 利用数据交叉认证来完成对应 , 其中cv表示对应的数据需要加载的次数 , 默认的评价指标采用的是R平方来操作数据分布为[-∞ , 1]regressor = DecisionTreeRegressor(random_state=0)cross_val_score(regressor, boston.data, boston.target, cv=10,scoring="neg_mean_squared_error")# 同上 , -mse的数据分布为[-∞ , 0]#array([-18.08941176, -10.61843137, -16.31843137, -44.97803922,#-17.12509804, -49.71509804, -12.9986, -88.4514,#-55.7914, -25.0816])
实例一:一维回归的图像绘制 , 拟合正弦函数
# 导入一些必要的包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() # 去除矩阵中一些无用的维度信息,np中的降维函数# 为生成的数据添加一些扰动来干扰模型 , 模拟显示数据可能存在的问题y[::5] += 3*(0.5 -rng.rand(16))# 生成三种不同的回归树 , 深度设置成2、3、5来展示regr_1 = DecisionTreeRegressor(max_depth=2)regr_2 = DecisionTreeRegressor(max_depth=5)regr_3 = DecisionTreeRegressor(max_depth=3)# 对三个模型喂入一定的数据regr_1.fit(X,y)regr_2.fit(X,y)regr_3.fit(X,y)# 生成序列化的数据用于测试 , 病假数据插入对应的模型中进行测试Xtest = np.arange(0.0, 5.0, 0.01)[:,np.newaxis]y_1 = regr_1.predict(Xtest)y_3 = regr_2.predict(Xtest)y_5 = regr_3.predict(Xtest)# 可视化视图plt.figure()plt.scatter(X,y,s=20,edgecolors="black",c='darkorange',label='data')plt.plot(Xtest,y_1,color="blue",label='max_2',linewidth=2)plt.plot(Xtest,y_3,color="green",label='max_5',linewidth=2)plt.plot(Xtest,y_5,color="yellow",label='max_3',linewidth=2)plt.xlabel('data')plt.ylabel('target')plt.title('Decision Tree Regression')plt.legend()plt.show()
实例二:泰坦尼克号数据
泰坦尼克号的沉没是迄今为止最大的海难吗 , 但在中并没有提供其对应的数据集 , 可以在中找到对应的数据 。
# 导入可能使用的方法import pandas as pdfrom sklearn.tree import DecisionTreeClassifierimport matplotlib.pyplot as pltfrom sklearn.model_selection import GridSearchCV,train_test_split,cross_val_predict# 导入对应的数据集 , 具有data和test两个数据集 , 其中test数据集并没有对应的label , 主要用于比赛中 。taitanic_data = http://www.kingceram.com/post/pd.read_csv("Taitanic_data/data.csv")