- 决策树,目前在我的认知里就是以一个树形结构来对一类数据进行分类,一个分类模型.我也看到了Sklearn里面提供了决策树回归的api,暂时还没有了解,主要理解为用于分类.
- 决策树的相关原理为利用数据里的信息熵,信息含量比较多的就用于前面那决策,能够快速分类,而且可以将决策树可视化.比较清晰看出决策过程.
- 再具体点的原理…我就不是特别了解(跳过了),信息增益,基尼增益…暂时先会当个调参侠…
仍然是sklearn.数据集在这
http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
需要导入的包
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier,export_graphviz
首先使用pandas包读取数据
查看数据,选择决策相关的特征,pclass,age,sex可能会与最终生存有较大关系,所以选择这三个.当然船的相关位置也会有影响,也可以添加.
data = pd.read_csv('./泰坦尼克号.txt')
x=data[['pclass','age','sex']]
y=data[['survived']]
然后,对数据进行一定处理,大部分的数据没有问题,但是年龄的话三等舱的乘客大部分是没有统计,NaN,要对这些数据进行处理.处理方法是用平均年龄代替.如果数据量较少可以直接删除缺省数据,但是这个数据里面缺省的数据还是比较多的.
x['age'].fillna(value = data['age'].mean(),inplace=True)
再划分训练集和测试集
x_train,x_test,y_train,y_test =
train_test_split(x,y,random_state=9,test_size = 0.2)
由于数据还是文本数据,不便于处理,所以需要进行特征处理,这里使用的是字典特征处理,先将数据转化成[字典]的形式,再调用api进行提取.可以使用transfer.get_feature_names()来查看获取了哪些特征
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
print(transfer.get_feature_names())
然后调用决策树api进行模型训练,如果不限制最大深度为5,容易导致模型过拟合,所以需要剪枝,后面会放两种的对比图.
estimitor = DecisionTreeClassifier()
# estimitor = DecisionTreeClassifier(max_depth=5)
estimitor.fit(x_train,y_train)
然后就可以使用模型进行预测,或者查看模型正确率
y_pre = estimitor.predict(x_train)
print(estimitor.score(x_test,y_test))
最后还可以将模型可视化,这里调用export_graphviz将决策树文件输出倒tree.dot文件里面,然后再找一个决策树可视化的网站将决策树可视化了就好.
这里提供一个比较好用的.
dot_data = export_graphviz(estimitor,out_file='tree.dot',
feature_names=transfer.get_feature_names())