机器学习算法笔记(三十一):使用决策树解决回归问题、决策树的局限性

前面的文章讨论的都是用决策树解决分类问题:模型参数训练结束后,对每个“叶子”节点的样本数据进行投票,规定数量最多的样本的类型为该“叶子”的预测类型。其实用决策树解决回归问题的思路也很类似,本文就简单探讨一下,并总结决策树的局限性。

一、决策树解决回归问题的基本思路

决策树解决回归问题的思路与解决分类问题非常接近:当模型参数划分结束后,把每个“叶子”节点处的相应的数据输出值的平均值,作为该“叶子”的预测值(也就是训练结束后,每个“叶子”处可能有多个数值,取多个数值的平均值作为该“叶子”的预测值。根据特征值预测未知的样本数据时,如果最终计算结果在该“叶子”上,认为该“叶子”的预测值为该特征值对应的样本的数据)。

二、使用sklearn封装的决策树回归算法解决回归问题

新建一个工程,创建一个main.py文件,实现如下代码:

from sklearn import datasets

boston = datasets.load_boston()
X = boston.data
y = boston.target

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)

from sklearn.tree import DecisionTreeRegressor
#创建决策树回归器
dt_reg = DecisionTreeRegressor()

from sklearn.model_selection import GridSearchCV

param_grid = [
    {
        'max_depth': [i for i in range(2, 20)],
        'min_samples_split': [i for i in range(2, 20)],
        'max_leaf_nodes': [i for i in range(2, 20)],
        'min_samples_leaf': [i for i in range(2, 20)],
        'max_features': [i for i in range(2, 14)]
    }
]
 
grid_search = GridSearchCV(dt_reg, param_grid, n_jobs=-1, verbose=1) #进行对超参数的网格搜索
grid_search.fit(X_train, y_train)

print(grid_search.best_params_) #打印最佳超参数
best_dt_reg = grid_search.best_estimator_
print(best_dt_reg.score(X_test, y_test))

在我的计算机上经过近20分钟的搜索后,打印结果如下:

三、决策树的局限性

● 决策树模型的决策边界都是与坐标轴平行的,永远不会产生斜线,决策边界可能不准确。
● 对个别数据比较敏感:对某一个样本的增减,对模型的训练影响较大(是非参数学习的共同缺陷)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注