sklearn入门——回归树

重要参数、属性及接口
  • criterion
    回归树衡量分支质量的指标,支持的标准有三种:
    1)输入“mse”使用均方误差(mean squared error),父节点和子节点之间的均方误差的差额来作为特征选择的标准,通过使用叶子节点的均值来最小化L2损失。
    2)输入"friedman_mse"使用费尔德曼均方误差,这种指标使用费尔德曼针对潜在分支中的问题改进后的均方误差。
    3)输入"mae" 使用绝对平方误差,使用节点的中值来最小化L1损失
    其他属性也包括feature_importances_,接口有apply,fit,predict,score等核心的。
    M S E = 1 N ∑ i = 1 N ( f i − y i ) 2 MSE=\frac{1}{N}\sum_{i=1}^{N}(f_i-y_i)^2 MSE=N1i=1N(fiyi)2

    在回归树中MSE既是分支质量的衡量标准也是回归树回归质量的标准,在回归中,MSE越小越好,而接口score返回的是R2,R2定义是:
    R 2 = 1 − u v , u = ∑ ( f i − y i ) 2 , ( 残 差 平 方 和 ) v = ∑ ( y i − y h a t ) ( 总 平 方 和 ) R^2=1-\frac{u}{v},u=\sum(f_i-y_i)^2,(残差平方和)v=\sum(y_i-y_{hat})(总平方和) R2=1vu,u=(fiyi)2,()v=(yiyhat)(),其中y-hat是所有标签的平均值。
    虽然均方误差恒为非负,但考虑到作为损失,变成了负的。

交叉验证

交叉验证是用来观察模型的稳定性的一种方法,将数据划分为n份,依次使用其中的一份作为测试集,其他n-1份作为训练集,多次计算模型的准确性来评估模型的平均准确程度。(这吃瓜的时候学过,现在听到居然毫无印象。。。。)
相关操作:

from sklearn import tree
# 交叉验证的库
from sklearn.medel_selection import cross_val_score
# 随便搞一个数据集
from sklearn.datasets import load_boston

# 实例化一个回归模型
regressor = tree.DecesionTreeRegressor(random_state=0)
# 参数分别是实例化的模型,样本数据矩阵,样本标签,验证次数,衡量标准(这里是均方误差的相反数)
cross_val_score(regressor, boston.data, boston.target, cv=10,scoring='neg_mean_squared_error')

回归树的例子

用回归树拟合正弦函数曲线

import numpy as np
import matplotlib.pyplot as plt
from sklearn import tree
rng = np.random.RandomState(1) # 随机数种子
X = np.sort(5*rng.rand(80,1), axis=0)
# y数据必须是一维的,用ravel()展平
# numpy数组中一维数组不分行和列
y = np.sin(X).ravel()

plt.figure()
# plt.scatter专门画散点图
plt.scatter(X, y, s=20, edgecolor='black', c='darkorange', label='data')
plt.legend()

# np.random.rand(数组结构),生成随机数组的函数
# 加噪声
y[::5] += 3*(0.5-rng.rand(16))

plt.scatter(X, y, s=20, edgecolor='black', c='darkorange', label='data')
plt.legend()

regressor1 = tree.DecisionTreeRegressor(max_depth=3)
regressor2 = tree.DecisionTreeRegressor(max_depth=5)
regressor1.fit(X, y)
regressor2.fit(X, y)

X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_1 = regressor1.predict(X_test)
y_2 = regressor2.predict(X_test)

plt.figure()
plt.scatter(X, y, s=20, edgecolor='black', c='darkorange', label='data')
plt.plot(X_test, y_1, color='cornflowerblue', label='max_depth=3', linewidth=2)
plt.plot(X_test, y_2, color='yellowgreen', label='max_depth=5', linewidth=2)
plt.xlabel('data')
plt.ylabel('Decision Tree Regression')
plt.legend()
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网格搜索
from sklearn.model_selection import GridSearchCV
parameters = {"criterion": ("gini", "entropy"),
              "splitter": ("best", "random"),
              "max_depth": [*range(1, 10)],
              "min_samples_leaf": [*range(1, 50, 5)],
              "min_impurity_decrease": [*np.linspace(0, 0.5, 20)]
}
GS = GridSearchCV(clf, parameters, cv=10)
GS.fit(Xtrain, Ytrain)

bestParams = GS.best_params_
bestScore = GS.best_score_
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

up-to-star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值