Python_day22

DAY 22 复习日

复习日

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

作业:

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

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

一、Kaggle 基础使用步骤

  1. 注册与登录

    • 访问 Kaggle 官网 ,通过 Google 账号或邮箱注册。
    • 验证邮箱后完成账户激活。
  2. 熟悉界面

    • Competitions(竞赛):参与数据科学竞赛,赢取奖金或提升技能。
    • Datasets(数据集):搜索或上传公开数据集。
    • Notebooks(代码笔记本):基于 Jupyter Notebook 的在线编程环境,支持 Python/R。
    • Discussions(论坛):与社区交流问题或分享经验。
  3. 创建/运行 Notebook

    • 点击 New Notebook 创建代码环境,支持 GPU/TPU 加速。
    • 挂载数据集:通过 Add Data 添加数据集到 Notebook。
  4. 提交竞赛结果

    • 在竞赛页面下载数据,训练模型后生成预测结果文件(如 CSV)。
    • 通过竞赛页面的 Submit Predictions 上传结果,查看排名。

二、使用注意点

1. 数据隐私与合规
  • 避免敏感数据:上传数据集时,确保不包含个人信息或受版权保护的内容。
  • 竞赛数据保密:禁止在竞赛期间将数据集分享到外部平台。
2. 资源限制
  • GPU/TPU 使用:免费账户每周有约 30 小时的 GPU 和 20 小时的 TPU 配额,超限后需等待重置。
  • 会话时长:Notebook 无操作 20 分钟后会自动停止,需手动重启。
  • 存储限制:每个 Notebook 最大存储 20GB(含数据集)。
3. 代码与 Notebook 优化
  • 依赖安装:在 Notebook 中通过 !pip install 安装库时,建议在代码开头一次性安装。
  • 开启 GPU:在 Notebook 设置中手动启用 GPU/TPU,否则默认使用 CPU。
  • 数据路径:挂载数据集后,数据路径通常为 /kaggle/input/[数据集名称]/
  • 版本保存:定期点击 Save Version 备份代码,避免丢失进度。
4. 竞赛注意事项
  • 规则阅读:仔细阅读竞赛规则,避免因提交格式错误或违规被取消资格。
  • 团队合作:允许组队参赛,但需在提交前合并团队。
  • 公平性:禁止多账号刷分或使用非公开数据。
5. 社区互动
  • 提问技巧:在论坛提问时,提供清晰的背景、代码错误信息和尝试过的解决方法。
  • 引用来源:使用他人代码或数据时,注明来源并遵守许可证(如 CC0、MIT 等)。
6. 性能与效率
  • 大数据处理:使用 pandas 时优先选择分块读取(chunksize)或高效格式(如 parquet)。
  • 内存管理:避免在 Notebook 中加载超大数据,可使用 dtype 优化或 del 释放内存。
  • 缓存中间结果:将预处理后的数据保存为文件,减少重复计算。

三、其他实用技巧

  • 学习资源:利用 Kaggle Learn(短期免费课程)和公开 Notebook 学习模型构建技巧。
  • Kaggle API:通过命令行工具批量下载数据集或提交结果(需生成 API Token)。
  • 参与社区活动:关注 Kernels(优质代码)、Datasets 和 Discussions 的 Trending 内容,学习最新方法。

常见问题解决

  • 数据集加载失败:检查路径是否正确,或通过 ls /kaggle/input 查看已挂载数据。
  • GPU 未生效:在 Notebook 设置中确认已开启 GPU,并检查是否安装了 GPU 版本的库(如 tensorflow-gpu)。
  • 内存不足:减少批量大小(batch size)或使用更轻量级的模型。

Kaggle 的比赛如何运作

  1. 加入比赛
    阅读挑战赛描述,接受比赛规则并访问比赛数据集。
  2. 开始工作
    下载数据,在本地或 Kaggle Notebooks(我们的免设置、可自定义的 Jupyter Notebooks 环境,带有免费 GPU)上构建模型,并生成预测文件。
  3. 提交 将您的预测作为提交
    上传到 Kaggle 并获得准确率分数。
  4. 查看排行榜
    查看您的模型在我们的排行榜上与其他 Kaggler 的排名。
  5. 提高你的分数
    查看论坛,找到来自其他竞争对手的大量教程和见解。

