前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【数据挖掘】任务3:决策树分类

【数据挖掘】任务3:决策树分类

作者头像
zstar
发布2022-09-01 16:32:57
4300
发布2022-09-01 16:32:57
举报
文章被收录于专栏:往期博文往期博文

要求

要求:天气因素有温度、湿度和刮风等,通过给出数据,使用决策树算法学习分类,输出一个人是运动和不运动与天气之间的规则树。

训练集和测试集可以自由定义,另外需要对温度和湿度进行概化,将数值变为概括性表述,比如温度热,温,凉爽,湿度变为高,中。

代码语言:javascript
复制
from sklearn import tree
from sklearn.model_selection import train_test_split
import pandas as pd
import graphviz
import numpy as np

数据预处理

数据读取

代码语言:javascript
复制
df = pd.read_excel('data.xlsx', index_col=None)
df

天气

温度

湿度

风况

运动

0

85

85

不适合

1

80

90

不适合

2

多云

83

78

适合

3

有雨

70

96

适合

4

有雨

68

80

适合

5

有雨

65

70

不适合

6

多云

64

65

适合

7

72

95

不适合

8

69

70

适合

9

有雨

75

80

适合

10

75

70

适合

11

多云

72

90

适合

12

多云

81

75

适合

13

有雨

71

80

不适合

文字指标量化

为了后续决策树的计算,需要把文字指标进行量化,下面进行转换:

天气——晴-0,多元-1,有雨-2

风况——无-0,有-1

运动——不适合-0,适合-1

代码语言:javascript
复制
df['天气'] = df['天气'].replace("晴", 0)
df['天气'] = df['天气'].replace("多云", 1)
df['天气'] = df['天气'].replace("有雨", 2)
df['风况'] = df['风况'].replace("无", 0)
df['风况'] = df['风况'].replace("有", 1)
df['运动'] = df['运动'].replace("不适合", 0)
df['运动'] = df['运动'].replace("适合", 1)

温湿度概化

题目要求,将温湿度数值变为概括性表述。这里将温湿度进行概述并转化为数值,具体规则如下:

温度:<70-凉爽-0,70~80-温-1,>80-热-2

湿度:>80-高-1,<=80-中-0

代码语言:javascript
复制
df['温度'] = np.where(df['温度'] < 70, 0, df['温度'])
df['温度'] = np.where((df['温度'] < 80) & (df['温度'] >= 70), 1, df['温度'])
df['温度'] = np.where(df['温度'] >= 80, 2, df['温度'])
df['湿度'] = np.where(df['湿度'] > 80, 1, 0)

转换后的数据如下表所示:

代码语言:javascript
复制
df

天气

温度

湿度

风况

运动

0

0

2

1

0

0

1

0

2

1

1

0

2

1

2

0

0

1

3

2

1

1

0

1

4

2

0

0

0

1

5

2

0

0

1

0

6

1

0

0

1

1

7

0

1

1

0

0

8

0

0

0

0

1

9

2

1

0

0

1

10

0

1

0

1

1

11

1

1

1

1

1

12

1

2

0

0

1

13

2

1

0

1

0

数据集划分

根据7/3的比例划分训练集和测试集

代码语言:javascript
复制
data = df[['天气', '温度', '湿度', '风况']]
target = df['运动']
data = np.array(data)
target = np.array(target)
Xtrain, Xtest, Ytrain, Ytest = train_test_split(data, target, test_size=0.3)

决策树构建

这里决策树的标准选择基尼指数,最终得到分类准确率为60%

代码语言:javascript
复制
clf = tree.DecisionTreeClassifier(criterion="gini")
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
print(score)
代码语言:javascript
复制
0.6

可视化结果

代码语言:javascript
复制
feature_name = ['天气', '温度', '湿度', '风况']
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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 要求
  • 数据预处理
    • 数据读取
      • 文字指标量化
        • 温湿度概化
        • 数据集划分
        • 决策树构建
        • 可视化结果
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档