机器学习决策树模型实现-------鸢尾花的分类问题

机器学习决策树模型实现-------鸢尾花的分类问题

1)鸢尾花问题的数据通过如下方式生成
from sklearn.datasets import load_iris
iris=load_iris()
X=iris.data
Y=iris.target

2)通过如下方式引入决策树模块
from sklearn.tree import DecisionTreeClassifier
model=DecisionTreeClassifier(criterion=‘entropy’)

3)将数据集分为分成训练集和测试集
( Iris也称鸢尾花卉数据集,由R.A.Fisher于1936年收集整理的。其中包含3种植物种类,分别是山鸢尾、变色鸢尾和维吉尼亚鸢尾,每类50个样本,共150个样本。
Iris数据集每个样本包含了4个特征或属性:花萼长度、花萼宽度、花瓣长度和花瓣宽度。
鸢尾花的分类问题:给定某个鸢尾花的花萼长度、花萼宽度、花瓣长度和花瓣宽度,预测鸢尾花石山鸢尾、变色鸢尾和维吉尼亚鸢尾中的哪一种。)
讲每类鸢尾花50个样本采用train_test_split模块进行随机划分,再讲随机划分后的3个训练集(测试集)合并成总的训练集(测试集)
x=X.tolist()
y=Y.tolist() #讲数据集转化为列表形式
x1=x[0:50]
y1=y[0:50]
x2=x[50:100]
y2=y[50:100]
x3=x[100:150]
y3=y[100:150] #将数据集分类,即分成山鸢尾、变色鸢尾和维吉尼亚鸢尾三类数据集
X1_train,X1_test,Y1_train,Y1_test=train_test_split(x1,y1,test_size=0.3,random_state=32)
X2_train,X2_test,Y2_train,Y2_test=train_test_split(x2,y2,test_size=0.3,random_state=32)
X3_train,X3_test,Y3_train,Y3_test=train_test_split(x3,y3,test_size=0.3,random_state=32) #将分类后的数据集分片,分成训练集和测试集

  X_train=X1_train+X2_train+X3_train
  Y_train=Y1_train+Y2_train+Y3_train
  X_text=X1_test+X2_test+X3_test
  Y_text=Y1_test+Y2_test+Y3_test        #将分片后的训练集测试集合并成总的训练集测试集

model.fit(X_train,Y_train) #训练模型
model.predict(X_test) #预测模型
结果:array([1, 0, 0, 1, 2, 2, 0, 0, 1, 0, 1, 2, 1, 1, 2, 2, 1, 2, 1, 0, 0, 2,
2, 0, 0, 1, 0, 2, 0, 0, 1, 0, 0, 2, 1, 0, 0, 2, 2, 1, 0, 2, 0, 2,
0, 2, 1, 1, 1, 0])
model.predict_proba(X_test)
结果:
array([[0., 1., 0.],
[1., 0., 0.],
[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.],
[0., 0., 1.],
[1., 0., 0.],
[1., 0., 0.],
[0., 1., 0.],
[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.],
[0., 1., 0.],
[0., 1., 0.],
[0., 0., 1.],
[0., 0., 1.],
[0., 1., 0.],
[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.],
[1., 0., 0.],
[0., 0., 1.],
[0., 0., 1.],
[1., 0., 0.],
[1., 0., 0.],
[0., 1., 0.],
[1., 0., 0.],
[0., 0., 1.],
[1., 0., 0.],
[1., 0., 0.],
[0., 1., 0.],
[1., 0., 0.],
[1., 0., 0.],
[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.],
[1., 0., 0.],
[0., 0., 1.],
[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.],
[0., 0., 1.],
[1., 0., 0.],
[0., 0., 1.],
[1., 0., 0.],
[0., 0., 1.],
[0., 1., 0.],
[0., 1., 0.],
[0., 1., 0.],
[1., 0., 0.]])

model.score(x,y) #评估模型
结果:0.973333 #结果可能不一样

4) 决策树的剪枝
如上,未剪枝模型的决策树评估结果为0.93,现在进行剪枝操作(剪枝:找到一颗深度尽可能小但是在测试集上精度为100%的决策树)。
ps:可以通过修改参数max_depth,min_sample_split,min_sample_leaf来实现剪枝过程
d=model.get_depth() #将决策树深度保存在变量中
model= DecisionTreeClassifier(criterion=‘entropy’,max_depth=d-1) #进行第一次剪枝操作
model.fit(X_train,Y_train)
model.predict_proba(X_test)
model.score(x,y) #对模型再次进行训练
结果:0.951377 #模型评估值减少,进行如下操作
model= DecisionTreeClassifier(criterion=‘entropy’,max_depth=d-1,min_samples_leaf=d+1) #进行第二次剪枝(更改为叶节点)
model.fit(Xtrain,Ytrain)
model.predict_proba(X_test)
model.score(Xtest,Ytest)
结果:0.983333 #模型评估值增加,进行如下操作
model= DecisionTreeClassifier(criterion=‘entropy’,max_depth=d-2) #进行第三次剪枝
model.fit(Xtrain,Ytrain)
model.predict_proba(X_test)
model.score(Xtest,Ytest)
结果:0.96733 #评估值减少,说明第二次剪枝已是最优剪枝方案,停止剪枝

你可能感兴趣的:(机器学习)