本次挑战——泰坦尼克号 - 从灾难中学习机器学习

泰坦尼克号的沉没是历史上最臭名昭著的沉船事件之一。

1912 年 4 月 15 日,在她的处女航中,被广泛认为“永不沉没”的 RMS 泰坦尼克号在与冰山相撞后沉没。不幸的是,船上的每个人都没有足够的救生艇,导致 1502 名乘客和船员中有 2224 人死亡。

虽然生存下来有一些运气因素,但似乎某些群体比其他人更有可能生存下来。

在本次挑战赛中,我们要求您构建一个预测模型,使用乘客数据(即姓名、年龄、性别、社会经济阶层等)回答“什么样的人更有可能生存”这个问题。

我将在本次比赛中使用哪些数据?

在本次比赛中,您将可以访问两个类似的数据集,其中包括乘客信息,如姓名、年龄、性别、社会经济阶层等。一个数据集的标题为,另一个数据集的标题为 。train.csvtest.csv

Train.csv将包含机上乘客子集(准确地说是 891 人)的详细信息,重要的是,将揭示他们是否幸存,也称为“基本事实”。

该数据集包含类似的信息,但没有透露每位乘客的 “真实情况”。预测这些结果是你的工作。test.csv

使用您在数据中找到的模式,预测机上其他 418 名乘客(在 中找到)是否幸存下来。train.csvtest.csv

查看 “Data” 选项卡以进一步探索数据集。一旦您认为您已经创建了一个有竞争力的模型,请将其提交给 Kaggle,以查看您的模型在我们的排行榜上与其他 Kaggler 的排名。

数据集描述

概述

数据已分为两组:

  • 训练集 (train.csv)
  • 测试集 (test.csv)

训练集应用于构建机器学习模型。对于训练集,我们提供每位乘客的结果(也称为“真实值”)。您的模型将基于乘客的性别和舱位等“特征”。您还可以使用特征工程来创建新特征。

应该使用测试集来查看模型在看不见的数据上的表现。对于测试集,我们不会提供每位乘客的 Ground Truth。预测这些结果是你的工作。对于测试集中的每个乘客,使用您训练的模型来预测他们是否在泰坦尼克号沉没后幸存下来。

我们还包括 gender_submission.csv,这是一组假设所有且只有女性乘客幸存的预测,作为提交文件应该是什么样子的示例。

数据字典

变量定义钥匙
生存生存0 = 否,1 = 是
p类机票舱位1 = 第 1 个,2 = 第 2 个,3 = 第 3 个
年龄年龄(岁)
国际生物安全指数# 泰坦尼克号上的兄弟姐妹/配偶
帕奇# 泰坦尼克号上的父母/孩子
票号
票价乘客票价
舱位号
登船登船港口C = 瑟堡,Q = 皇后镇,S = 南安普敦

变量注释

pclass:社会经济地位 (SES)
的代理 1st = 上
2nd = 中
3rd = 下

年龄:如果年龄小于 1,则年龄为分数。如果年龄是估计的,是不是以 xx.5

sibsp 的形式:数据集是这样定义家庭关系的......
兄弟姐妹 = 兄弟、姐妹、继兄弟、继姐妹
配偶 = 丈夫、妻子(情妇和未婚夫被忽略)

parch:数据集以这种方式定义家庭关系......
父母 = 母亲,父亲
孩子 = 女儿、儿子、继女、继子
有些孩子只与保姆一起旅行,因此他们 parch=0。

具体步骤

总览

[加载数据] → [预处理] → [特征工程] → [训练模型]  
                     ↓              ↑  
             [获取已训练预处理器] → [提取特征名称] → [合并分析]

具体代码

1. 环境准备

# ========== 1. 环境准备 ==========
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV, StratifiedKFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import OneHotEncoder, RobustScaler
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from imblearn.over_sampling import SMOTE
from imblearn.pipeline import make_pipeline as imb_make_pipeline
import warnings
warnings.filterwarnings('ignore')

2. 数据加载与清洗

# ========== 2. 数据加载与清洗 ==========
def load_data(path):"""加载并初步处理数据"""df = pd.read_csv(path)# 删除无关特征 [改进1:增加特征删除说明]df.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)return dftrain = load_data('train.csv')
test = load_data('test.csv')

