回归树:交叉验证
本文仅用作学习记录 及分享,有不对的地方还请指正,谢谢!
交叉验证是用来观察模型的稳定性的一种方法,我们将数据划分为n份,依次使用其中一份作为测试集,其他n-1份作为训练集,多次计算模型的精确性来评估模型的平均准确程度。训练集和测试集的划分会干扰模型的结果,因此用交叉验证n次的结果求出的平均值,是对模型效果的一个更好的度量。
简单来看看回归树是怎么样工作的
from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
from sklearn.tree import DscisionTreeRegressor
boston = load_boston()
reg = DecisionTreeRegressor(random_state=0)
cross_val_score(regressor,boston.data,boston.target,cv=10,scoring = 'neg_mean_squared_error')
DecisionTreeRegressor
class sklearn.tree.DecisionTreeRegressor(criterion='mse', splitter='best', max_depth=None, min_samples_split=2, min_samples_split=2,min_samples_leaf=1, min_weight_fracton_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=False)
几乎所有参数,属性及接口都和分类树一摸一样。需要注意的是,在回归树中,没有标签分布是否均衡的问题,因此没有class_weight这样的参数
criterion
(1)输入“mse”使用均方误差mean square error(MSE),MSE =
1
N
∑
i
=
1
n
(
f
i
−
y
i
)
2
\frac 1N\sum_{i=1}^n (fi-yi)^2
N1∑i=1n(fi−yi)2,其中fi为模型回归出的数值,yi为样本真实,所以MSE的本质是样本真实数据与回归结果的差异。
(2)输入“friedman_mse”使用费尔德曼均方误差,是一种改进后的均方误差。
(3)输入“mae”使用绝对平均误差mean absolute error(MAE)。
属性依旧有feature_importances_,接口依然是apply,fit,predict,score
介绍交叉验证函数
cross_val_score()
第一个位置可以是任何模型,包括分类树,回归树,随机森林等。
第二个是所有特征数据,这里不用分训练集和测试集
第三个是所有标签数据。
第四个是划分份数n,这里cv=10是将数据集分了10份。
第五个是返回的衡量指标,默认是R平方,这里的是neg_mean_squared_error是负均方误差
注意,R平方越接近1说明效果越好,很有意思的是R平方也可以为负数,但是一旦为负数时,说明曲线拟合效果不是很好,最好更换估计量。
负均方误差我们一般将其乘以负一得到均方误差(MSE)再来评估,当MSE越小,则说明拟合越好。
实例在泰坦尼克号幸存者的预测和用随机森林填充缺失值中有涉及