决策树分类

如果要借由一个人的年龄来预测患流感的死亡率,这里肯定无法采用线性模型,如果要用数学表达式描述这种非线性关系,使用分段函数最为合理,而在机器学习模型中,决策树就是描述这种非线性关系的不二之选。决策树常用的度量方法包括信息熵和基尼不纯性,Scikit-learn中决策树模型默认配置的就是基尼不纯性。

本篇博客不讲述决策树分类模型的理论知识,而是采用一个对泰坦尼克号乘客是否能够生还进行预测的实例进行学习。语言是Python3.6,环境是Anaconda3。

1、读取泰坦尼克号乘客数据并查验

import pandas as pd

titanic=pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
titanic.head()
#查看数据特性,可以发现有数据缺失
titanic.info()

#选择特征
X=titanic[['pclass','age','sex']]
y=titanic['survived']
#对当前选择的特征进行查验
X.info()

2、对缺失的数据进行处理

#age数据列有缺失,使用平均数或者中位数都是对模型偏离造成最小影响的策略
#mean()方法为均值,median()为中位数
X['age'].fillna(X['age'].mean(),inplace=True)
X.info()
3、分割训练集和测试集

#数据分割
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)

4、使用决策树模型预测乘客的生还情况

#特征转换器
from sklearn.feature_extraction import DictVectorizer
vec=DictVectorizer(sparse=False)
#转换特征后,我们发现凡是类别型的特征都单独剥离处理,独成一列特征,数值型的则保持不变
X_train=vec.fit_transform(X_train.to_dict(orient='record'))
X_test=vec.fit_transform(X_test.to_dict(orient='record'))
print(vec.feature_names_)


#导入决策树分类器
from sklearn.tree import DecisionTreeClassifier
#使用默认配置初始化决策树分类器
dtc=DecisionTreeClassifier()
dtc.fit(X_train,y_train)
y_predict=dtc.predict(X_test)

5、对预测结果进行评价

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

6、结果分析

0.781155015198
             precision    recall  f1-score   support


       died       0.91      0.78      0.84       236
   survived       0.58      0.80      0.67        93


avg / total       0.81      0.78      0.79       329


决策树模型总体上预测准确性约为78.12%,从详细的性能指标可以看出,该模型在预测遇难者方面性能较好,却需要在识别生还者的精确率方面下功夫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值