基于make_moons数据集建立决策树分类器

  • 发布日期:2019-10-22
  • 难度:一般
  • 类别:分类与预测、数据集
  • 标签:Python、决策树、make_moons、二维分类数据集

1. 问题描述

基于make_moons数据集的决策树算法实例

2. 程序实现

In [1]:
#将数据集划分为训练集和测试集
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons
X, y = sklearn.datasets.make_moons(100,noise=0.5)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
print(X_train.shape)
print(X_test.shape)
(70, 2)
(30, 2)
In [2]:
#决策树构建
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(max_depth=3) #使用DecisionTreeClassifier建立了一个深度为3的决策树分类器
clf = clf.fit(X_train, y_train)
In [3]:
#决策树可视化
from sklearn import tree
from sklearn.tree import export_graphviz
export_graphviz(clf, out_file='tree.dot', filled=True)
# 运行以上代码后,将会输出一个tree.dot的文本文件。为了进一步将它转换为可视化格式,需要安装Graphviz,在命令行中以如下方式编译。
# dot -Tpng tree.dot -o tree.png
In [5]:
#由于这里使用的是二维数据,因此可以用较为简单的可视化形式(区域划分对比)展示分类器效果。所谓区域划分对比,是指按照数据集预测的类标,将其划分为不同颜色的区域,然后进行散点图绘制对比。如果每个区域对应一类散点,则表示预测结果和真实结果一致,如果某个区域混入其他类型的散点,则表示该点的预测结果与真实结果不一致。

#二维可视化效果图
from matplotlib.colors import ListedColormap
import numpy as np
import matplotlib.pyplot as plt
cmap_light=ListedColormap(['#FFAAAA','#AFEEEE'])
cmap_dark=ListedColormap(['#FF0000','#000080'])
x_min,x_max=X[:,0].min()-1,X[:,0].max()+1
y_min,y_max=X[:,1].min()-1,X[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,0.1),np.arange (y_min,y_max,0.1))
Z=clf.predict(np.c_[xx.ravel(),yy.ravel()]).reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)
plt.scatter(X[:,0], X[:,1],c=y,cmap=cmap_dark)
plt.show()
In [6]:
#准确率评估
#通过计算错误率,可以对决策树的分类结果进行评估。
train_score=clf.score(X_train,y_train)
test_score=clf.score(X_test,y_test)
print(train_score)
print(test_score)
0.8714285714285714
0.6666666666666666