Python实现决策树算法预测

一、概念

        决策树是一种从无次序、无规则的样本数据集中推理出决策树表示形式的分类规则方法。决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。
        在决策树算法中有一个非常重要的概念:信息熵
信息熵是信息论中用于度量信息量的一个概念。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。所以,信息熵也可以说是系统有序化程度的一个度量。
信息熵的计算公式
在这里插入图片描述
其中xi 是变量。p(xi)是变量xi发生的概率
例如:小明明天出去玩的概率是0.6,不出去玩的概率是0.4
那么信息熵是 H(x) = – 0.6log20.6 – 0.4log20.4 = 0.9709508

python检验

假设小王根据电影的类型,国家和口碑决定去不去看一场电影
下面是小王过去的8次决定
在这里插入图片描述
watch代表有没有去看,yes是去看了,no是没去看
代码:

# 导入机器学习的相关包
import csv
from sklearn.feature_extraction import DictVectorizer
from sklearn import preprocessing, tree

从csv文件里读取训练集数据
在这里插入图片描述
将影响小王决定的特征用字典的形式保存
在这里插入图片描述
提取特征

# 从字典特区特征
vec = DictVectorizer(sparse=False)
# 转换成稀疏矩阵(数组表示)
dummyX = vec.fit_transform(feature_list)
# 打印特征名称
print(vec.get_feature_names())
print(dummyX)
# 将结果转换成数组
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(result_list)
print(dummyY)

在这里插入图片描述
创建决策树

# 创建决策树
clf = tree.DecisionTreeClassifier(criterion='entropy', random_state=0)
clf = clf.fit(dummyX, dummyY)
print("clf(决策树):", str(clf))

在这里插入图片描述
将决策树保存为可视化图片

import pydotplus
# 导出决策树为图片
dot_data = tree.export_graphviz(clf,
                                feature_names=vec.get_feature_names(),
                                filled=True,
                                rounded=True,
                                special_characters=True,
                                out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("film.pdf")

在这里插入图片描述
在保存pdf的时候Windows可能会遇到Graphviz找不到的情况,这时要下载一个安装包,
https://graphviz.gitlab.io/_pages/Download/Download_windows.html
Windows有单独的安装包,下载后直接安装,然后把安装路径下的bin文件夹添加到环境变量
如果还不行,在程序最上方添加如下两行代码就行了

import os
os.environ["PATH"] += os.pathsep + 'D:/SoftWare/Graphviz2.38/bin/'
#  D:/SoftWare/Graphviz2.38/bin/为自己的安装路径

预测

a = ([[0,1,0,0,1,0,1,0,0]])   # 中国 高票房  动作片

pre_result = clf.predict(a)
print("预测结果", str(pre_result))

在这里插入图片描述

a = ([[0,1,0,0,0,1,0,1,0]])   # 中国 低票房  爱情片

pre_result = clf.predict(a)
print("预测结果", str(pre_result))

在这里插入图片描述

完整代码

import csv
from sklearn.feature_extraction import DictVectorizer
from sklearn import preprocessing, tree
import pydotplus

film_data = open('film.csv','rt')
reader = csv.reader(film_data)
headers=next(reader)

feature_list = []  # 特征值
result_list = []   # 小王决定的结果

for row in reader:
    result_list.append(row[-1])
    feature_list.append(dict(zip(headers[1:-1], row[1:-1])))
print(result_list)
for i in feature_list:
    print(i)

# 从字典特区特征
vec = DictVectorizer(sparse=False)
# 转换成稀疏矩阵(数组表示)
dummyX = vec.fit_transform(feature_list)
# 将结果转换成数组
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(result_list)

# 创建决策树
clf = tree.DecisionTreeClassifier(criterion='entropy', random_state=0)
clf = clf.fit(dummyX, dummyY)

# 导出决策树为图片
dot_data = tree.export_graphviz(clf,
                                feature_names=vec.get_feature_names(),
                                filled=True,
                                rounded=True,
                                special_characters=True,
                                out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("film.pdf")

# 预测
a = ([[0,1,0,0,0,1,0,1,0]])   # 中国 低票房  爱情片

pre_result = clf.predict(a)
print("预测结果", str(pre_result))
  • 24
    点赞
  • 208
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值