决策树算法实现:泰坦尼克号乘客生存预测 (python实现)

目录

 

1 案例背景

2 决策树算法api

3. 代码实现

3.1 代码部分分析

3.2 完整代码

4 决策树可视化

4.1 保存树的结构到dot文件

4.2 网站显示结构

4.2.1效果 

5 决策树总结

5.1 优点

5.2 缺点

5.3 改进


1 案例背景

泰坦尼克号沉没是历史上最臭名昭着的沉船之⼀。 1912年4⽉ 15⽇ , 在她的处⼥航中, 泰坦尼克号在与冰⼭相撞后沉没, 在2224名乘客和机组⼈员中造成1502⼈死亡。 这场耸⼈听闻的悲剧震惊了国际社会, 并为船舶制定了更好的安全规定。 造成海难失事的原因之⼀是乘客和机组⼈员没有⾜够的救⽣艇。 尽管幸存下沉有⼀些运⽓因素, 但有些⼈⽐其他⼈更容易⽣存, 例如妇⼥, ⼉童和上流社会。 在这个案例中, 我们要求您完成对哪些⼈可能存活的分析。 特别是,我们要求您运⽤机器学习⼯具来预测哪些乘客幸免于悲剧。
案例: https://www.kaggle.com/c/titanic/overview
我们提取到的数据集中的特征包括票的类别, 是否存活, 乘坐班次, 年龄, 登陆home.dest, 房间, 船和性别等。
数据: http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
 

2 决策树算法api

  • class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)

1.criterion
特征选择标准
"gini"或者"entropy", 前者代表基尼系数, 后者代表信息增益。 ⼀默认"gini", 即CART算法。
2.min_samples_split
内部节点再划分所需最⼩样本数
这个值限制了⼦树继续划分的条件, 如果某节点的样本数少于min_samples_split, 则不会继续再尝试选择最优特征来进⾏划分。 默认是2.如果样本量不⼤, 不需要管这个值。 如果样本量数量级⾮常⼤, 则推荐增⼤这个值。 我之前的⼀个项⽬例⼦, 有⼤概10万样本, 建⽴决策树时, 我选择了min_samples_split=10。可以作为参考。
3.min_samples_leaf
叶⼦节点最少样本数
这个值限制了叶⼦节点最少的样本数, 如果某叶⼦节点数⽬⼩于样本数, 则会和兄弟节点⼀起被剪枝。默认是1,可以输⼊最少的样本数的整数, 或者最少样本数占样本总数的百分⽐。 如果样本量不⼤, 不需要管这个值。 如果样本量数量级⾮常⼤, 则推荐增⼤这个值。 之前的10万样本项⽬使⽤min_samples_leaf的值为5, 仅供参考。
4.max_depth
决策树最⼤深度
决策树的最⼤深度, 默认可以不输⼊, 如果不输⼊的话, 决策树在建⽴⼦树的时候不会限制⼦树的深度。⼀般来说, 数据少或者特征少的时候可以不管这个值。 如果模型样本量多, 特征也多的情况下, 推荐限制这个最⼤深度, 具体的取值取决于数据的分布。 常⽤的可以取值10-100之间。
5.random_state
随机数种⼦


3. 代码实现

3.1 代码部分分析

  • 导入需要的模块

  • 1.获取数据

  • 2.数据的基本处理

       2.1 确定特征值,目标值

     

     2.2 缺失值处理

    

     2.3 数据集划分

     

  • 3.特征工程(字典特征抽取)

     特征中出现类别符号, 需要进⾏one-hot编码处理(DictVectorizer)   ;x.to_dict(orient="records") 需要将数组特征转换成字典数据。
      

  • 4. 决策树模型训练和评估

   决策树API当中, 如果没有指定max_depth那么会根据信息熵的条件直到最终结束。 这⾥我们可以指定树的深度来进⾏限制树的⼤⼩。

3.2 完整代码

