DAY 22 复习日kaggle泰坦里克号人员生还预测

发布于:2025-05-12 ⋅ 阅读:(26) ⋅ 点赞:(0)
复习日

仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。

作业:

自行学习参考如何使用kaggle平台写下使用注意点,并对下述比赛提交代码

kaggle泰坦里克号人员生还预测

输入

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import LabelEncoder
from sklearn.impute import SimpleImputer  # 添加这行导入
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import GradientBoostingClassifier
# 加载数据集

# 加载数据集
train_data = pd.read_csv(r'titanic/train.csv')
test_data = pd.read_csv(r'titanic/test.csv')

# 数据预处理优化
# 删除无关特征(保留原始注释)
train_data = train_data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1)
test_data = test_data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1)

# 修正缺失值处理流程
missing_cols = {
    'str': ['Embarked', 'Sex'],
    'num': ['Age', 'Fare']
}

# 统一使用训练集的统计量进行填充
imputer = {
    'str': SimpleImputer(strategy='most_frequent').fit(train_data[missing_cols['str']]),
    'num': SimpleImputer(strategy='median').fit(train_data[missing_cols['num']])
}

# 应用填充
train_data[missing_cols['str']] = imputer['str'].transform(train_data[missing_cols['str']])
test_data[missing_cols['str']] = imputer['str'].transform(test_data[missing_cols['str']])
train_data[missing_cols['num']] = imputer['num'].transform(train_data[missing_cols['num']])
test_data[missing_cols['num']] = imputer['num'].transform(test_data[missing_cols['num']])

# 特征编码优化
train_data = pd.get_dummies(train_data, columns=['Sex', 'Embarked'], drop_first=True)
# 确保测试集与训练集列对齐
test_data = pd.get_dummies(test_data, columns=['Sex', 'Embarked'], drop_first=True)
test_data = test_data.reindex(columns=train_data.columns.drop('Survived'), fill_value=0)

# 划分数据集(添加随机种子)
X = train_data.drop('Survived', axis=1)
y = train_data['Survived']
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

# 移除特征缩放(树模型不需要)
# 新增参数调优
param_grid = {
    'n_estimators': [100, 200],
    'max_depth': [None, 5, 10],
    'class_weight': [None, 'balanced']
}

rf = RandomForestClassifier(random_state=42)
grid_search = GridSearchCV(rf, param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)

best_model = grid_search.best_estimator_
val_pred = best_model.predict(X_val)
from sklearn.metrics import accuracy_score, roc_auc_score  # 添加ROC AUC指标
# 增强模型评估
print(f"\n最佳参数: {grid_search.best_params_}")
print("验证集准确率:", accuracy_score(y_val, val_pred))
print("AUC分数:", roc_auc_score(y_val, best_model.predict_proba(X_val)[:, 1]))
print("特征重要性:")
for name, importance in zip(X.columns, best_model.feature_importances_):
    print(f"{name}: {importance:.3f}")# 原导入部分保持不变,添加以下内容

# 预测并保存结果
test_pred = best_model.predict(test_data)
output = pd.DataFrame({'PassengerId': range(892, 1310), 'Survived': test_pred})
output.to_csv('submission.csv', index=False)
print("预测结果已保存为 submission.csv")


输出

最佳参数: {'class_weight': None, 'max_depth': 5, 'n_estimators': 200}
验证集准确率: 0.7932960893854749
AUC分数: 0.8412384716732543
特征重要性:
Pclass: 0.141
Age: 0.118
SibSp: 0.047
Parch: 0.037
Fare: 0.180
Sex_male: 0.438
Embarked_Q: 0.012
Embarked_S: 0.028
预测结果已保存为 submission.csv