机器学习算法③—【决策树算法】预测泰坦尼克号乘客生存

一. 项目背景:

          泰坦尼克号的沉没是历史上最有影响力的海难之一。1912年4月15日,在她的处女航中,被广泛认为是“永不沉没”的皇家邮轮泰坦尼克号在与冰山相撞后沉没。不幸的是,船上没有足够的救生艇,导致2224名乘客和船员中有1502人死亡。虽然生存中有一些运气因素,但似乎有些群体比其他群体更有可能生存下来。在这个挑战中,我们要求你建立一个预测模型来回答这个问题:“什么样的人更有可能幸存下来?”,使用乘客资料(即姓名、年龄、性别、社会经济阶层等)。

比赛地址:Titanic - Machine Learning from Disaster | Kaggleicon-default.png?t=N7T8https://www.kaggle.com/competitions/titanic/overview

二. 思路分析:

  • 1.获取数据
  • 2.数据清洗
    • 2.1 缺失值处理
    • 2.2 确定特征值,目标值
    • 2.3 数据集划分
  • 3.特征工程(字典特征抽取)
  • 4.决策树模型训练
  • 5.模型评估

三. 代码实现:

1.获取数据

import pandas as pd
titan = pd.read_csv(r'E:\AI课程笔记\机器学习\titanic_train copy.csv') #导入数据
print(titan.describe()) #查看数据的描述性统计

从输出可以看出,age列有数据缺失。需要对缺失值进行填充处理。

2.数据清洗

2.1 缺失值处理

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

2.2确定目标值和特征值

x = titan[["pclass", "age", "sex"]]
y = titan["survived"]

2.3 数据集划分

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)

3. 特征工程

需要利用to_dict(orient="records")将pandas数组特征转换成字典格式

对字典数据进行one-hot编码处理:

x_train = vect_1.fit_transform(x_train.to_dict(orient="records")) # 对字典数据进行one-hot编码
x_test = vect_1.transform(x_test.to_dict(orient="records")) # 对字典数据进行one-hot编码
print(vect_1.get_feature_names_out())
print(x_train)
print(x_test)

输出结果如下:

是不是很神奇!字典数据就这样被转化成了计算机可以认识的数组!

把要训练的数据转化成计算机可以识别的编码后,我们就可以开始训练模型了


4. 决策树模型训练

首先导入模块:

from sklearn.tree import DecisionTreeClassifier

然后实例化一个决策树(超参数是决策树的深度,这里设置为10):

dec = DecisionTreeClassifier(max_depth=10)

使用dec.fit()训练模型:

dec.fit(x_train, y_train) # 训练模型

看一下训练结果:

y_predict = dec.predict(x_test) # 预测
print(y_predict) # 预测结果

5. 模型评估

使用score()函数计算准确率:

准确率是0.77。也就是预测的100个样本里有77个预测正确。

6.决策树可视化

先用以下代码生成决策树图的dot文件:

export_graphviz(dec, out_file="tree.dot", feature_names=['Age','Pclass','Sex=female','Sex=male']) # 生成决策树结构文件"

将生成的dot文件内容复制粘贴到这个网站:http://webgraphviz.com/后,点击生成图像:

我们的决策树图像就生成啦!

四. 决策树总结

  • 优点:简单的理解和解释,可以处理多分类问题。
  • 缺点:容易发生过拟合,对噪声敏感,不稳定。
  • 改进:剪枝cart算法,随机森林
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,对于这个问题,我可以给您提供一些思路和代码实现。 首先,我们需要导入相关的库和数据集,使用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) ``` 以上就是使用决策树算法进行泰坦尼克号乘客生存预测的代码实现。需要注意的是,这只是一个简单的示例,实际的应用需要根据具体情况进行更加细致的数据处理和模型调优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字生命Allen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值