机器学习入门实战4-基本模型
- 互联网
- 2025-09-01 05:15:02

📌 机器学习基本模型项目实战:预测泰坦尼克号乘客的生存概率
🚢 项目背景
1912 年 4 月 15 日,泰坦尼克号在处女航中撞上冰山沉没,船上 2224 名乘客和船员中,仅有约 710 人生还。 哪些因素决定了生还几率? 年龄?性别?船舱等级? 作为数据科学家,你的任务是分析数据并建立模型,预测某位乘客是否能生还。
本项目将贯穿 数据清理 → 可视化分析 → 机器学习建模 → 预测生存概率,让你从零开始完成一个完整的数据科学项目!🚀
📌 1. 获取数据
数据来源:
我们使用 Kaggle 泰坦尼克号数据集下载地址:Titanic - Machine Learning from Disaster文件:train.csv📌 安装所需工具
pip install pandas numpy seaborn matplotlib scikit-learnPandas、NumPy、Seaborn、Matplotlib 是 Python 进行数据分析 & 可视化最常用的四个库,适用于数据处理、统计计算、图表绘制等。
库主要用途常见功能Pandas数据处理读写 CSV、数据清理、数据分析NumPy数值计算矩阵运算、随机数生成Seaborn高级可视化统计图表、热图Matplotlib基础绘图折线图、柱状图、散点图sklearn(Scikit-learn)是 Python 里最流行的机器学习库,用于构建、训练和评估机器学习模型。它基于 NumPy 和 pandas,提供了数据预处理、分类、回归、聚类、降维等功能。
为什么使用 sklearn? ✅ 封装了常见机器学习算法,只需几行代码即可完成训练和预测 ✅ 支持数据预处理(填充缺失值、特征缩放、类别编码等) ✅ 提供超参数调优工具(如 GridSearchCV) ✅ 可用于分类、回归、聚类、降维等各种任务 ✅ 与 pandas、matplotlib、seaborn 兼容,易于分析和可视化
📌 导入库
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score, confusion_matrix📌 加载数据
df = pd.read_csv("train.csv") # 查看数据结构 print(df.head())✅ 数据示例
PassengerId Survived Pclass Sex Age SibSp Parch Fare Embarked 0 1 0 3 male 22.0 1 0 7.2500 S 1 2 1 1 female 38.0 1 0 71.2833 C📌 字段解释
Survived:是否生还(0=未生还,1=生还)Pclass:船舱等级(1=头等舱,2=二等舱,3=三等舱)Sex:性别Age:年龄SibSp:兄弟姐妹/配偶数量Parch:父母/子女数量Fare:票价Embarked:登船港口(C = Cherbourg, Q = Queenstown, S = Southampton)📌 2. 数据清理
📌 查看缺失值
print(df.isnull().sum())✅ 可能发现
Age 177 Cabin 687 Embarked 2📌 处理缺失值
df["Age"] = df["Age"].fillna(df["Age"].median()) # 用中位数填充年龄 df["Embarked"] = df["Embarked"].fillna(df["Embarked"].mode()[0]) # 用最常见的港口填充 df.drop(columns=["Cabin", "PassengerId", "Name", "Ticket"], inplace=True) # 删除无关列📌 3. 数据可视化
📌 乘客生还率
plt.figure(figsize=(6,4)) sns.countplot(x="Survived", data=df, palette="Set1") plt.title("泰坦尼克号生还 vs. 未生还人数") plt.show()✅ 观察:生还人数远少于未生还人数。
📌 不同性别的生还率
plt.figure(figsize=(6,4)) sns.barplot(x="Sex", y="Survived", data=df, palette="pastel") plt.title("性别 vs. 生还率") plt.show()✅ 观察:女性生还率显著高于男性(“女士优先”)。
📌 不同船舱的生还率
plt.figure(figsize=(6,4)) sns.barplot(x="Pclass", y="Survived", data=df, palette="muted") plt.title("船舱等级 vs. 生还率") plt.show()✅ 观察:头等舱乘客生还率最高,三等舱最低。
📌 4. 特征工程
特征工程是数据科学和机器学习中的关键步骤,目的是优化数据,使机器学习模型能更好地理解和学习数据的模式。
📌 简单来说:
数据本身无法直接用于机器学习模型,需要进行转换和优化特征工程是将原始数据转换为更有意义、更能帮助模型学习的形式好的特征工程可以极大提升模型的准确率📌 总结 ✅ 数据清理 = 确保数据质量,不让模型崩溃 ✅ 特征工程 = 提供更有用的数据,提升模型表现
📌 处理类别变量
df["Sex"] = df["Sex"].map({"male": 0, "female": 1}) df["Embarked"] = df["Embarked"].map({"C": 0, "Q": 1, "S": 2})📌 划分训练集和测试集
X = df.drop("Survived", axis=1) # 特征 #删除 Survived 列,保留所有特征列 y = df["Survived"] # 目标值 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)📌 作用: train_test_split 是 scikit-learn(sklearn)库中的方法,用于拆分训练集和测试集。 将 X 和 y 拆分为训练集(80%)和测试集(20%)。 test_size=0.2 表示 20% 数据作为测试集,80% 用于训练模型。 random_state=42 保证每次拆分结果相同,方便实验对比。
📌为什么要拆分训练集和测试集? ✅ 训练集(X_train, y_train) 用于训练机器学习模型 模型从训练数据中学习规律 ✅ 测试集(X_test, y_test) 用于评估模型的泛化能力 不能用训练数据评估,否则会过拟合! 📌 举例 如果用训练数据评估模型,可能会得到 99% 准确率,但这只是“记住”了数据,并无法对新数据进行准确预测(过拟合)。 使用测试数据可以真正衡量模型是否能推广到新数据上。
📌 5. 训练不同模型
在 sklearn 中,我们可以使用 不同的机器学习模型 来训练数据:
📌 逻辑回归
适用场景
逻辑回归适用于二分类任务(如生还 vs. 未生还)适用于数据线性可分的情况解释性强,可以提供各个特征对结果的影响权重✅ 逻辑回归能提供较快、稳定的分类,但可能无法捕捉复杂的非线性关系。
model_lr = LogisticRegression() model_lr.fit(X_train, y_train) y_pred_lr = model_lr.predict(X_test) accuracy_lr = accuracy_score(y_test, y_pred_lr) print(f"逻辑回归准确率: {accuracy_lr:.2f}")输出示例:
逻辑回归准确率: 0.81📌 决策树
适用场景
决策树适用于非线性数据(如不同等级船舱对生还率的影响可能是非线性的)具有可解释性,可以绘制树状图来分析决策过程但容易过拟合,深度太大会记住训练数据,而泛化能力下降 model_dt = DecisionTreeClassifier(max_depth=4) model_dt.fit(X_train, y_train) y_pred_dt = model_dt.predict(X_test) accuracy_dt = accuracy_score(y_test, y_pred_dt) print(f"决策树准确率: {accuracy_dt:.2f}")输出示例:
决策树准确率: 0.80📌 随机森林
适用场景
随机森林是集成学习方法,使用多棵决策树进行预测对抗过拟合:相比单个决策树,随机森林更稳定,泛化能力更强适用于高维度数据,能自动选择重要特征✅ 随机森林通常比单一决策树更稳健,适用于大部分分类任务!
model_rf = RandomForestClassifier(n_estimators=100, random_state=42) model_rf.fit(X_train, y_train) y_pred_rf = model_rf.predict(X_test) accuracy_rf = accuracy_score(y_test, y_pred_rf) print(f"随机森林准确率: {accuracy_rf:.2f}")输出示例:
随机森林准确率: 0.82✅ 模型对比
模型准确率逻辑回归0.81决策树0.80随机森林0.82📌 哪个模型表现最好?
📌 6. 结果分析
📌 查看随机森林模型的混淆矩阵
cm = confusion_matrix(y_test, y_pred_rf) sns.heatmap(cm, annot=True, cmap="Blues", fmt="d") plt.xlabel("预测值") plt.ylabel("真实值") plt.title("随机森林混淆矩阵") plt.show()✅ 解释
左上角 TN(True Negative)= 90:真实类别是 0,模型也预测为 0(正确分类)右上角 FP(False Positive)= 15:真实类别是 0,但模型错误地预测成 1(误报)左下角 FN(False Negative)= 18:真实类别是 1,但模型错误地预测成 0(漏报)右下角 TP(True Positive)= 56:真实类别是 1,模型也预测为 1(正确分类)📌后续可以对混淆矩阵作进一步分析!
📌 7. 总结
📌 你学到了什么? ✅ 数据清理:处理缺失值、转换类别变量 ✅ 可视化分析:不同因素(性别、船舱)对生还率的影响 ✅ 机器学习模型训练:逻辑回归、决策树、随机森林 ✅ 模型对比:哪个模型最适合生存预测?
机器学习入门实战4-基本模型由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“机器学习入门实战4-基本模型”
上一篇
langchain应用-RAG
下一篇
BSD协议栈:UDP输入