操作环境:win10+python3.7,不同环境可能会有些许差异
- 决策树API
sklearn.tree.DecisionTreeClassifier(criterion=‘gini’,max_depth=None,random_state=None,class_weight=None,min_samples_split=2,min_samples_leaf=1)
- 相关参数:
- criterion:默认是‘gini’系数,也可以选择信息增益的熵‘entropy’
- max_depth:树的深度大小:根节点到子节点层数,常用取值10-100之间。
- random_state:随机数种子
- class_weight:指定样本各类别权重,防止训练集某些类别样本量过多,导致训练集偏向这些类别。可以指定各个样本的权重,或者用"balanced"算法自动计算权重,类别少相应权重高。分布相对均匀,可以忽略该参数。
- min_samples_split:限制子树继续划分条件,如果样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。样本量不大的情况下,可以不用管这个值。样本量大,适当增大这个值,防止过拟合。
- min_samples_leaf:限制叶子节点最小样本数,如果某叶子节点小于样本数,则会和兄弟节点一起被剪枝。默认是1,可以输入最少样本整数,或者样本总数的百分比。
- 决策树优缺点
- 优点
- 简单的理解和解释,树木可视化
- 需要很少的数据准备,其他技术通常需要数据归一化
- 缺点
- 过于复杂的树,使用决策树可能会存在过拟合。
- 改进
- 剪枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)
- 随机森林
- 优点
- 决策树的本地保存dot-png转化工具
- 下载GraphViz
- 下载地址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html
- 下载文件:graphviz-2.38.msi
- 设置环境变量:计算机右击-属性-高级-环境变量-系统变量-Path-编辑-新建(我这里是:C:\Program Files (x86)\Graphviz2.38\bin)
- cmd终端命令示例:
这里直接使用cd切换到安装目录了,可以在没设置环境变量下运行。转化命令:dot -Tpng dot文件 -o png文件C:\Users\Administrator>cd C:\Program Files (x86)\Graphviz2.38\bin C:\Program Files (x86)\Graphviz2.38\bin>dot -Tpng d:\桌面\tree.dot -o d:\桌面\tree.png
- python安装,
- cmd窗口:pip3 install graphviz
- 下载GraphViz
- 生存预测代码示例:
大家可以直接复制尝试,相关路径还请手动修改import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.feature_extraction import DictVectorizer from sklearn.model_selection import train_test_split from sklearn.tree import export_graphviz import os def decision(): """决策树泰坦尼克号数据预测生死""" os.chdir('d:/桌面') train = pd.read_csv('test.csv',sep=',') """处理数据,找出特征值和目标值""" x = train.loc[:,['Pclass','Age','Sex']] y = train.loc[:,['Survived']] """缺失值处理""" x['Age'].fillna(x['Age'].mean(),inplace=True) """分割数据集到训练集和测试集""" x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25) print(x_train) """进行处理(特征工程-特征-类别-one_hot编码)""" dict = DictVectorizer(sparse=False) x_train = dict.fit_transform(x_train.to_dict(orient='records')) #pd转化字典:to_dict print(dict.get_feature_names()) '''这里需要注意,为保证转化规则一致,直接使用transform,而不是使用fit_transform''' x_test = dict.transform(x_test.to_dict(orient='records')) """用决策树进行预测""" dec = DecisionTreeClassifier() dec.fit(x_train,y_train) ''' 监督学习估计器的predict方法是预测 dec.predict(x_test) ''' """预测准确率""" print('预测的准确率:{}'.format(dec.score(x_test,y_test))) '''决策树的结构本地保存''' '''feature_names参数也可以手动按照顺序指定为其他文字,第一个参数似乎分类器,这里即:dec''' export_graphviz(dec,out_file='./tree.dot',feature_names=dict.get_feature_names()) return None if __name__ == '__main__': decision()
附:数据源链接
这里数据源测试集训练集直接分为两个文件,具体看大家使用喜欢了,或者也可以使用pandas的append方法进行数据聚合再分割。
链接:https://pan.baidu.com/s/1TlJOPLe5GCjTPoXd3M2GIQ
提取码:0nv1