ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

机器学习之决策树的原理及sklearn实现

2021-09-04 19:30:20  阅读:165  来源: 互联网

标签:机器 0.0 clf train test sklearn 决策树


1.概述

1.1 决策树是如何工作的?

决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。
决策树算法的本质是一种图结构,我们只需要问一系列问题就可以对数据进行分类了。比如说,来看看下面这组数据集,这是一系列已知物种以及所属类别的数据:
在这里插入图片描述
目标是,将动物们分为哺乳类和非哺乳类。那根据已经收集到的数据,决策树算法为我们算出了下面的这棵决策树:
在这里插入图片描述
假如我们现在发现了一种新物种Python,它是冷血动物,体表带鳞片,并且不是胎生,我们就可以通过这棵决策树来判断它的所属类别。

决策树算法的核心是要解决两个问题:
1)如何从数据表中找出最佳节点和最佳分枝?
2)如何让决策树停止生长,防止过拟合?

1.2 sklearn中的决策树

sklearn中决策树的类都包含在tree这个模块下,这个模块一共包括五个类:
在这里插入图片描述
主要讲解:DecisionTreeClassifier

sklearn的建模过程:
在这里插入图片描述
对应的代码如下所示:

from sklearn import tree #导入需要的模块
clf = tree.DecisionTreeClassifier()     #实例化
clf = clf.fit(X_train,y_train) #用训练集数据训练模型
result = clf.score(X_test,y_test)

2.DecisionTreeClassifier

class sklearn.tree.DecisionTreeClassifier (
										criterion=’gini’, 
										splitter=’best’, 
										max_depth=None,
										min_samples_split=2, 
										min_samples_leaf=1, 
										min_weight_fraction_leaf=0.0, 
										max_features=None,
										random_state=None, 
										max_leaf_nodes=None,
										min_impurity_decrease=0.0, 
										min_impurity_split=None,
										class_weight=None, 
										presort=False
)

重要参数:criterion

为了要将表格转化为一棵树,决策树需要找出最佳节点和最佳的分枝方法,对分类树来说,衡量这个“最佳”的指标叫做“不纯度”。通常来说,不纯度越低,决策树对训练集的拟合越好。现在使用的决策树算法在分枝方法上的核心大多是围绕在对某个不纯度相关指标的最优化上。
不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定是低于父节点的,也就是说,在同一棵决策树上,叶子节点的不纯度一定是最低的。
Criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:

  1. 输入“entropy”,使用信息熵(Entropy)
  2. 输入”gini“,使用基尼系数(Gini Impurity)
    在这里插入图片描述
    利用sklearn实现决策树:
    1.导入所需要的算法库和模块
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split

2.探索数据

#载入数据
wine = load_wine()
x = pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
wine.feature_names
['alcohol',
 'malic_acid',
 'ash',
 'alcalinity_of_ash',
 'magnesium',
 'total_phenols',
 'flavanoids',
 'nonflavanoid_phenols',
 'proanthocyanins',
 'color_intensity',
 'hue',
 'od280/od315_of_diluted_wines',
 'proline']

3.划分训练集和测试集

#. 分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(wine.data,wine.target,test_size=0.3)
#建立模型
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(x_train,y_train)
score = clf.score(x_test,y_test)

经过测试,模型的准确率如下所示:

0.9629629629629629

4.查看重要的特征以及对应的权重

clf.feature_importances_
[*zip(wine.feature_names,clf.feature_importances_)]
[('alcohol', 0.018448661796409117),
 ('malic_acid', 0.0),
 ('ash', 0.0),
 ('alcalinity_of_ash', 0.0),
 ('magnesium', 0.0),
 ('total_phenols', 0.0),
 ('flavanoids', 0.43259590886482413),
 ('nonflavanoid_phenols', 0.0),
 ('proanthocyanins', 0.0),
 ('color_intensity', 0.20507049195022564),
 ('hue', 0.016757599408700523),
 ('od280/od315_of_diluted_wines', 0.0),
 ('proline', 0.32712733797984056)]

5.设置好criterion=“entropy”random_state=30splitter=“random”,改变max_depth,观察准确率的变化

import matplotlib.pyplot as plt
test = []
for i in range(10):
    clf = tree.DecisionTreeClassifier(max_depth=i+1
                                     ,criterion="entropy"
                                     ,random_state=30
                                     ,splitter="random"
                                     )
    clf = clf.fit(x_train, y_train)
    score = clf.score(x_test, y_test)
    test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()

在这里插入图片描述
关于决策树剪枝的相关知识,参考如下文档:
链接:https://pan.baidu.com/s/1kL8S5r55ozqyZgdV6U6fKg
提取码:1b3r

努力加油a啊

标签:机器,0.0,clf,train,test,sklearn,决策树
来源: https://blog.csdn.net/starlet_kiss/article/details/120104073

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有