# 机器学习应用篇（五）——决策树分类实例

## 二、实现过程

### 1 数据特征分析


import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns

data = data[['Species','Culmen Length (mm)','Culmen Depth (mm)',
'Flipper Length (mm)','Body Mass (g)']]
data.info()

data=data.fillna(-1)
print(data.tail())

print(data['Species'].unique())

print(pd.Series(data['Species']).value_counts())

print(data.describe())

sns.pairplot(data=data,diag_kind='hist',hue='Species')
plt.show()

def trans(x):
if x == data['Species'].unique()[0]:
return 0
if x == data['Species'].unique()[1]:
return 1
if x == data['Species'].unique()[2]:
return 2
data['Species'] = data['Species'].apply(trans)

for col in data.columns:
if col != 'Species':
sns.boxplot(x='Species', y=col, saturation=0.5, palette='pastel', data=data)
plt.title(col)
plt.show()
plt.figure()

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(10,8))

data_class0 = data[data['Species']==0].values
data_class1 = data[data['Species']==1].values
data_class2 = data[data['Species']==2].values

ax.scatter(data_class0[:,0], data_class0[:,1], data_class0[:,2],label=data['Species'].unique()[0])
ax.scatter(data_class1[:,0], data_class1[:,1], data_class1[:,2],label=data['Species'].unique()[1])
ax.scatter(data_class2[:,0], data_class2[:,1], data_class2[:,2],label=data['Species'].unique()[2])
plt.legend()
plt.show()


### 2 利用决策树模型在二分类上进行训练和预测


from sklearn.model_selection import train_test_split

data_target_part = data[data['Species'].isin([0,1])][['Species']]
data_features_part = data[data['Species'].isin([0,1])][['Culmen Length (mm)','Culmen Depth (mm)',
'Flipper Length (mm)','Body Mass (g)']]

x_train, x_test, y_train, y_test = train_test_split(
data_features_part, data_target_part, test_size = 0.2, random_state = 2020)

from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

clf = DecisionTreeClassifier(criterion='entropy')

clf.fit(x_train, y_train)

import pydotplus
dot_data = tree.export_graphviz(clf, out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png("D:\Python\ML\DTpraTree.png")

train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)
from sklearn import metrics

print('The accuracy of the train_DecisionTree is:',metrics.accuracy_score(y_train,train_predict))
print('The accuracy of the test_DecisionTree is:',metrics.accuracy_score(y_test,test_predict))

confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
print('The confusion matrix result:\n',confusion_matrix_result)

plt.figure(figsize=(8, 6))
sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()


### 3 利用决策树模型在多分类（三分类）上进行训练与预测


x_train, x_test, y_train, y_test = train_test_split(data[['Culmen Length (mm)','Culmen Depth (mm)',
'Flipper Length (mm)','Body Mass (g)']], data[['Species']], test_size = 0.2, random_state = 2020)

clf = DecisionTreeClassifier()

clf.fit(x_train, y_train)

train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)
train_predict_proba = clf.predict_proba(x_train)
test_predict_proba = clf.predict_proba(x_test)

print('The test predict Probability of each class:\n',test_predict_proba)

print('The accuracy of the train_DecisionTree is:',metrics.accuracy_score(y_train,train_predict))
print('The accuracy of the test_DecisionTree is:',metrics.accuracy_score(y_test,test_predict))

confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
print('The confusion matrix result:\n',confusion_matrix_result)

plt.figure(figsize=(8, 6))
sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()


## 三、KEYS

### 1 构建过程

• 当前节点包含的样本全部属于同一类别，无需继续划分
• 当前属性集为空或者所有样本在某个属性上的取值相同，无法继续划分
• 当前节点包含的样本几何为空，无法划分

### 2 划分选择

• 信息熵：衡量数据混乱程度的指标，信息熵越小，数据的”纯度”越高
• 基尼指数：反应了从数据集中随机抽取两个类别的标记不一致的概率

### 3 重要参数

