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

复习日
仔细回顾一下之前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`
`
相关推荐
涛涛北京几秒前
【强化学习实验】- 策略梯度算法
人工智能·算法
Fairy要carry6 分钟前
2025/12/15英语打卡
人工智能
weixin_4462608510 分钟前
《从零开始构建智能体》—— 实践与理论结合的智能体入门指南
人工智能
大连好光景13 分钟前
Python打日志
运维·python·运维开发
新加坡内哥谈技术17 分钟前
Claude 代理技能:从第一性原理出发的深度解析
人工智能
syt_biancheng18 分钟前
博客系统全流程测试总结
python·selenium·测试用例·压力测试·postman
长空任鸟飞_阿康24 分钟前
FastAPI 入门指南
人工智能
Pyeako29 分钟前
机器学习之KNN算法
人工智能·算法·机器学习
Mxsoft61929 分钟前
我发现知识图谱节点关系缺失致诊断不准,自动关系抽取补全救场
人工智能
可信计算37 分钟前
【算法随想】一种基于“视觉表征图”拓扑变化的NLP序列预测新范式
人工智能·笔记·python·算法·自然语言处理