泰坦尼克乘客生存预测

决策树算法是经常使用的数据挖掘算法,这是因为决策树就像一个人脑中的决策模型一样,呈现出来非常直观。基于决策树还诞生了很多数据挖掘算法,比如随机森林(Random forest)。

sklearn 中的决策树模型

首先,我们需要掌握 sklearn 中自带的决策树分类器 DecisionTreeClassifier,方法如下:

clf = DecisionTreeClassifier(criterion='entropy')

到目前为止,sklearn 中只实现了 ID3 与 CART决策树,所以我们暂时只能使用这两种决策树,

在构造 DecisionTreeClassifier 类时,其中有一个参数是 criterion,意为标准。它决定了构造的分类树是采用 ID3 分类树,还是 CART分类树,对应的取值分别是 entropy 或者 gini:

entropy: 基于信息熵,也就是 ID3 算法,实际结果与 C4.5 相差不大;

gini:默认参数,基于基尼系数。CART 算法是基于基尼系数做属性划分的,所以 criterion=gini 时实际上执行的是 CART 算法。

Titanic 乘客生存预测

泰坦尼克海难是著名的十大灾难之一,究竟多少人遇难,各方统计的结果不一。现在我们可以得到部分的数据,具体数据你可以从 GitHub下载:https://github.com/cystanford/Titanic_Data

实现代码:

import pandasas pd

import numpyas np

from sklearn.feature_extractionimport DictVectorizer

from sklearn.treeimport DecisionTreeClassifier

from sklearn.model_selectionimport cross_val_score

from sklearnimport tree

import graphviz

def trans_sex(x):

if x =='male':

return 1

    else:

return 0

train_data = pd.read_csv('./../data/titanic/train.csv')

test_data = pd.read_csv('./../data/titanic/test.csv', index_col=0)

# 使用平均年龄来填充年龄中的 nan 值

train_data['Age'].fillna(train_data['Age'].mean(), inplace=True)

test_data['Age'].fillna(test_data['Age'].mean(), inplace=True)

# 使用票价的均值填充票价中的 nan 值

train_data['Fare'].fillna(train_data['Fare'].mean(), inplace=True)

test_data['Fare'].fillna(test_data['Fare'].mean(), inplace=True)

# 使用登录最多的港口来填充登录港口的 nan 值

train_data['Embarked'].fillna('S', inplace=True)

test_data['Embarked'].fillna('S', inplace=True)

# 特征选择

features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']

train_features = train_data[features]

train_labels = train_data['Survived']

test_features = test_data[features]

dvec = DictVectorizer(sparse=False)

train_features = dvec.fit_transform(train_features.to_dict(orient='record'))

#train_features = dvec.transform(train_features.to_dict(orient='record'))

print(dvec.feature_names_)

# 构造 ID3 决策树

clf = DecisionTreeClassifier(criterion='entropy')

# 决策树训练

clf.fit(train_features, train_labels)

test_features = dvec.transform(test_features.to_dict(orient='record'))

# 决策树预测

pred_labels = clf.predict(test_features)

#print(pred_labels)

# 得到决策树准确率

acc_decision_tree =round(clf.score(train_features, train_labels), 6)

print(u'score 准确率为 %.4lf' % acc_decision_tree)

# 使用 K 折交叉验证 统计决策树准确率

print(u'cross_val_score 准确率为 %.4lf' % np.mean(cross_val_score(clf, train_features, train_labels, cv=10)))

# 决策树可视化

dot_data = tree.export_graphviz(clf, out_file=None)

graph = graphviz.Source(dot_data)

graph.view()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天,我们将更深入地学习和实现8个顶级Python机器学习算法。 让我们开始Python编程中的机器学习算法之旅。...
    栀子花_ef39阅读 12,662评论 0 62
  • 假设你去随机问很多人一个很复杂的问题,然后把它们的答案合并起来。通常情况下你会发现这个合并的答案比一个专家的答案要...
    城市中迷途小书童阅读 7,969评论 0 1
  • 之前对ML和DL学习已经有一段时间了,后面准备用简书对Kaggle上的学习和实践进行一些记录,方便技术的积累。同时...
    雷_哥阅读 4,554评论 0 0
  • 1.故事背景 泰坦尼克号沉船事故是世界上最著名的沉船事故之一。1912年4月15日,在她的处女航期间,泰坦尼克号撞...
    弱碱强酸阅读 6,205评论 0 8
  • 谷歌、百度或许搜到了很多关于决策树的文章(回归又可以分类的)。好吧,不喜欢看那些公式的朋友请看这里: 这就是一个决...
    AI_Engine阅读 24,691评论 0 7

友情链接更多精彩内容