数据集
数据集使用泰坦尼克号数据集
我们提取的数据集中的特征是票的类别,存活,乘坐班,年龄,登陆,home.dest,房间,票,船和性别。乘坐班是指乘客班(1,2,3),是社会经济阶层的代表。表头如下
sklearn
sklearn包含了许多小型数据集可以供学习使用,同时也提供了完善的机器学习算法接口,能够很快的实现预测模型。
导包
#引入用于分割数据集的包
from sklearn.model_selection import train_test_split,GridSearchCV
#引入决策树以及导出时用到的包
from sklearn.tree import DecisionTreeClassifier, export_graphviz
#引入特征抽取时要用到的包,主要用于进行one hot编码
from sklearn.feature_extraction import DictVectorizer
# 引入pandas用于读取csv文件
import pandas as pd
读取数据
taitan = pd.read_csv("./data/taitan.csv")
提取数据
# x中的列属性有很多,我们挑选其中三个进行模型训练
x = taitan[['pclass', 'age', 'sex']]
# y值代表最终结果
y = taitan['survived']
处理数据
one-hot编码
我们将属性的所有可能值列举出来,那么一个样本中如果出现了这个属性,这个属性的值标为1,其他标为0
如图:
Category类中有Human和Penguin等属性,我们把它进行one-hot编码
编码后如图:
如第一个样本中Category值为Human,只有Human这一列为1,其余全部为0
进行处理
# 处理缺失值,将缺失值设置为平均值
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)
# 进行特征工程 将类别转换为one hot 编码
dict = DictVectorizer(sparse=False)
#将数据转换为one-hot格式
x_train = dict.fit_transform(x_train.to_dict(orient='records'))
x_test = dict.transform(x_test.to_dict(orient='records'))
进行训练
#设置决策树最大深度为3,
dec = DecisionTreeClassifier(max_depth=3)
#喂入数据,进行训练
dec.fit(x_train, y_train)
#投入测试集数据,输出准确率
print("预测准确率,%f" % dec.score(x_test, y_test))
导出为图片
导出图片时需要安装graphviz,
可在http://www.graphviz.org/ 下载安装包,并配置好环境变量。
在训练后执行下列代码
#out_file表示存储路径,feature_names表示各个特征对应名字。执行之后会在相对路径下生成一个tree.dot文件.
export_graphviz(dec, out_file="./tree.dot",
feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'wmale', 'male'])
windows系统中在生成dot文件的对应目录下shift+右键打开cmd命令行执行
dot -Tpng tree.dot -o tree.png
得到如下图片
数据集链接
链接:https://pan.baidu.com/s/17yQMaA1s4N3QW30vUm3HBw
提取码:gbjt