You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

泰坦尼克号数据集单乘客多模型生存概率预测实现方法

泰坦尼克号多模型生存概率预测扩展方案

代码扩展实现

无需改动原有建模逻辑,仅做最小补充即可实现需求,所有原有类名、API、处理流程完全保持不变:

  1. 标准化阶段保存训练集指定列的均值、标准差,确保单样本预测时使用和训练阶段完全一致的标准化尺度
  2. 初始化svm.SVC时传入probability=True参数(不改变原有类名),开启概率预测能力
  3. 封装预测函数,完成索引校验、特征预处理、多模型概率提取、指定格式输出

完整扩展后代码如下:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import svm
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score

# 1. 原有数据预处理流程保持不变
df = pd.read_csv('train.csv')
df = df.drop(['Ticket', 'Cabin', 'PassengerId', 'Name'], axis=1)
df['Age'] = df['Age'].fillna(df['Age'].mean())
df = pd.get_dummies(df, columns=['Sex', 'Pclass', 'Embarked'], drop_first=True)

# 2. 原有数据集划分流程保持不变
X = df.drop('Survived', axis=1)
y = df['Survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 原有特征标准化流程补充:保存训练集统计量,用于后续单样本标准化
scale_cols = ['Age', 'Fare', 'SibSp', 'Parch']
train_mean = X_train[scale_cols].mean()
train_std = X_train[scale_cols].std()
X_train[scale_cols] = (X_train[scale_cols] - train_mean) / train_std
X_test[scale_cols] = (X_test[scale_cols] - train_mean) / train_std

# 4. 原有模型训练、准确率对比流程保持不变
models = {
    'LogisticRegression': LogisticRegression(),
    'SVC': svm.SVC(probability=True),
    'KNeighborsClassifier': KNeighborsClassifier(),
    'GaussianNB': GaussianNB(),
    'GradientBoostingClassifier': GradientBoostingClassifier()
}

for name, model in models.items():
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    acc = accuracy_score(y_test, y_pred)
    print(f"{name}准确率:{round(acc*100,2)}%")

# ------------------- 扩展功能部分 -------------------
def predict_passenger_survival(N):
    # 校验索引合法性
    if N not in X.index:
        return f"索引{N}不存在于处理后的数据集中,无法预测"
    # 提取样本并按训练集规则做标准化
    passenger_feat = X.loc[[N]].copy()
    passenger_feat[scale_cols] = (passenger_feat[scale_cols] - train_mean) / train_std
    # 提取各模型生存概率(predict_proba返回[未生存概率, 生存概率],取索引1的值)
    prob_map = {}
    for model_name, clf in models.items():
        survival_prob = clf.predict_proba(passenger_feat)[0][1]
        prob_map[model_name] = round(survival_prob * 100)
    # 按指定格式拼接输出
    return f"索引为{N}的乘客,LogisticRegression预测生存概率为{prob_map['LogisticRegression']}%,SVC预测为{prob_map['SVC']}%,KNeighborsClassifier预测为{prob_map['KNeighborsClassifier']}%,GaussianNB预测为{prob_map['GaussianNB']}%,GradientBoostingClassifier预测为{prob_map['GradientBoostingClassifier']}%"

# 调用示例:预测索引为5的乘客服从概率
print(predict_passenger_survival(5))

功能适用范围说明

该功能不支持无前置处理的任意乘客预测,具体规则如下:

  • 对于train.csv中存在、且经过预处理后保留在特征集X中的乘客:无论该样本被划分到训练集还是测试集,只要传入的索引N在X.index范围内,都可以直接调用函数输出可靠的预测概率
  • 对于数据集外的新乘客:无法通过索引直接调用预测,必须严格对齐现有预处理规则:删除Ticket、Cabin、PassengerId、Name列,Age缺失值使用原训练集的Age均值填充,按照原训练集的独热编码列结构做drop_first=True的哑变量转换,再用之前保存的训练集均值、标准差对Age、Fare、SibSp、Parch做Z-score标准化,保证输入特征的维度、列顺序、数值尺度和训练集完全一致,才能得到有效预测结果,直接传入原始新数据会触发维度不匹配报错,或得到完全失真的结果。

内容的提问来源于stack exchange,提问作者zum809

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:36:16