尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

决策树(五):决策树回归

决策树(五):决策树回归 决策树算法是一种既可以用于分类也可以用于回归的算法。在之前的文章中我们介绍了决策树分类的原理用决策树解决回归问题就是决策树回归算法也叫作回归树。要讲回归树我们一定会提到CART树CART树全称Classification And Regression Trees包括分类树与回归树。CART的特点是决策树是二叉树 只有是和否两个分支。这样的决策树等价于「递归地二分每个特征」将输入空间特征空间划分为有限个单元并在这些单元上确定预测的概率分布也就是在输入给定的条件下输出的条件概率分布。回归树原理接下来用一个例子来介绍回归树的原理如下关于睡眠时长和次日效率的分布中出现了明显的四个集群如果使用线性回归是无法通过一条直线对数据进行效果很好的划分现在想通过决策树回归当知道睡眠时长时可以预测次日效率。像之前讲到的分类决策树一样我们首先进行一次划分判断睡眠时间是否小于5.8小时将整个区域划分为两个不同的区域。接着用不同睡眠时间的条件对区域划分对应的效率也就是最终的叶子节点是取当前区域内所有数据的均值这样就可以得到一个输出连续的结果的回归树。那么如何确定最优的划分条件呢分类树用基尼系数、信息熵回归树常用两种损失函数1.均方误差 MSEScikit-learn 默认M S E 1 n ∑ i 1 n ( y i − y ˉ ) 2 MSE \frac{1}{n}\sum_{i1}^n (y_i - \bar{y})^2MSEn1​i1∑n​(yi​−yˉ​)2其中y ˉ \bar{y}yˉ​当前节点样本标签均值2.平均绝对误差 MAEM A E 1 n ∑ i 1 n ∣ y i − y ˉ ∣ MAE \frac{1}{n}\sum_{i1}^n |y_i - \bar{y}|MAEn1​i1∑n​∣yi​−yˉ​∣对异常值更鲁棒计算略慢。如下图所示如果第一次划分时将划分条件定为睡眠时间是否小于3小时则左右两个区域里的样本可以求出一个均值对应的两条绿线接着求两个区域绿线与节点之间的均方误差 MSE最小的均方误差 MSE即是最优的划分。上述例子是一个特征回归预测的情况多元情况下原理类似。例如两个特征可用下图表示划分结果sklearn中的回归树DecisionTreeRegressor 是 sklearn.tree 提供的 回归任务决策树模型用于 预测连续数值适用于 非线性关系的回归问题。官方文档链接为https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.htmlDecisionTreeRegressor 的语法为sklearn.tree.DecisionTreeRegressor(*,criterionsquared_error,splitterbest,max_depthNone,min_samples_split2,min_samples_leaf1,min_weight_fraction_leaf0.0,max_featuresNone,random_stateNone,max_leaf_nodesNone,min_impurity_decrease0.0,ccp_alpha0.0,monotonic_cstNone)其中大部分参数与分类的决策树相同少量参数与分类树有区别可以对照学习使用。criterion衡量分割质量的标准。可选{“squared_error”, “absolute_error”, “poisson”}, 默认为”squared_error”均方误差splitter用于在每个节点处选择分割点的策略。支持的策略有“best”选择最佳分割点和“random”选择最佳随机分割点默认为“best”max_depth树的最大深度min_samples_split分割内部节点的最小样本数min_samples_leaf叶节点所需的最小样本数。只有当分割点在左右分支中都留下至少所设参数个训练样本时才会考虑该分割点。min_weight_fraction_leaf叶节点所需的总权重所有输入样本的权重总和的最小加权分数。如果未提供 sample_weight则样本具有相等的权重max_features寻找最佳分割时要考虑的特征数量random_state控制估计器的随机性max_leaf_nodes决策树的最大叶子节点数量min_impurity_decrease如果此分割导致的不纯度降低大于或等于此值则该节点将被分割。ccp_alpha用于最小成本复杂性剪枝的复杂性参数。monotonic_cst要对每个特征施加的单调性约束。1单调增加0无约束-1单调减少回归树案例我们用 scikit-learn 自带糖尿病数据集来进行回归建模fromsklearn.datasetsimportload_diabetesfromsklearn.treeimportDecisionTreeRegressorfromsklearn.model_selectionimporttrain_test_splitfromsklearnimportmetrics# 糖尿病数据集diabetesload_diabetes()Xdiabetes.data ydiabetes.targetfromsklearnimportpreprocessingaspp# 数据标准化Xpp.scale(X)ypp.scale(y)# 分割训练集和测试集X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.1)# 定义决策树回归模型regDecisionTreeRegressor(max_depth2)# 训练模型reg.fit(X_train,y_train)# 在测试集上进行预测y_predreg.predict(X_test)# 在测试集上进行预测y_predreg.predict(X_test)y_predreg.predict(X_test)msemetrics.mean_squared_error(y_test,y_pred)r2metrics.r2_score(y_test,y_pred)m_errormetrics.median_absolute_error(y_test,y_pred)print(均方误差{}.format(mse))print(R方{}.format(r2))print(中位数绝对误差{}.format(m_error))最终建模的结果为均方误差0.49592641133141596R方0.4219065993765826中位数绝对误差0.4248167843058491更多相关内容Smilecoc的杂货铺
返回列表