• criterion：用来决定模型特征选择的计算方法，sklearn提供两种方法：
*
 entropy&#xFF1A;&#x4F7F;&#x7528;&#x4FE1;&#x606F;&#x71B5;


*

 gini&#xFF1A;&#x4F7F;&#x7528;&#x57FA;&#x5C3C;&#x7CFB;&#x6570;

• random_state&splitte：
*
 random_state&#x7528;&#x4E8E;&#x8BBE;&#x7F6E;&#x5206;&#x652F;&#x7684;&#x968F;&#x673A;&#x6A21;&#x5F0F;&#x7684;&#x53C2;&#x6570;


*

 splitter&#x7528;&#x6765;&#x63A7;&#x5236;&#x51B3;&#x7B56;&#x6811;&#x4E2D;&#x7684;&#x968F;&#x673A;&#x9009;&#x9879;

• max_depth：限制数的深度
• min_samples_leaf：一个节点在分支之后的每个子节点都必须包含至少几个训练样本。该参数设置太小，会出现过拟合现象，设置太大会阻止模型学习数据

886~~

Original: https://blog.csdn.net/qq_43368987/article/details/122376146
Author: 柚子味的羊
Title: 机器学习应用篇（五）——决策树分类实例

(0)

### 大家都在看

• #### numpy第三章-索引器、多级索引

一、索引器 df = pd.read_csv(….) 下面的df都是指数据名 1.列索引从表中取出一列：df[‘列名’] 例如：df[‘Na…

人工智能 2023年7月8日
044
• #### “天池”淘宝用户消费行为分析——sql

文章目录 * – 0 项目背景 – + 1 项目明细 + * – 1.1 数据的来源及明细 – 1.2 项目目的 – 1…

人工智能 2023年7月16日
050
• #### （超详细！！）Pytorch循环神经网络（RNN）快速入门与实战

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2022年12月14日
0158
• #### Matlab：正则表达式

本主题说明什么是正则表达式以及如何使用它们来搜索文本。正则表达式灵活而强大，尽管它们使用复杂的语法。正则表达式的一种替代选择是pattern（自 R2020b 开始提供），它更易于…

人工智能 2023年6月27日
033
• #### 服务器RTX3090安装显卡驱动,cuda,cudnn,gpu版pytorch记录

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2022年12月15日
0211
• #### 词嵌入模型

词嵌入模型 为什么需要词嵌入模型 余弦相似度可以度量两个向量的相似程度，我们自然想到可以将单词或者文本用向量表示，来判断两者的相似程度，而词嵌入模型则是一种实现方式，将所有出现的单…

人工智能 2023年5月28日
0102
• #### 三、仪表读数识别算法的开发——1. 整体思路

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2022年11月22日
0109
• #### OpenCV中图像特征提取与描述

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2022年8月31日
0220
• #### 吴恩达：AI的下一个发展方向，从大数据转向小数据

AI 发展方向需要转向「小数据」了。 吴恩达（Andrew Ng）在 AI 领域有着很高的声誉。在 2000 年代后期，他率先使用 GPU 与斯坦福大学的学生一起训练深度学习模型，…

人工智能 2023年5月31日
028
• #### matlab-图形采样及灰度级转换

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2022年11月18日
0131
• #### 【使用protege】知识图谱概述以及知识表示

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2022年10月1日
0169
• #### SAHI强化YOLOv5在小目标上的表现

环境 ubuntu 18.04 64bit sahi 0.8.4 yolov5 5.0 pytorch 1.7.1+cu101 前言 目标检测和实例分割是迄今为止计算机视觉中最重要…

人工智能 2023年5月23日
036
• #### AR-HMM模型 自回归隐马尔可夫模型

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2022年11月16日
0144
• #### Pandas两重山之Series（循环）

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2022年12月10日
095
• #### 全球及中国POS保险箱行业市场需求及未来投资风险预测报告2022-2028年

啊哦~你想找的内容离你而去了哦 内容不存在，可能为如下原因导致： ① 内容还在审核中 ② 内容以前存在，但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

人工智能 2023年7月17日
018
• #### 什么是模型蒸馏

注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

人工智能 2023年3月21日
042