# 1.获取数据
# 2.数据基本处理
# 2.1 确定特征值,目标值
# 2.2 缺失值处理
# 2.3 数据集划分
# 3.特征工程(字典特征抽取)
# 4.机器学习(决策树)
# 5.模型评估
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# 1.获取数据
titan =pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
# 2.数据基本处理
# 2.1 确定特征值,目标值
x = titan[["pclass", "age", "sex"]]
y = titan["survived"]
# 2.2 缺失值处理
x['age'].fillna(value=titan["age"].mean(), inplace=True)
# 2.3 数据集划分
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22, test_size=0.2)
# 3.特征工程(字典特征抽取)
x_train = x_train.to_dict(orient="records")
x_test = x_test.to_dict(orient="records")
transfer = DictVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 4.机器学习(决策树)
estimator = DecisionTreeClassifier(max_depth=15)
estimator.fit(x_train, y_train)
# 5.模型评估
y_pre = estimator.predict(x_test)
ret = estimator.score(x_test, y_test)
print(ret)
export_graphviz(estimator, out_file="./data/tree.dot", feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性'])

4 决策树可视化

4.1 保存树的结构到dot文件

  • sklearn.tree.export_graphviz() 该函数能够导出DOT格式

       tree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])
 

dot文件当中的内容如下

那么这个结构不能看清结构, 所以可以在⼀个⽹站上显示


4.2 网站显示结构

4.2.1效果 

5 决策树总结

5.1 优点

简单的理解和解释,树木可视化

5.2 缺点

决策树学习者可以创建不能很好地推广数据的过于复杂的树,容易发生过拟合。

5.3 改进

剪枝cart算法

随机森林

 

参考:黑马程序员课程

  • 8
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,对于这个问题,我可以给您提供一些思路和代码实现。 首先,我们需要导入相关的库和数据集使用pandas库读取数据集: ```python import pandas as pd train_data = pd.read_csv('train.csv') test_data = pd.read_csv('test.csv') ``` 然后,我们需要对数据进行预处理,包括数据清洗、特征工程和特征选择等。在这里,我们可以先对数据进行简单的清洗: ```python train_data = train_data.drop(['Cabin'], axis=1) test_data = test_data.drop(['Cabin'], axis=1) train_data = train_data.dropna() test_data = test_data.dropna() ``` 接着,我们需要对数据进行特征工程,包括特征提取和特征转换等。在这里,我们可以对数据进行一些简单的特征提取,例如提取乘客的称呼(如Mr.、Mrs.、Miss等),并将其转换为数值型数据: ```python train_data['Title'] = train_data['Name'].map(lambda x: x.split(', ')[1].split('. ')[0]) test_data['Title'] = test_data['Name'].map(lambda x: x.split(', ')[1].split('. ')[0]) title_dict = {'Mr': 1, 'Miss': 2, 'Mrs': 3, 'Master': 4, 'Dr': 5, 'Rev': 6, 'Col': 7, 'Ms': 8, 'Mlle': 9, 'Major': 10, 'Lady': 11, 'Sir': 12, 'Mme': 13, 'Capt': 14, 'Jonkheer': 15, 'Don': 16, 'the Countess': 17} train_data['Title'] = train_data['Title'].map(title_dict) test_data['Title'] = test_data['Title'].map(title_dict) ``` 然后,我们可以对特征进行标准化处理: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() train_data[['Age', 'Fare']] = scaler.fit_transform(train_data[['Age', 'Fare']]) test_data[['Age', 'Fare']] = scaler.transform(test_data[['Age', 'Fare']]) ``` 接下来,我们需要将数据集分为训练集和验证集,然后使用决策树算法进行模型训练和预测: ```python from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked', 'Title'] X = train_data[features] y = train_data['Survived'] X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42) clf = DecisionTreeClassifier() clf.fit(X_train, y_train) y_pred = clf.predict(X_valid) print('Accuracy:', accuracy_score(y_valid, y_pred)) ``` 最后,我们可以使用训练好的模型对测试集进行预测,并将结果保存为CSV文件: ```python X_test = test_data[features] y_test = clf.predict(X_test) submission = pd.DataFrame({'PassengerId': test_data['PassengerId'], 'Survived': y_test}) submission.to_csv('submission.csv', index=False) ``` 以上就是使用决策树算法进行泰坦尼克号乘客生存预测的代码实现。需要注意的是,这只是一个简单的示例,实际的应用需要根据具体情况进行更加细致的数据处理和模型调优。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值