sklearn学习2(回归树)

重要参数,属性和接口

class sklearn.tree.DecisionTreeClassifier(criterion='mse'
                                          ,splitter="random"
                                          ,max_depth=None
                                          ,min_samples_split=2
                                          ,min_samples_leaf=1
                                          ,min.weight_fracton_leaf=0.0
                                          ,mac_features_None
                                          ,random_state_None
                                          ,max_leaf_nodes=None
                                          ,min_impurity_decrease=0.0
                                          ,min_impurity_split=None
                                          ,presort=False
                                         )

几乎所有参数都和分类树相同,在回归树中,没有标签分布是否均衡的问题,所以没有class_weight这样的参数

【1】criterion

回归树衡量分枝质量的指标,支持的标准有三种:
1) 输入"mse"使用均方误差mean squared error(MSE),父节点和叶子节点之间的均方误差的差额被用来作为特征选择的标准,这种方法通过使用叶子节点的均值来最小化损失
2)输入"friedman_mse"使用费尔德曼均方误差,这种指标是用费里德曼对潜在分支中的问题改进后的均方误差
3)输入 "mae"使用绝对平均误差MAE(mean absolute error),这种指标使用叶节点的中指来最小化L1的损失

属性中最重要的是feature_importances_,接口依然是apply,fit,predict,score最核心

M S E = 1 N ∑ i = 1 N ( f i − y i ) 2 MSE=\dfrac{1}{N}\sum ^{N}_{i=1}\left( f_{i}-y_{i}\right) ^{2} MSE=N1i=1N(fiyi)2

N是样本数量,i是每个数据样本, f i f_{i} fi是模型回归出的数据, y i y_{i} yi是样本i实际的数据标签。
在回归树中,MSE不只是我们分枝质量衡量标准,也就是我们常用的衡量回归树质量的标准

回归树的接口score返回的是R的平方(越接近1越好):
R 2 = 1 − U V R^{2}=1-\dfrac{U}{V} R2=1VU
u= ∑ i = 1 N ( f i − y i ) 2 \sum ^{N}_{i=1}\left( f_{i}-y_{i}\right) ^{2} i=1N(fiyi)2
v= ∑ i = 1 N ( y i − y ^ ) 2 \sum ^{N}_{i=1}\left( y_{i}-\widehat{y}\right) ^{2} i=1N(yiy )2
sklearn中使用均方误差作为评判标准时,计算“负均方误差”
真正的需要去掉负号

【2】交叉验证cross_val_score

简单来计算模型稳定性的
我们将我们的数据划分为n份,依次使用其中一份做我诶测试集,其他n-1份作为训练集,多次计算模型的精确性来评估魔性的平均准确程度。训练集和测试集的划分会干扰模型的结果,因此用交叉验证n次的结果求出一个平均值,是对模型效果的一个更好的度量
使用波士顿房价

from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeRegressor
boston=load_boston()
boston

在这里插入图片描述
使用交叉验证

regressor=DecisionTreeRegressor(random_state=0)
cross_val_score(regressor,boston.data,boston.target,cv=10
               # scoring="neg_mean_squared_error")

在这里插入图片描述
在这里插入图片描述
请帮我用负的均方误差来评估验证
都是负值

【3】实例:一维回归的图像绘制

import numpy as np #生成图上所需数据点,生成正弦曲线
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt #画图
#创建一条含有噪声的正弦曲线
rng = np.random.RandomState(1)#生成随机数种子
#rang.rand(10) 生成10个0到1之间的随机数
#rang.rand(2,3) 生成2行3列的随机数的数组
X = np.sort(5 * rng.rand(80,1),axis=1)#生成0~5之间随机数,二维80行1列的矩阵,升序由axis=0控制
y = np.sin(X).ravel()
#X是二维的,因而生成的Y也是二维的,但是二维的Y会报错,因而要使用ravel降维,变成一维
y[::5] += 3 *(0.5 - rng.rand(16))#给某些数据加噪声
#y[::5]切片,步长为5,取80/5=16个,切片加上16个 3*(-0.5~0.5)的值(即为噪声)
plt.figure()
plt.scatter(X,y,s=20)#scatter专门来画散点图
#plt.scatter(X,y,s=20,edgecolor="black",c="darkorange",lable="data")#scatter专门来画散点图
print(plt.show()) #画出有噪音的散点图

有加噪声的图像,和没见加噪声的图像

y[::5] += 3 *(0.5 - rng.rand(16))#给某些数据加噪声

绘制图像

import numpy as np #生成图上所需数据点,生成正弦曲线
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt #画图
#创建一条含有噪声的正弦曲线
rng = np.random.RandomState(1)#生成随机数种子
#rang.rand(10) 生成10个0到1之间的随机数
#rang.rand(2,3) 生成2行3列的随机数的数组
X = np.sort(5 * rng.rand(80,1),axis=1)#生成0~5之间随机数,二维80行1列的矩阵,升序由axis=0控制
y = np.sin(X).ravel()
#X是二维的,因而生成的Y也是二维的,但是二维的Y会报错,因而要使用ravel降维,变成一维
y[::5] += 3 *(0.5 - rng.rand(16))#给某些数据加噪声
#y[::5]切片,步长为5,取80/5=16个,切片加上16个 3*(-0.5~0.5)的值(即为噪声)
plt.figure()
plt.scatter(X,y,s=20)#scatter专门来画散点图
#plt.scatter(X,y,s=20,edgecolor="black",c="darkorange",lable="data")#scatter专门来画散点图
#print(plt.show()) #画出有噪音的散点图


#实例化,训练模型
regr_1 = DecisionTreeRegressor(max_depth=2)   #不同深度的树来拟合曲线
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1=regr_1.fit(X,y)
regr_2=regr_2.fit(X,y)

#导入测试集,预测结果
X_test = np.arange(0.0,5.0,0.01)[:,np.newaxis]
#生成测试集,从0到5之间步长为0.01取数的函数
#np.arrange(开始点,结束点,步长) 生成有序数组的函数
#增维,l[:,np.newaxis]把l增维,l[np.newaxis,:]把l降维 (要增维的原因是把测试集放到回归树里面必须是2维)
#print(np.arange(0.0,5.0,0.01)[:,np.newaxis])检测数据已成二维
#print(X_test.shape)
y_1 = regr_1.predict(X_test)#预测结果,输入x得到y
y_2 = regr_2.predict(X_test)
#print(y_1,y_2)

#画图
plt.figure()#生成画布
#scatter画散点图
plt.scatter(X, y, s=20, edgecolor="black",c="darkorange", label="data")
#s:画散点图点的大小,edgecolor:边框de颜色,c:点的颜色,lable:标签数据,纵坐标
plt.plot(X_test, y_1, color="cornflowerblue",label="max_depth=2", linewidth=2)
#plot画线,label线的名字,linewidth线宽,线的名字和线宽可以不要,颜色可以默认
plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2)
plt.xlabel("data")#横坐标名字
plt.ylabel("target")#纵坐标名字
plt.title("Decision Tree Regression")#图的标题
plt.legend()
print(plt.show())  #显示图'''

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值