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