sklearn实践(二):决策树

一、数据处理

继续上次聚类的练习,基于稍作处理的数据,在决策树中,只需划分一下训练集和测试集即可

这里用到的是 sklearn.model_selection.train_test_split()

函数原型:sklearn.model_selection.``train_test_split(**arrays*, **options)

函数实现的功能:Split arrays or matrices into random train and test subsets

Quick utility that wraps input validation and next(ShuffleSplit().split(X, y)) and application to input data into a single call for splitting (and optionally subsampling) data in a oneliner.

Parameter:***arrays* ** sequence of indexables with same length / shape[0]

Allowed inputs are lists, numpy arrays, scipy-sparse matrices or pandas dataframes.

可见train_test_split()的参数可以是list,numpy_array都可以。

官方案例:

>>> import numpy as np
>>> from sklearn.model_selection import train_test_split
>>> X, y = np.arange(10).reshape((5, 2)), range(5)
>>> X
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])
>>> list(y)
[0, 1, 2, 3, 4]
>>> X_train, X_test, y_train, y_test = train_test_split(
...     X, y, test_size=0.33, random_state=42)
...
>>> X_train
array([[4, 5],
       [0, 1],
       [6, 7]])
>>> y_train
[2, 0, 3]
>>> X_test
array([[2, 3],
       [8, 9]])
>>> y_test
[1, 4]

可见,我们还需要准备一个y

在这里投机取巧一下:

由于样本集中,前30个是患病,后30个不患病,由此:

y = [1 for i in range(30)] + [0 for j in range(30)]

这样就可以开始划分数据集了

Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.2)

test_size=0.2表示测试集占0.2。(虽然吴恩达推荐的是7:3,或者加上cross validation=0.2=test=(1-train)/2)

二、决策树可视化

接着是苦恼我很久的决策树可视化

clf = tree.DecisionTreeClassifier(criterion="entropy")# 载入决策树分类模型
clf = clf.fit(Xtrain, Ytrain)# 决策树拟合,得到模型
score = clf.score(Xtest, Ytest) #返回预测的准确度
print(score)

tree.plot_tree(clf)
feature_name = [\'FEA_a\',\'FEA_b\',\'FEA_c\',\'FEA_d\',\'FEA_e\',\'FEA_f\',\'FEA_g\']
import graphviz
dot_data = tree.export_graphviz(clf,feature_names= feature_name,class_names=["healthy","unhealthy"],filled=True,rounded=True)
graph = graphviz.Source(dot_data)#画树

graph.render("C:\\Users\\Breeze\\Desktop\\matlab\\tree2.pdf")

graphviz是之前就安装好的,可能有路径需要配置,具体不记得了

主要是graph.render(),这个函数找了好久

没怎么看懂官方文档是怎么做的,碰巧让我试了出来

检验了一下,效果还是可以的,只是这图有点丑。

没想到这么多参数,实际上只有c,d是关键特征

三、总结

还是要多实践,理论上的知识在实践中可能只要一行代码,看上去是很简单的事,但是过程的数据处理,格式转换真的是很头疼的,有时候还会遇到版本的bug,多练习,多总结。

版权声明:本文为fragrant-breeze原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/fragrant-breeze/p/13287809.html