ccc-sklearn-1-决策树( 二 )


剪枝参数
参数名意义
限制树的最大深度,超过设定深度的树枝全部剪掉
一个节点在分枝后的每个子节点都必须包含至少个训练样本,否则分枝就不会发生
一个节点必须要包含至少个训练样本,这个节点才允许被分枝,否则分枝就不会发生
限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃
e
限制信息增益的大小,信息增益小于设定数值的分枝不会发生
说明:
目标权重参数
& leaf
样本不平衡:在一组数据集中,标签的一类天生占有很大的比例 。比如,在银行要判断“一个办了信用卡的人是否会违约”,就是是vs否(1%:99%)的比例 。这种分类状况下,即便模型什么也不做,全把结果预测成“否”,正确率也能有99% 。因此我们要使用参数对样本标签进行一定的均衡,给少量的标签更多的权重,让模型更偏向少数类,向捕获少数类的方向建模 。
默认None,表示自动给与数据集中的所有标签相同的权重 。有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配leaf这个基于权重的剪枝参数来使用 。另请注意,基于权重的剪枝参数(例如leaf)将比不知道样本权重的标准(比如)更少偏向主导类 。如果样本是加权的,则使用基于权重的预修剪标准来更容易优化树结构,这确保叶节点至少包含样本权重的总和的一小部分
6.其他重要的属性和接口 名称作用
(接口)
查看各个特征对模型的重要性
apply
输入测试集返回每个测试样本所在的叶子结点的索引
输入测试集返回每个测试样本的标签
说明:7.回归树的参数
回归树中,没有标签分布是否均衡的问题,因此没有这样的参数 。其它与分类数一模一样!
参数
支持三种标准:
MSE:输入mse使用均方误差,父节点与叶子结点之间均方误差的差值被用来当作特征选择的标准,通过使用叶子结点的均值来最小化L2损失:费尔德曼均方误差,对潜在分支中问题改进后的方法MAE:输入mae使用绝对平均误差,使用叶子结点的中值来最小化L1损失
MSE表达式:本质是样本真实数据与回归结果的差异
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=n1?i=1∑N?(fi??yi?)2
8.交叉验证
交叉验证是用来观察模型的稳定性的一种方法,将数据划分为n份,依次使用其中一份作为测试集,其他n-1份作为训练集,多次计算模型的精确性来评估模型的平均准确程度 。训练集和测试集的划分会干扰模型的结果,因此用交叉验证n次的结果求出的平均值是对模型效果的一个更好的度量 。
简单代码举例:
from sklearn.datasets import load_bostonfrom sklearn.model_selection import cross_val_scorefrom sklearn.tree import DecisionTreeRegressorboston = load_boston()regressor = DecisionTreeRegressor(random_state=0)cross_val_score(regressor, boston.data, boston.target, cv=10)
9.一维回归图像的绘制
步骤一:所需库的导入,以及numpy创建训练集
import numpy as npfrom sklearn.tree import DecisionTreeRegressorimport matplotlib.pyplot as pltrng = np.random.RandomState(1)X = np.sort(5 * rng.rand(80,1),axis=0)y = np.sin(X).ravel()plt.figure()plt.scatter(X, y, s=20, edgecolor="black",c="darkorange", label="data")
步骤二:制造噪音
y[::5] += 3*(0.5 - rng.rand(16))plt.figure()plt.scatter(X, y, s=20, edgecolor="black",c="darkorange", label="data")