数据挖掘实验报告
学生姓名 | 学号 | 上机时间 | 上机地点 | 得分 |
实验主题:决策树之CART分类实验
一、问题描述
运用Sklearn中CART算法实现决策树分类并剪枝优化决策树
⚫ 1)如何从数据表中找到最佳节点和最佳分支? ⚫ 2)如何让决策树停止分裂过程,防止过拟合?
二、实验环境
Pycharm
三、主要实验步骤
样例:
1)问题分析:本问题的解决思路为先建立一棵决策树,再通过训练集和测试集准确性比较判断是否过拟合,若过拟合则通过entropy计算特征纯性找出最佳节点和最佳分支方法
2)代码层次设计: 1:导入需要的算法库和模块;2:探索数据(查看数据特征、特征标签、特征名称、类标签名称….;3:数据集分割(测试集、训练集);4:利用sklearn进行模型的实例化、训练、接口调用;5:可视化决策树
3)各模块代码展示
导入需要的算法库和模块:
import numpy as np
import matplotlib.pyplot as plt
import graphviz
from sklearn.datasets import load_wine
wine=load_wine()
import pandas as pd
from sklearn import tree
#实用函数
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
探索特征名称和类名称数据分割
pd.set_option('display.max_columns',None)
pd.set_option('display.width',200)
result=pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
print(result)
#打印特征名称
print(wine.feature_names)
#打印类名称
print(wine.target_names)
X,y=wine.data,wine.target
X_train,X_test,Y_train,Y_test=train_test_split(X,y,test_size=0.2)
# print(X_train)
# print(X_train.shape)
print(wine.data.shape)
print(wine.target)
#建立模型
clf=tree.DecisionTreeClassifier(criterion='entropy')
clf=clf.fit(X_train,Y_train) #拟合
score=clf.score(X_test,Y_test)#返回预测准确性
print(score)#打印评分
clf=tree.DecisionTreeClassifier(criterion='entropy')
clf=clf.fit(X_train,Y_train)
#\得分每次运行得到的分数都是不一样的,因为他的训练集和测试集每次执行都是随机划分的,所以得到的结果必然不一样
##通过random_state(值为多少无所谓)使得每一次生成的score不变
建立一棵决策树
feature_name=['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度',
'色调','od280/od315稀释葡萄酒','脯氨酸']
dot_data = tree.export_graphviz(clf,
feature_names=feature_name,
class_names=['琴酒', '雪莉', '贝尔摩德'],
filled=True,
rounded=True)
graph = graphviz.Source(dot_data.replace('helvetica','Microsoft YaHei'),encoding='utf-8')
graph.view()
每次决策树图不一样
剪枝
此时决策树为:
由下图可知min_samples_leaf取值最好是5