
机器学习--sklearn之决策树(分类+回归)
选择根节点:计算每个特征的信息增益率,选择增益率最高的特征作为根节点。 递归分割:从根节点开始,递归地选择下一个最优特征进行分割,直到无法再分割为止。 叶子节点的分类:叶子节点直接给出最终的分类结果。
发布日期:2021-05-06 23:42:46
浏览次数:26
分类:精选文章
本文共 2935 字,大约阅读时间需要 9 分钟。
决策树的详细解释
1. 什么是决策树?
决策树是一种机器学习算法,用于对分类和回归问题进行预测。它通过层次化的分割,将数据划分为不同的子集,最终形成树状结构。每个节点代表一个特征或属性,分支则代表特征的取值,叶子节点则是最终的分类结果或预测值。
2. 决策树的基本结构
决策树可以看作一个不断分叉的树,其中:
- 根节点:起始节点,没有任何条件判断。
- 内部节点:代表一个特征或属性,具有若干分支。
- 叶子节点:没有进一步的分割,直接给出分类结果。
3. 确定节点的标准
选择根节点和后续节点的关键在于信息增益和信息增益率。
- 熵(Entropy):衡量数据的混乱度,用于计算信息增益。熵越高,数据越不纯。
- 信息增益率(Gain):综合考虑熵和当前节点的纯度,衡量分裂特征带来的信息增益。
- Gini系数:衡量特征的分裂效果,用于CART算法,既用于分类也用于回归。
4. 构建决策树的步骤
5. 决策树的优化方法
- 预剪枝:限制树的深度或节点的样本数量,防止过拟合。
- 后剪枝:通过调整评价函数,控制叶子节点的数量,防止过拟合。
6. Python实现决策树
在Python中,可以使用scikit-learn
中的DecisionTreeClassifier
和DecisionTreeRegressor
来实现决策树模型。
- 导入库:
from sklearn import treefrom sklearn.datasets import load_winefrom sklearn.model_selection import train_test_splitimport pandas as pdimport graphviz
- 读取数据:
wine = load_wine()print(wine.data.shape)print(wine.target)pd.concat([pd.DataFrame(wine.data), pd.DataFrame(wine.target)], axis=1)
- 划分训练集和测试集:
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target, test_size=0.3)print(Xtrain.shape)print(Xtest.shape)print(Ytrain.shape)print(Ytest.shape)
- 建立模型:
clf = tree.DecisionTreeClassifier(criterion="entropy", random_state=30, splitter="random", max_depth=3, min_samples_leaf=10, min_samples_split=10)clf.fit(Xtrain, Ytrain)score = clf.score(Xtest, Ytest)print(score)
- 可视化决策树:
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']dot_data = tree.export_graphviz(clf, feature_names=feature_name, class_names=["琴酒","雪莉","贝尔摩德"], filled=True, rounded=True)graph = graphviz.Source(dot_data)
- 特征重要性:
[*zip(feature_name, clf.feature_importances_)]
- 剪枝验证:
test = []for i in range(10): clf = tree.DecisionTreeClassifier(max_depth=i+1, criterion="entropy", random_state=30, splitter="random") clf.fit(Xtrain, Ytrain) score = clf.score(Xtest, Ytest) test.append(score)plt.plot(range(1,11),test,color="red",label="max_depth")plt.legend()plt.show()
7. CART回归树实现
对于回归问题,可以使用DecisionTreeRegressor
。
- 导入库:
from sklearn.tree import DecisionTreeRegressorfrom sklearn import linear_model
- 读取数据和可视化结果:
ex0 = pd.read_table('ex0.txt',header=None)ex0.describe()plt.scatter(ex0.iloc[:,1].values, ex0.iloc[:,-1].values)x = (ex0.iloc[:, 1].values).reshape(-1,1)y = (ex0.iloc[:,-1].values).reshape(-1,1)X_test = np.arange(0, 1, 0.01)[:1000, np.newaxis]print(X_test.shape)y_1 = model1.predict(X_test)y_2 = model2.predict(X_test)y_3 = model3.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=1", linewidth=2)plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=3", linewidth=2)plt.plot(X_test, y_3, color='red', label='liner regression', linewidth=2)plt.xlabel("data")plt.ylabel("target")plt.title("Decision Tree Regression")plt.legend()plt.show()
通过以上步骤,可以实现决策树的训练、可视化和优化,适用于分类和回归任务。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月11日 21时57分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
const与常量,傻傻分不清楚~
2019-03-06
Head First设计模式——迭代器模式
2019-03-06
MongoDB版本及存储引擎区别
2019-03-06
shell echo单行和多行文字定向写入到文件中
2019-03-06
AtCoder Beginner Contest 100 题解
2019-03-06
【数据结构】可持久化线段树初步
2019-03-06
后缀树
2019-03-06
Java高性能编程之CAS与ABA及解决方法
2019-03-06
从BIO到Netty的演变
2019-03-06
《算法导论》第二章笔记
2019-03-06
HTML节点操作
2019-03-06
HTML5新特性
2019-03-06
async/await剖析
2019-03-06
cmp命令
2019-03-06
一次编辑
2019-03-06
长按键入
2019-03-06
JavaScript中的链式调用
2019-03-06
day-04-列表
2019-03-06
Linux 磁盘管理(df fu fdisk mkfs mount)
2019-03-06
空间向量
2019-03-06