3. 数据预处理管道

# ========== 3. 数据预处理管道 ==========
# [改进2:增加鲁棒缩放器]
cat_features = ['Sex', 'Embarked']
num_features = ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare']preprocessor = ColumnTransformer(transformers=[('num', Pipeline(steps=[('imputer', SimpleImputer(strategy='median')),('scaler', RobustScaler())  # 新增特征缩放]), num_features),('cat', Pipeline(steps=[('imputer', SimpleImputer(strategy='most_frequent')),('encoder', OneHotEncoder(handle_unknown='ignore'))]), cat_features)])

 4. 特征工程增强

# ========== 4. 特征工程增强 ==========
def feature_engineering(df):"""自定义特征工程 [改进3:增加新特征]"""# 基础特征df['FamilySize'] = df['SibSp'] + df['Parch'] + 1df['IsAlone'] = (df['FamilySize'] == 1).astype(int)# 新增票价分段特征df['FareCategory'] = pd.cut(df['Fare'],bins=[0, 10, 50, 100, 600],labels=[0, 1, 2, 3]).astype(float)# 新增年龄分段特征df['AgeGroup'] = pd.cut(df['Age'],bins=[0, 12, 18, 60, 100],labels=['Child', 'Teen', 'Adult', 'Elderly']).astype(object)return dftrain = feature_engineering(train)
test = feature_engineering(test)

 5. 数据集划分策略优化

# ========== 5. 数据集划分策略优化 ==========
# [改进4:使用分层抽样]
X = train.drop('Survived', axis=1)
y = train['Survived']
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, stratify=y,  # 新增分层抽样random_state=42
)

6. 构建增强管道

# ========== 6. 构建增强管道 ==========
# [改进5:优化网格搜索参数]
pipeline = imb_make_pipeline(preprocessor,SMOTE(random_state=42),RandomForestClassifier(random_state=42)
)param_grid = {'randomforestclassifier__n_estimators': [100, 200, 300],  # 扩展参数范围'randomforestclassifier__max_depth': [5, 7, 9, None],'randomforestclassifier__min_samples_split': [2, 3, 5],'randomforestclassifier__max_features': ['sqrt', 'log2'],  # 新增参数'smote__k_neighbors': [3, 5]  # 优化SMOTE参数
}

 7. 模型训练与调参优化

# ========== 7. 模型训练与调参优化 ==========
# [改进6:使用分层交叉验证]
grid_search = GridSearchCV(estimator=pipeline,param_grid=param_grid,scoring='f1',cv=StratifiedKFold(n_splits=5, shuffle=True, random_state=42),  # 优化交叉验证n_jobs=-1,verbose=1  # 新增训练过程显示
)grid_search.fit(X_train, y_train)

8. 模型评估增强

# ========== 8. 模型评估增强 ==========
best_model = grid_search.best_estimator_
val_pred = best_model.predict(X_val)print("\n=== 最优参数 ===")
print(grid_search.best_params_)print("\n=== 验证集评估 ===")
print(f"准确率: {accuracy_score(y_val, val_pred):.2f}")
print(f"精确率: {precision_score(y_val, val_pred):.2f}") 
print(f"召回率: {recall_score(y_val, val_pred):.2f}")
print(f"F1分数: {f1_score(y_val, val_pred):.2f}")

9. 测试集处理

# ========== 9. 测试集处理 ==========
# [改进7:确保测试集处理一致性]
test_passenger_ids = pd.read_csv('test.csv')['PassengerId']
test_pred = best_model.predict(test)

10. 结果保存与特征分析

# ========== 10. 结果保存与特征分析 ==========
submission = pd.DataFrame({'PassengerId': test_passenger_ids,'Survived': test_pred
})
submission.to_csv('titanic_submission.csv', index=False)# 特征重要性分析(修正版)
try:# 获取训练好的预处理器fitted_preprocessor = best_model.named_steps['columntransformer']# 数值特征(包含新增特征)num_feats = num_features + ['FamilySize', 'IsAlone', 'FareCategory']# 分类特征编码后的名称cat_pipeline = fitted_preprocessor.named_transformers_['cat']encoded_cat_feats = cat_pipeline.named_steps['encoder'].get_feature_names_out(cat_features)# 合并所有特征名称all_feature_names = np.concatenate([num_feats, encoded_cat_feats])# 获取重要性importances = best_model.named_steps['randomforestclassifier'].feature_importances_# 创建DataFrameimportance_df = pd.DataFrame({'Feature': all_feature_names,'Importance': importances}).sort_values('Importance', ascending=False)print("\n=== 特征重要性 Top 10 ===")print(importance_df.head(10))except Exception as e:print(f"特征分析失败: {str(e)}")print("可能原因:")print("- sklearn版本过低(需>=1.0),请升级:pip install --upgrade scikit-learn")print("- 预处理器未正确训练")print("\n=== 提交文件已生成 ===")

