南山制作网站公司/百度手机端排名如何优化
一、前言
首先来和大家唠唠分类树和回归树的区别(决策树包括分类树和回归树):
回归的目标变量是连续变量,而分类问题是离散变量。
二、代码
import pandasdata = pandas.read_csv('D:\\university\\211term\\数据挖掘\\PDMBook\\第三章 分类模型\\3.6 决策树\\决策树.csv',encoding='utf8',engine='python'
)# 需要进行OneHot处理的列
oneHotColumns = ['性别', '父母鼓励']
from sklearn.preprocessing import OneHotEncoder
# 新建独热编码器
oneHotEncoder = OneHotEncoder()
# 训练独热编码器,得到转换规则
oneHotEncoder.fit(data[oneHotColumns]
)
# 转换数据
oneHotData = oneHotEncoder.transform(data[oneHotColumns]
)
print(oneHotData)
arr = oneHotData.toarray()
print(arr)from scipy.sparse import hstack
# 将独热编码所得的数据,和父母收入、IQ两列合并在一起
# 得到8000*6的矩阵
x = hstack([oneHotData,# 8000*4的矩阵data.父母收入.values.reshape(-1, 1),# 1*8000的list要转为列向量,(-1,1)的意思是先满足列为1,-1行表示满足列为1的情况下,自动生成行data.IQ.values.reshape(-1, 1)
])
print(x)
arr1 = x.toarray()
print(arr1)# 得到labels
y = data["升学计划"]from sklearn.tree import DecisionTreeClassifier
# 设置树的深度为3,最大叶子节点数为7
dtModel = DecisionTreeClassifier(criterion='entropy',max_depth=3,max_leaf_nodes=7
)# 十折交叉验证
from sklearn.model_selection import cross_val_score
cvs = cross_val_score(dtModel, x, y, cv=10)
print(cvs.mean())dtModel = DecisionTreeClassifier(criterion='entropy',max_depth=3,max_leaf_nodes=7
)
dtModel.fit(x, y)# 将决策树模型可视化
from sklearn.tree import export_graphviz
with open('data.dot', 'w') as f:# 运行完之后在当前文件夹里可以打开f = export_graphviz(dtModel, out_file=f)# 导入pydot模块
import pydot_ng as pydot
# 导入内存IO模块
from six import StringIO
# 把dot文件,写入StringIO中
dot_data = StringIO()# class_names: dtModel.classes_
# feature_names: oneHotEncoder.get_feature_names()
export_graphviz(dtModel,out_file=dot_data,class_names=["不计划", "计划"],feature_names=['女性', '男性', '不鼓励', '鼓励', '父母收入', '智商'],filled=True, rounded=True,special_characters=True
)
# 从字符串中读入dot,生成graph对象
graph = pydot.graph_from_dot_data(dot_data.getvalue()
)# 设置所有的节点的字体属性为 Microsoft YaHei
graph.get_node("node")[0].set_fontname("Microsoft YaHei"
)# 将图形保存到 opt_tree.png 文件中
graph.write_png('D:\\university\\211term\\数据挖掘\\PDMBook\\第三章 分类模型\\3.6 决策树\\opt_tree11.png'
)
代码结果图形展示:
三、一些值得积累的细节
- OneHot编码:(给出一个具体示例)
原始数据:
性别 颜色
0 男 红
1 女 绿
2 女 蓝
3 男 绿
4 女 红
训练独热编码器,得到转换规则后fit:
[array([‘女’, ‘男’], dtype=object), array([‘红’, ‘绿’, ‘蓝’], dtype=object)]
转换数据得到一个稀疏矩阵:
[[0. 1. 1. 0. 0.]
[1. 0. 0. 1. 0.]
[1. 0. 0. 0. 1.]
[0. 1. 0. 1. 0.]
[1. 0. 1. 0. 0.]]
- hstack函数:
定义:水平(按列)按顺序堆叠数组。