基于sklearn库葡萄酒数据集的决策树回归分析

数据挖掘实验报告

学生姓名

学号

上机时间

上机地点

得分

实验主题:决策树之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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值