机器学习入门____4.基于sklearn的决策树算法使用

数据集

数据集使用泰坦尼克号数据集
我们提取的数据集中的特征是票的类别,存活,乘坐班,年龄,登陆,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

猜你喜欢

转载自blog.csdn.net/qq_30990465/article/details/86600876