sklearn 库中的决策分类树只实现了ID3 算法和CART 算法。
DecisionTreeRegressor
类的构造函数
def init(self, *,
criterion=“mse”,
splitter=“best”,
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.,
min_impurity_split=None,
ccp_alpha=0.0):
DecisionTreeRegressor
类的构造函数中的criterion
参数有4 个取值:
-
mse
:表示均方误差算法,为默认值。 -
friedman_mse
:表示费尔德曼均方误差算法。 -
mae
:表示平均误差算法。 -
poisson
:表示泊松偏差算法。
其它参数可使用默认值。
3,构造分类树
我们使用 sklearn.datasets
模块中自带的鸢尾花数据集 构造一颗决策树。
3.1,鸢尾花数据集
鸢尾花数据集目的是通过花瓣的长度和宽度,及花萼的长度和宽度,预测出花的品种。
这个数据集包含150条数据,将鸢尾花分成了三类(每类是50条数据),分别是:
-
setosa
,用数字0
表示。 -
versicolor
,用数字1
表示。 -
virginica
,用数字2
表示。
我们抽出3 条数据如下:
5.1,3.5,1.4,0.2,0
6.9,3.1,4.9,1.5,1
5.9,3.0,5.1,1.8,2
数据的含义:
-
每条数据包含5 列,列与列之间用逗号隔开。
-
从第1 列到第5 列,每列代表的含义是:花萼长度,花萼宽度,花瓣长度,花瓣宽度,花的品种。
-
在机器学习中,前4列称为
特征值
,最后1列称为目标值
。我们的目的就是用特征值预测出目标值。
将上面3 条数据,用表格表示就是:
| 花萼长度 | 花萼宽度 | 花瓣长度 | 花瓣宽度 | 花的品种 |
| — | — | — | — | — |
| 5.1 | 3.5 | 1.4 | 0.2 | 0 |
| 6.9 | 3.1 | 4.9 | 1.5 | 1 |
| 5.9 | 3.0 | 5.1 | 1.8 | 2 |
3.2,构造分类树
首先导入必要的类和函数:
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
其中:
-
DecisionTreeClassifier
类用于构造决策树。 -
load_iris()
函数用于导入数据。 -
train_test_split()
函数用于将数据集拆分成训练集与测试集。 -
accuracy_score()
函数用于为模型的准确度进行评分。
导入数据集:
iris = load_iris() # 准备数据集
features = iris.data # 获取特征集
labels = iris.target # 获取目标集
将数据分成训练集和测试集,训练集用于训练模型,测试集用于测试模型的准确度。
train_features, test_features, train_labels, test_labels =
train_test_split(features, labels, test_size=0.33, random_state=0)
我们向train_test_split()
函数中传递了4 个参数,分别是:
-
features:特征集。
-
labels:目标集。
-
test_size=0.33:测试集数据所占百分比,剩下的数据分给训练集。
-
random_state=0:随机数种子。
该函数返回4 个值,分别是:
-
train_features:训练特征集。
-
test_features:测试特征集。
-
train_labels:训练目标集。
-
test_labels:测试目标集。
接下来构造决策树:
用CART 算法构建分类树(你也可以使用ID3 算法构建)
clf = DecisionTreeClassifier(criterion=‘gini’)
用训练集拟合构造CART分类树
clf = clf.fit(train_features, train_labels)
上面两句代码已经在注释中说明,最终我们得到了决策树clf
(classifier
的缩写)。
用clf
预测测试集数据,test_predict
为预测结果:
test_predict = clf.predict(test_features)
计算预测结果的准确率:
score = accuracy_score(test_labels, test_predict)
score2 = clf.score(test_features, test_labels)
print(score, score2)
最终得出,sorce
和 score2
都为 0.96,意思就是我们训练出的模型的准确率为96%。
函数accuracy_score()
和 clf.score()
都可以计算模型的准确率,但注意这两个函数的参数不同。
4,打印决策树
为了清楚的知道,我们构造出的这个决策树cfl
到底是什么样子,可使用 graphviz
模块将决策树画出来。
代码如下:
from sklearn.tree import export_graphviz
import graphviz
clf 为决策树对象
dot_data = export_graphviz(clf)
graph = graphviz.Source(dot_data)
生成 Source.gv.pdf 文件,并打开
graph.view()
为了画出决策树,除了需要安装相应的 Python 模块外,还需要安装Graphviz 软件。
由上面的代码,我们得到的决策树图如下:
我们以根节点为例,来解释一下每个方框里的四行数据(叶子节点是三行数据)都是什么意思。
四行数据所代表的含义:
-
第一行
X[3]<=0.75
:鸢尾花数据集的特征集有4 个属性,所以对于X[n]
中的n
的取值范围为0<=n<=3
,X[0]
表示第1个属性,X[3]
表示第4 个属性。X[3]<=0.75
的意思就是当X[3]
属性的值小于等于0.75 的时候,走左子树,否则走右子树。 -
X[0] 表示花萼长度。
-
X[1] 表示花萼宽度。
-
X[2] 表示花瓣长度。
-
X[3] 表示花瓣宽度。
-
第二行
gini=0.666
,表示当前的gini
系数值。 -
第三行
samples=100
,samples
表示当前的样本数。我们知道整个数据集有150 条数据,我们选择了0.33 百分比作为测试集,那么训练集的数据就占0.67,也就是100 条数据。根节点包含所有样本集,所以根节点的samples
值为100。 -
第四行
value
:value
表示属于该节点的每个类别的样本个数,value
是一个数组,数组中的元素之和为samples
值。我们知道该数据集的目标集中共有3 个类别,分别为:setosa
,versicolor
和virginica
。所以: -
value[0]
表示该节点中setosa
种类的数据量,即34。 -
value[1]
表示该节点中versicolor
种类的数据量,即31。 -
value[2]
表示该节点中virginica
种类的数据量,即35。
4.1,打印特征重要性
我们构造出来的决策树对象clf
中,有一个feature_importances_
属性,如下:
clf.feature_importances_
array([0, 0.02252929, 0.88894654, 0.08852417])
clf.feature_importances_
是一个数组类型,里边的元素分别代表对应特征的重要性,所有元素之和为1
。元素的值越大,则对应的特征越重要。
所以,从这个数组,我们可以知道,四个特征的重要性排序为:
- 花瓣长度 > 花瓣宽度 > 花萼宽度 > 花萼长度
我们可以使用下面这个函数,将该数组画成柱状图:
import matplotlib.pyplot as plt
import numpy as np
mode 是我们训练出的模型,即决策树对象
data 是原始数据集
def plot_feature_importances(model, data):
n_features = data.data.shape[1]
plt.barh(range(n_features), model.feature_importances_, align=‘center’)
plt.yticks(np.arange(n_features), data.feature_names)
plt.xlabel(“Feature importance”)
plt.ylabel(“Feature”)
plt.show()
plot_feature_importances(clf, iris)
下图是用plot_feature_importances()
函数生成的柱状图(红字是我添加的
),从图中可以清楚的看出每个特种的重要性。
从该图中也可以看出,为什么决策树的根节点的特征是X[3]
。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/7a64af9db8e48df8ee575041e92d44d1.jpeg)
Kafka实战笔记
关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图
- Kafka入门
- 为什么选择Kafka
- Karka的安装、管理和配置
- Kafka的集群
- 第一个Kafka程序
afka的生产者
- Kafka的消费者
- 深入理解Kafka
- 可靠的数据传递
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka实战之削峰填谷
- 数据管道和流式处理(了解即可)
- Kafka实战之削峰填谷
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
片转存中…(img-VKmIitYb-1712326979948)]
afka的生产者
[外链图片转存中…(img-u4HkErAc-1712326979948)]
- Kafka的消费者
- 深入理解Kafka
- 可靠的数据传递
[外链图片转存中…(img-SUlrIz3K-1712326979949)]
[外链图片转存中…(img-16d2VhmS-1712326979949)]
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka实战之削峰填谷
- 数据管道和流式处理(了解即可)
[外链图片转存中…(img-5cK5qYuC-1712326979949)]
- Kafka实战之削峰填谷
[外链图片转存中…(img-fuQdKDbX-1712326979949)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!