基于决策树算法的泰坦尼克号乘客生存预测

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


数据集获取

   阿里云天池数据集中下载使用titanic-data.csv

一、代码实现

1.1代码部分解析

   1.导入所需库
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
import pandas as pd
  2.数据获取

     根据自己文件路径访问即可

T_data = pd.read_csv("titanic-data.csv")
  3.筛选特征值、目标值

      筛选特征值,从泰坦尼克号数据集 T_data 中选择 PclassAgeSex 这三列作为特征。

      将 Survived 列作为目标变量,它表示乘客是否存活。

x = T_data[["Pclass", "Age", "Sex"]]
y_target = T_data["Survived"]
 4. 数据处理(缺失数据)

    采用Age平均值填补缺失数据

x["Age"].fillna(x["Age"].mean(), inplace=True)
 5.数据集划分、特征值提取

     将划分好的数据集转换为字典类型->进行字典特征值提取

     DictVectorizer 会自动将类别型特征(如 Sex)转换为 one-hot 编码 的形式。例如,Sex 会被转换为两个特征:Sex_female 和 Sex_male,分别代表女性和男性。

x_train, x_test, y_train, y_test = train_test_split(x, y_target, test_size=0.2, random_state=22)
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.transform(x_test)
6.模型训练

   (1)参数criterion

  • gini (基尼不纯度): 这是默认值,它衡量一个节点中不同类别样本的比例。基尼不纯度越低,说明节点中的样本越纯,即属于同一类别的样本越多。
  • entropy (信息增益): 信息增益衡量使用某个特征进行划分后,信息的不确定性减少了多少。信息增益越高,说明该特征对分类的贡献度越大。从而选择最佳划分特征。
dtc = DecisionTreeClassifier(criterion="entropy", max_depth=15)
dtc.fit(x_train, y_train)
y_pred = dtc.predict(x_test)
score = dtc.score(x_test, y_test)
print("y_pred:\n", y_pred)
print("比对真实值和预测值:\n", y_test == y_pred)
print("score:\n", score)
7.决策树可视化 

    (1)生成titan.dot文件

export_graphviz(dtc, out_file="titan.dot", feature_names=transfer.get_feature_names_out())

      部分titan.dot文件 

 

(2)决策树显示

  

二、完整代码展示

from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
import pandas as pd
T_data = pd.read_csv("D:\py\机器学习资料/titanic-data.csv")
"""
1.数据处理:
   Age数据缺失,平均值填补
   Embarked数据缺失,出现最多数据---众数填补
   inplace=True: 表示直接修改原始 DataFrame,而不是创建新的 DataFrame
2.数据转换---字典格式
3.数据集划分
4.字典特征抽取
"""
# 筛选特征值、目标值
x = T_data[["Pclass", "Age", "Sex"]]
y_target = T_data["Survived"]
x["Age"].fillna(x["Age"].mean(), inplace=True)
x_train, x_test, y_train, y_test = train_test_split(x, y_target, test_size=0.2, random_state=22)
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.transform(x_test)
dtc = DecisionTreeClassifier(criterion="entropy", max_depth=15)
dtc.fit(x_train, y_train)
y_pred = dtc.predict(x_test)
score = dtc.score(x_test, y_test)
print("y_pred:\n", y_pred)
print("比对真实值和预测值:\n", y_test == y_pred)
print("score:\n", score)
export_graphviz(dtc, out_file="titan.dot", feature_names=transfer.get_feature_names_out())

补充:决策树可视化网址

 


总结

   1.决策树优化

       (1)剪枝:为了防止过拟合,可以通过剪枝技术减少树的复杂度。通过参数max_depth调整

       (2)特征值选择:选择对分类或回归有重要贡献的特征,可以提高模型的准确率和泛化能力。

       (3)集成学习:随机森林便是决策树的优化使用,通过集成多个决策树来提升模型的性能

       
 
  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值