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`
`
相关推荐
老贾专利烩1 分钟前
智能健康项链专利拆解:ECG 与 TBI 双模态监测的硬件架构与信号融合
人工智能·科技·健康医疗
无奈何杨3 分钟前
MCP Server工具参数设计与AI约束指南
人工智能
青梅主码4 分钟前
中国在世界人工智能大会上发布《人工智能全球治理行动计划》:中美 AI 竞争白热化,贸易紧张局势下的全球治理新篇章
人工智能
都叫我大帅哥8 分钟前
决策树:从零开始的机器学习“算命大师”修炼手册
python·机器学习
这里有鱼汤8 分钟前
首个支持A股的AI多智能体金融系统,来了
前端·python
loopdeloop16 分钟前
机器学习、深度学习与数据挖掘:核心技术差异、应用场景与工程实践指南
深度学习·机器学习·数据挖掘
loopdeloop17 分钟前
机器学习、深度学习与数据挖掘:三大技术领域的深度解析
深度学习·机器学习·数据挖掘
云霄IT27 分钟前
python使用ffmpeg录制rtmp/m3u8推流视频并按ctrl+c实现优雅退出
python·ffmpeg·音视频
都叫我大帅哥33 分钟前
我给大模型装上“记忆黄金券”:LangChain的ConversationSummaryBufferMemory全解析
python·langchain·ai编程
桃子叔叔35 分钟前
28天0基础前端工程师完成Flask接口编写
前端·python·flask