最终提交

您的提交应为包含 418 行和标题的 CSV 文件。您可以上传 zip/gz/7z 存档。

@浙大疏锦行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软件测试】基于项目驱动的功能测试报告(持续更新)

目录 一、项目的介绍 1.1 项目背景 二、测试目标 2.1 用户服务模块 2.1.1 用户注册模块 2.1.1.1 测试点 2.1.1.2 边界值分析法(等价类+边界值) 2.1.1.2.1 有效等价类 2.1.1.2.2 无效等价类 2.1.1.2.3 边界值 2.1.1.2.4 测试用例设计 2.1.2 用户登录 2.1.2.1 测试…

QT中多线程的实现

采用官方推荐的 QObject::moveToThread 方式实现(相比继承 QThread 更灵活),包含耗时任务执行、主线程通信、线程安全退出等核心功能。 环境说明 Qt 版本:Qt 5.15 或 Qt 6(兼容)项目类型:GUI …

从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践

前言 从最初对人工智能的懵懂认知,到逐渐踏入Prompt工程的世界,我们一路探索,从私有化部署的实际场景,到对DeepSeek技术的全面解读,再逐步深入到NL2SQL、知识图谱构建、RAG知识库设计,以及ChatBI这些高阶应…

maven如何搭建自己的私服(LINUX版)?

环境准备 安装 JDK :确保系统已安装 JDK 8 或更高版本。可以通过以下命令安装 JDK: 安装 OpenJDK :sudo apt update && sudo apt install openjdk-11-jdk 安装 Oracle JDK :需要添加第三方仓库,例如 WebUpd8 …

armv7 backtrace

ref: ARM Cortex-M3/M4/M7 Hardfault异常分析_arm hardfault-CSDN博客

探索 C++23 的 views::cartesian_product

文章目录 一、背景与动机二、基本概念与语法三、使用示例四、特点与优势五、性能与优化六、与 P2374R4 的关系七、编译器支持八、总结 C23 为我们带来了一系列令人兴奋的新特性,其中 views::cartesian_product 是一个非常实用且强大的功能,它允许我们轻…

SHAP分析!Transformer-BiLSTM组合模型SHAP分析,模型可解释不在发愁!

SHAP分析!Transformer-BiLSTM组合模型SHAP分析,模型可解释不在发愁! 目录 SHAP分析!Transformer-BiLSTM组合模型SHAP分析,模型可解释不在发愁!效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于SH…

牛客周赛 Round 92-题解

牛客周赛 Round 92-题解 A-小红的签到题 code #include<iostream> #include<string> using namespace std; string s; int main() {int n;cin >> n;cout << "a_";for (int i 0; i < n - 2; i )cout << b;return 0; }B-小红的模…

Java设计模式之建造者模式:从入门到精通

1. 建造者模式概述 1.1 定义与核心概念 **建造者模式(Builder Pattern)**是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 专业术语解释表: 术语解释产品(Product)最终要构建的复杂对象建造者(Builder)定义创建产品各个…

各类有关NBA数据统计数据集大合集

这些数据我已上传大家在CSDN上直接搜索就可以&#xff01; 一、【2022-2023 NBA球员统计】数据集 关键词: 篮球 描述: 语境 该数据集每场比赛包含2022-2023常规赛NBA球员统计数据。 请注意&#xff0c;由团队更改产生了重复的球员名称。 * [2021-2022 NBA播放器统计]&#…

3、食品包装控制系统 - /自动化与控制组件/food-packaging-control

