决策树DTC数据分析和鸢尾数据集分析报告Word文档下载推荐.docx
《决策树DTC数据分析和鸢尾数据集分析报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《决策树DTC数据分析和鸢尾数据集分析报告Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
假设这个女孩对男人的要求是:
30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么这个可以用下图表示女孩的决策逻辑。
示例2:
另一个课堂上的例子,参考CSDN的大神lsldd的文章,推荐大家阅读学习信息熵。
用Python开始机器学习(2:
决策树分类算法)
假设要构建这么一个自动选好苹果的决策树,简单起见,我只让他学习下面这4个样本:
[python]
viewplain
copy
1.样本
红
大
好苹果
2.0
1
3.1
0
4.2
5.3
样本中有2个属性,A0表示是否红苹果。
A1表示是否大苹果。
本例仅2个属性。
那么很自然一共就只可能有2棵决策树,如下图所示:
示例3:
第三个例子,推荐这篇文章:
决策树学习笔记整理-bourneli
决策树构建的基本步骤如下:
1.开始,所有记录看作一个节点;
2.遍历每个变量的每一种分割方式,找到最好的分割点;
3.分割成两个节点N1和N2;
4.对N1和N2分别继续执行2-3步,直到每个节点足够“纯”为止。
二.鸢尾花卉Iris数据集
在Sklearn机器学习包中,集成了各种各样的数据集,上节课讲述Kmeans使用的是一个NBA篮球运动员数据集,需要定义X多维矩阵或读取文件导入,而这节课使用的是鸢尾花卉Iris数据集,它是很常用的一个数据集。
数据集来源:
Irisplantsdataset-KEELdataset
该数据集一共包含4个特征变量,1个类别变量。
共有150个样本,鸢尾有三个亚属,分别是山鸢尾(Iris-setosa),变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。
iris中文指鸢尾植物,这里存储了其萼片和花瓣的长宽,一共4个属性,鸢尾植物又分三类。
iris里有两个属性iris.data,iris.target。
data里是一个矩阵,每一列代表了萼片或花瓣的长宽,一共4列,每一列代表某个被测量的鸢尾植物,一共采样了150条记录。
代码如下:
1.#导入数据集iris
2.from
sklearn.datasets
import
load_iris
3.
4.#载入数据集
5.iris
=
load_iris()
6.#输出数据集
7.print
iris.data
输出如下所示:
1.[[
5.1
3.5
1.4
0.2]
2.
[
4.9
3.
4.7
3.2
1.3
4.
4.6
3.1
1.5
5.
5.
3.6
6.
5.4
3.9
1.7
0.4]
7.
3.4
0.3]
8.
9.
4.4
2.9
10.
....
11.
6.7
5.2
2.3]
12.
6.3
2.5
1.9]
13.
6.5
2.
]
14.
6.2
15.
5.9
1.8]]
target是一个数组,存储了data中每条记录属于哪一类鸢尾植物,所以数组的长度是150,数组元素的值因为共有3类鸢尾植物,所以不同值只有3个。
种类:
IrisSetosa(山鸢尾)
IrisVersicolour(杂色鸢尾)
IrisVirginica(维吉尼亚鸢尾)
1.#输出真实标签
2.print
iris.target
3.print
len(iris.target)
4.#150个样本
每个样本4个特征
5.print
iris.data.shape
输出结果如下:
1.[0
2
2]
6.150
7.(150L,
4L)
可以看到,类标共分为三类,前面50个类标位0,中间50个类标位1,后面为2。
下面给详细介绍使用决策树进行对这个数据集进行测试的代码。
三.决策树实现鸢尾数据集分析
1.
DecisionTreeClassifier
Sklearn机器学习包中,决策树实现类是DecisionTreeClassifier,能够执行数据集的多类分类。
输入参数为两个数组X[n_samples,n_features]和y[n_samples],X为训练数据,y为训练数据的标记数据。
DecisionTreeClassifier构造方法为:
1.sklearn.tree.DecisionTreeClassifier(criterion='
gini'
splitter='
best'
max_depth=None
min_samples_split=2
min_samples_leaf=1
max_features=None
random_state=None
min_density=None
compute_importances=None
max_leaf_nodes=None)
鸢尾花数据集使用决策树的代码如下:
1.#
-*-
coding:
utf-8
2."
"
3.Created
on
Fri
Oct
14
21:
44:
19
2016
5.@author:
杨秀璋
6."
8.#导入数据集iris
9.from
11.#载入数据集
12.iris
14.print
#输出数据集
15.print
#输出真实标签
16.print
17.print
#150个样本
18.
19.
20.#导入决策树DTC包
21.from
sklearn.tree
DecisionTreeClassifier
22.
23.#训练
24.clf
DecisionTreeClassifier()
25.clf.fit(iris.data,
iris.target)
26.print
clf
27.
28.#预测
29.predicted
clf.predict(iris.data)
30.
31.#获取花卉两列数据集
32.X
33.L1
[x[0]
for
x
in
X]
34.print
L1
35.L2
[x[1]
36.print
L2
37.
38.#绘图
39.import
numpy
as
np
40.import
matplotlib.pyplot
plt
41.plt.scatter(L1,
L2,
c=predicted,
marker='
x'
)
#cmap=plt.cm.Paired
42.plt.title("
DTC"
43.plt.show()
输出结果如下所示,可以看到分位三类,分别代表数据集三种鸢尾植物。
2.代码优化
在课堂上我讲过,这里存在两个问题:
1.前面鸢尾Iris数据集包括四个特征(萼片长度、萼片宽度、花瓣长度、花瓣宽度),上面代码中"
L1=[x[0]forxinX]"
我获取了第一列和第二列数据集进行的绘图,而真是数据集中可能存在多维特征,那怎么实现呢?
这里涉及到一个降维操作,后面会详细介绍。
2.第二个问题是,分类学习模型如下所示,它的预测是通过一组新的数据集。
而上面的代码"
predicted=clf.predict(iris.data)"
是对整个的数据集进行决策树分析,而真是的分类分析,需要把一部分数据集作为训练,一部分作为预测,这里使用70%的训练,30%的进行预测。
1.#训练集
2.train_data
np.concatenate((iris.data[0:
40,
:
],
iris.data[50:
90,
iris.data[100:
140,
]),
axis
0)
3.#训练集样本类别
4.train_target
np.concatenate((iris.target[0:
40],
iris.target[50:
90],
iris.target[100:
140]),
5.#测试集
6.test_data
np.concatenate((iris.data[40:
50,
iris.data[90:
100,
iris.data[140:
150,
7.#测试集样本类别
8.test_target
np.concatenate((iris.target[40:
50],
iris.target[90:
100],
iris.target[140:
150]),
优化后的完整代码如下所示,同时输出准确率、召回率等。
14.'
'
18.print
19.'
20.
21.'
22.重点:
分割数据集
构造训练集/测试集,120/30
23.
70%训练
0-40
50-90
100-140
24.
30%预测
40-50
90-100
140-150
25.'
26.#训练集
27.train_data
28.#训练集样本类别
29.train_target
30.#测试集
31.test_data
32.#测试集样本类别
33.test_target
34.
35.
36.#导入决策树DTC包
37.from
38.
39.#训练
40.clf
41.#注意均使用训练数据集和样本类标
42.clf.fit(train_data,
train_target)
43.print
44.
45.#预测结果
46.predict_target
clf.predict(test_data)
47.print
predict_target
48.
49.#预测结果与真实结果比对
50.print
sum(predict_target
==
test_target)
51.
52.#输出准确率
召回率
F值
53.from
sklearn
metrics
54.print(metrics.classification_report(test_target,
predict_target))
55.print(metrics.confusion_matrix(test_target,
56.
57.
58.#获取花卉测试数据集两列数据集
59.X
test_data
60.L1
[n[0]
n
61.print
62.L2
[n[1]
63.print
64.
65.#绘图
66.import
67.import
68.plt.scatter(L1,
c=predict_target,
69.plt.title("
DecisionTreeClassifier"
70.plt.show()
1.DecisionTreeClassifier(class_weight=None,
criterion='
max_depth=None,
max_features=None,
max_leaf_nodes=None,
min_samples_leaf=1,
min_samples_split=2,
min_weight_fraction_leaf=0.0,
presort=False,
random_state=None,
5.[0
6.30
precision
recall
f1-score
support
1.00
10
13.avg
/
total
30
15.[[10
0]
16.
17.
10]]
绘制图形如下所示:
3.补充知识
最后补充Skleaern官网上的一个决策树的例子,推荐大家学习。
推荐地址:
Plotthedecisionsurfaceofadecisiontreeontheirisdataset
代码如下:
cop