利用平行坐标轴分类的决策树分类器DecisionTreeClassifier进行二类分类(复习5)

本文是个人学习笔记,内容主要涉及决策树(DecisionTreeClassifier)对titanic数据集进行二类分类。

当自变量和因变量呈现分段函数关系时(比如公交车让座),在数学上描述这种非线性关系是用分段函数,在ML模型里,决策树是描述这种非线性关系的好选择。

决策树结点代表数据特征每个节点下的分支代表对应特征值的分类决策树的所有叶子节点表示模型的决策结果。使用多种不同的特征组合搭建多层决策树时,模型在学习是要考虑特征节点的选取顺序(entropy/Gini)。

在把数据送入模型之前,需要对数据进行预处理,有些特征数据是完整的,有些是缺失的,有些是数值类型的,有些是字符串的。像LR等非树形模型需要对没有量化的数据特征(比如字符类别型)进行量化甚至标准化,树形模型就不需要。

import pandas as pd
titanic=pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
titanic.head()

这里写图片描述

titanic.to_csv(r'titanic.csv',index=None)
titanic=pd.read_csv(r'titanic.csv')
titanic.info()

这里写图片描述

X=titanic[['pclass','age','sex']]   #从原始数据里取3个特征列进行建模
y=titanic['survived']
X.info()

这里写图片描述

对age列(数值型特征)补缺失值,有”平均数”或”中位数”补缺失值都是对”模型偏离”造成最小影响的策略。sex列和pclass列(字符型特征)都是类别型的,需要转化成数值型特征,用0/1代替。

X['age'].fillna(X['age'].mean(),inplace=True)
X.info()

这里写图片描述

from distutils.version import LooseVersion as Version  
from sklearn import __version__ as sklearn_version  
from sklearn import datasets  
if Version(sklearn_version) < '0.18':  
    from sklearn.cross_validation import train_test_split  
else:  
    from sklearn.model_selection import train_test_split  
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.25, random_state=33)

看一下特征处理前数据的样子

print(X_train)   

这里写图片描述

from sklearn.feature_extraction import DictVectorizer   #特征转换器:将类别型特征独热编码
vec=DictVectorizer(sparse=False)
X_train=vec.fit_transform(pd.DataFrame(X_train).to_dict(orient='record'))   
print(vec.feature_names_)
X_test=vec.transform(pd.DataFrame(X_test).to_dict(orient='record'))

这里写图片描述
看一下特征处理后的结果,即将要送入模型的数据的样子(对比特征处理前数据看)

print(X_train)   #age class_one_hot3列 sex_one_hot2列

这里写图片描述

from sklearn.tree import DecisionTreeClassifier
dtc=DecisionTreeClassifier()
dtc.fit(X_train,y_train)
y_predict=dtc.predict(X_test)

from sklearn.metrics import classification_report
print(dtc.score(X_test,y_test))
print(classification_report(y_predict,y_test,target_names=['died','survived']))

这里写图片描述

import sys
import os
os.environ["PATH"] += os.pathsep + 'D:\PYTHON35\Anaconda3.4.2\Lib\site-packages\graphviz-2.38\bin'
#'D:\PYTHON35\Anaconda3.4.2\Lib\site-packages\graphviz-2.38\bin'是解压缩graphviz-2.38.zip包后bin文件夹所在位置

%matplotlib inline
import numpy as np
from IPython.display import Image  
from sklearn import tree
import pydotplus 
import graphviz
dot_data = tree.export_graphviz(dtc, out_file=None, 
                         feature_names=vec.feature_names_,  
                         class_names=['0','1'], 
                         filled=True, rounded=True,  
                         special_characters=True)  
graph = pydotplus.graph_from_dot_data(dot_data)  
Image(graph.create_png())

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值