决策树——中文可视化

决策树

回归

数据来自kaggle竞赛的house price

import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt

#load  dataset
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
train_x = np.arange(1460).reshape((-1,1))
train_y = train.iloc[:,-1]
test = np.arange(1459).reshape((-1,1))
#reshape很重要

#fit
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_3 = DecisionTreeRegressor(max_depth=10)

regr_1.fit(train_x,train_y)
regr_2.fit(train_x,train_y)
regr_3.fit(train_x,train_y)

#predict
y1 = regr_1.predict(test)
y2 = regr_2.predict(test)
y3 = regr_3.predict(test)

# Plot the results
plt.figure()
plt.scatter(np.arange(100), train['SalePrice'][:100], s=20, edgecolor="black",
            c="darkorange", label="data")
plt.plot(np.arange(100), y1[:100], color="cornflowerblue", label="max_depth=2", linewidth=2)
plt.plot(np.arange(100), y2[:100], color="yellowgreen", label="max_depth=5", linewidth=2)
plt.plot(np.arange(100), y3[:100], color="red", label="max_depth=10", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

在这里插入图片描述
随着max_depth的增加,拟合的越来越好,但容易出现过拟合现象。

分类

这里我们采用sklearn的内置数据试验

from sklearn import tree
import graphviz
from sklearn import datasets

#加载内置数据集
iris = datasets.load_iris()

#实例化,采用哪种方法
clf = tree.DecisionTreeClassifier()

#训练
clf.fit(iris.data,iris.target)

#画出决策树
dot_data = tree.export_graphviz(clf,out_file = None)
grap = graphviz.Source(dot_data)
grap.render('iris')

在这里插入图片描述

可能遇到的报错:
graphviz.backend.ExecutableNotFound: failed to execute [‘dot’, ‘-Tpdf’, ‘-O’, ‘iris’], make sure the Graphviz executables are on your systems’ PATH
解决方案:Graphviz
好吧。貌似官网上download的exe文件不能用,这里贴出可以用的版本graphviz-2.38.msi
链接:网盘链接
提取码:ei92
也可以设置dot_data里的参数,使决策树更接地气。

#为决策树加上数据内置的feature_names
dot_data = tree.export_graphviz(clf,out_file = None,feature_names = iris.feature_names)

在这里插入图片描述
如何自定义决策树的特征名称显示中文

feature_names = ['花萼的长度 (cm)',
  '花萼的宽度 (cm)',
  '花瓣的长度 (cm)',
  '花瓣的宽度 (cm)']
  
#画出决策树
dot_data = tree.export_graphviz(clf,out_file = None,feature_names = feature_names)
# grap = graphviz.Source(dot_data)
# grap.render('iris2')

中文乱码了。。。,下面给出解决方案:
在这里插入图片描述
在原py文件中,生成txt文件

file_path = "\决策树iris.text"
with open(file_path,'w',encoding = 'utf-8') as f:
  f.writelines(dot_data)

打开生成的text文档,将[shape = box]扩充为[[shape=box fontname=“Microsoft YaHei”]]
创建一个新的py文件,读取text文件,生成带有中文字符的决策树图片。

import os
os.environ['PATH']+= os.pathsep+"D:\graphviz\bin"
import pydotplus

file_path = "\决策树iris.text"
with open(file_path,'r',encoding = 'utf-8') as f:
  dot_data = f.read()

grap = pydotplus.graph_from_dot_data(dot_data)
grap.write_png("中文决策树iris.png")

在这里插入图片描述
同理还可自主设置target_names

target_names = ['山鸢尾', '杂色鸢尾', '韦尔吉鸢尾 ']

dot_data = tree.export_graphviz(clf,out_file = None,feature_names = feature_names,class_names=target_names,)

在这里插入图片描述
其他参数设置,颜色填充,圆角,特殊字符

dot_data = tree.export_graphviz(clf,out_file = None,feature_names = feature_names,
                                class_names=target_names,filled = True,rounded=True,special_characters=True)

在这里插入图片描述
颜色有无及深浅的解释:
定义:基尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。
即 基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率

基尼系数的性质与信息熵一样:度量随机变量的不确定度的大小;
G 越大,数据的不确定性越高;
G 越小,数据的不确定性越低;
G = 0,数据集中的所有样本都是同一类别;
这里gini越接近0.颜色越深,越接近0.5(猜测阈值),颜色越浅。每一种颜色代表一类class。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值