76个工业组件库示例汇总 食品包装线控制系统 这是一个用于食品包装线控制系统的自定义组件&#xff0c;提供了食品包装生产线的可视化监控与控制界面。组件采用工业风格设计&#xff0c;包含生产流程控制、实时数据监控和逻辑编程三个主要功能区域。 功能特点 工业风格UI设…

NPDP.新产品开发职业认证知识体系NPDP.BOK

第一章 新产品开发战略 1.2 战略及其层级--公司-经营--创新--新产品开发组合-新产品开发项目 “(战略能够)定义与传播一个组织的独特定位&#xff0c;说明应当如何整合组织的资源、技能与能力以获取竞争优势。”(波特&#xff0c;2008) “基于行业定位、机遇和资源,企业为实…

器件(八)—芯片封装中的开尔文源极

首先再次回顾一下MOS到底怎么导通的 在如上的结构中&#xff0c;栅极加压&#xff0c;让N和P-base间形成导电沟道&#xff0c;Vds间加正电压&#xff0c;流到N里的电子依靠这个电压一路飘洋过海&#xff0c;通过Gate给它开辟的沟道&#xff0c;从N到P-base&#xff0c;再从P-ba…

客服系统重构详细计划

# 客服系统重构详细计划 ## 第一阶段&#xff1a;系统分析与准备工作 ### 1. 代码审查和分析 (1-2周) - 全面分析现有代码结构 - 识别代码中的问题和瓶颈 - 理解当前系统的业务逻辑 - 确定可重用的组件 - 制作系统功能清单 ### 2. 技术栈升级准备 (1周) - 升级PHP版本到7…

UNet网络 图像分割模型学习

UNet 由Ronneberger等人于2015年提出&#xff0c;专门针对医学图像分割任务&#xff0c;解决了早期卷积网络在小样本数据下的效率问题和细节丢失难题。 一 核心创新 1.1对称编码器-解码器结构 实现上下文信息与高分辨率细节的双向融合 如图所示&#xff1a;编码器进行了4步&…

【造包工具】【Xcap】精讲Xcap构造分片包(IPv4、ipv6、4G\5G等pcap均可),图解超赞超详细!!!

1. 欢迎大家订阅和关注:精讲网络通信协议(OSI、TCP、IP、UDP、ARP、ICMP、DHCP、HTTP、MQTT、SSL等)知识点,专栏会持续更新中.....敬请期待! 目录 前言 1. XCap工具概念介绍 2. Xcap环境说明 2.1 新建报文组 2.2 导入数据包 2.3 查看报文组 2.4 复制删除报文组 3.…

Qt 界面优化(绘图)

目录 1. 绘图基本概念2. 绘制各种形状2.1 绘制线段2.2 绘制矩形2.3 绘制圆形2.4 绘制文本2.5 设置画笔2.6 设置画刷 3. 绘制图片3.1 绘制简单图片3.2 平移图片3.3 缩放图片3.4 旋转图片 4. 其他设置4.1 移动画家位置4.2 保存/加载画家的状态 5. 特殊的绘图设备5.1 QPixmap5.2 Q…

【计算机视觉】优化MVSNet可微分代价体以提高深度估计精度的关键技术

优化MVSNet可微分代价体以提高深度估计精度的关键技术 1. 代价体基础理论与分析1.1 标准代价体构建1.2 关键问题诊断 2. 特征表示优化2.1 多尺度特征融合2.2 注意力增强匹配 3. 代价体构建优化3.1 自适应深度假设采样3.2 可微分聚合操作改进 4. 正则化与优化策略4.1 多尺度代价…

Python中,async和with结合使用,有什么好处?

在Python的异步编程中&#xff0c;async和with的结合使用&#xff08;即async with&#xff09;为开发者提供了一种优雅且高效的资源管理模式。这种组合不仅简化了异步代码的编写&#xff0c;还显著提升了程序的健壮性和可维护性。以下是其核心优势及典型应用场景的分析&#x…

【金仓数据库征文】金仓数据库:创新驱动,引领数据库行业新未来

一、引言 在数字化转型的时代洪流中&#xff0c;数据已跃升为企业的核心资产&#xff0c;宛如企业运营与发展的 “数字命脉”。从企业日常运营的精细化管理&#xff0c;到战略决策的高瞻远瞩制定&#xff1b;从客户关系管理的深度耕耘&#xff0c;到供应链优化的全面协同&…