news 2026/6/23 17:23:17

DAY26 针对Kaggle平台提交一个比赛代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DAY26 针对Kaggle平台提交一个比赛代码

今天是第一次实战,这次的目的主要是再次熟悉机器学习的训练流程,并能够在Kaggle平台上成功实现第一份作品的提交。

一、登录Kaggle并创建相应的账号

这一步利用谷歌邮箱或者是QQ邮箱均可快速实现在此不做过多赘述。

二、登录后选择Kaggle的competitions的选项进入如下界面

在相应的搜索框内搜索想查询方向的比赛,并选择心仪的比赛参加,这次我所选择的是泰坦尼克号——灾难中的机器学习。

三、进入特定比赛界面

进入特定比赛界面后,可自行根据相应的流程提交相应的作品,我本次比赛的作品要求如下:

你的提交应该是一个CSV文件,包含418行和一个头部。你可以上传zip/gz/7z的压缩包。(一般比赛方会给出相应的比赛作品格式的示例)。

本次比赛的代码:

# 读取数据 #此处读取数据时可以是相对路径也可以是绝对路径 import pandas as pd data = pd.read_csv(r'D:\FristKaggle\titanic\train.csv') data.info() # 列名、非空值、数据类型 data.shape # (行数, 列数) data的属性 data.columns # 所有列名 data的属性 data.describe() # 数值列的基本统计量 #data["Annual Income"].dtype # 查看某一列的数据类型 data.isnull() # 布尔矩阵显示缺失值,这个方法返回一个布尔矩阵,其中True表示对应位置的值是缺失值,False表示对应位置的值不是缺失值。 data.isnull().sum() # 每列缺失值计数,sum方法为求每一列的和 此外此方法可验证缺失值是否补全 #预处理消除不必要的警告 import warnings warnings.filterwarnings('ignore') # 在填补缺失值后、独热编码前添加: print("\n处理高基数特征...") # 1. 删除无用列 data = data.drop(['PassengerId', 'Name', 'Ticket'], axis=1) # 2. Cabin列处理:由于缺失太多(204/891),提取首字母或删除 data['Cabin'] = data['Cabin'].fillna('Unknown') # 或者只保留首字母 data['Cabin'] = data['Cabin'].str[0] # 3. 然后进行独热编码,但只对类别少的列 # 重新定义离散变量列表,不包括已删除的列 discrete_lists = [] for discrete_features in data.columns: if data[discrete_features].dtype == 'object': # 只对类别数小于10的列进行独热编码 unique_count = data[discrete_features].nunique() print(f"列 '{discrete_features}' 有 {unique_count} 个唯一值") if unique_count < 10: # 只编码类别少的列 discrete_lists.append(discrete_features) else: print(f" -> 跳过 {discrete_features},类别太多") # 第二步 填补缺失值(离散+连续) 先填补缺失值可以避免独热编码后补全的众数值为0的问题 for i in data.columns: # 找到为数值型的列(连续变量) if data[i].dtype != 'object': # 找到为数值型的列 if data[i].isnull().sum() > 0: # 找到存在缺失值的列 #计算该列的均值 mean_value = data[i].mean() #用均值填充缺失值 data[i].fillna(mean_value, inplace=True) # 找到为非数值型的列(离散变量) else: if data[i].isnull().sum() > 0: # 找到存在缺失值的列 # 计算该列的众数(出现频率最高的值) mode_value = data[i].mode()[0] # mode()返回一个Series,取第一个众数 print(f"列 '{i}' 的众数是: {mode_value}") # 可以查看众数值 # 用众数填充缺失值 data[i].fillna(mode_value, inplace=True) #第三步对离散变量进行one-hot编码 # 找到离散变量 discrete_lists = [] # 新建一个空列表,用于存放离散变量名 for discrete_features in data.columns: if data[discrete_features].dtype == 'object': discrete_lists.append(discrete_features) # 离散变量独热编码 one_hot_data = pd.get_dummies(data, columns=discrete_lists, drop_first=True) #获得所有独热编码后的新特征名 方便后续对独热编码后的变量转化为int型 #list_append存放独热编码后新增的特征名 #one_hot_data.columns.difference(data.columns)这个操作是​​获取两个相同集合的差集 list_append = one_hot_data.columns.difference(data.columns) # 接着之前的,对bool特征进行类型转换 for i in list_append: one_hot_data[i] = one_hot_data[i].astype(int) # 这里的i就是独热编码后的特征名 one_hot_data.head() data.isnull().sum() # 划分训练集和测试机 from sklearn.model_selection import train_test_split X = one_hot_data.drop(['Survived'], axis=1) # 特征,axis=1表示按列删除 y = one_hot_data['Survived'] # 标签 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 划分数据集,20%作为测试集,随机种子为42 # 训练集和测试集的形状 print(f"训练集形状: {X_train.shape}, 测试集形状: {X_test.shape}") # 打印训练集和测试集的形状 from sklearn.svm import SVC #支持向量机分类器 from sklearn.neighbors import KNeighborsClassifier #K近邻分类器 from sklearn.linear_model import LogisticRegression #逻辑回归分类器 import xgboost as xgb #XGBoost分类器 import lightgbm as lgb #LightGBM分类器 from sklearn.ensemble import RandomForestClassifier #随机森林分类器 from catboost import CatBoostClassifier #CatBoost分类器 from sklearn.tree import DecisionTreeClassifier #决策树分类器 from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯分类器 from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标 from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵 import warnings #用于忽略警告信息 warnings.filterwarnings("ignore") # 忽略所有警告信息 # KNN knn_model = KNeighborsClassifier() knn_model.fit(X_train, y_train) knn_pred = knn_model.predict(X_test) print("\nKNN 分类报告:") print(classification_report(y_test, knn_pred)) print("KNN 混淆矩阵:") print(confusion_matrix(y_test, knn_pred)) knn_accuracy = accuracy_score(y_test, knn_pred) knn_precision = precision_score(y_test, knn_pred) knn_recall = recall_score(y_test, knn_pred) knn_f1 = f1_score(y_test, knn_pred) print("KNN 模型评估指标:") print(f"准确率: {knn_accuracy:.4f}") print(f"精确率: {knn_precision:.4f}") print(f"召回率: {knn_recall:.4f}") print(f"F1 值: {knn_f1:.4f}") # 随机森林 rf_model = RandomForestClassifier(random_state=42) rf_model.fit(X_train, y_train) rf_pred = rf_model.predict(X_test) print("\n随机森林 分类报告:") print(classification_report(y_test, rf_pred)) print("随机森林 混淆矩阵:") print(confusion_matrix(y_test, rf_pred)) rf_accuracy = accuracy_score(y_test, rf_pred) rf_precision = precision_score(y_test, rf_pred) rf_recall = recall_score(y_test, rf_pred) rf_f1 = f1_score(y_test, rf_pred) print("随机森林 模型评估指标:") print(f"准确率: {rf_accuracy:.4f}") print(f"精确率: {rf_precision:.4f}") print(f"召回率: {rf_recall:.4f}") print(f"F1 值: {rf_f1:.4f}") # 读取测试集数据 test_data = pd.read_csv(r'D:\FristKaggle\titanic\test.csv') # 保存PassengerId用于最终提交 passenger_ids = test_data['PassengerId'].copy() # 对测试集进行与训练集相同的预处理 # 1. 删除无用列(与训练集保持一致) test_data = test_data.drop(['PassengerId', 'Name', 'Ticket'], axis=1) # 2. Cabin列处理(与训练集保持一致) test_data['Cabin'] = test_data['Cabin'].fillna('Unknown') test_data['Cabin'] = test_data['Cabin'].str[0] # 3. 填补缺失值(使用与训练集相同的逻辑) for i in test_data.columns: if test_data[i].dtype != 'object': # 数值型列 if test_data[i].isnull().sum() > 0: # 使用训练集的均值填充,避免数据泄露 if i in data.columns: # 确保列存在于训练集中 mean_value = data[i].mean() test_data[i].fillna(mean_value, inplace=True) else: test_data[i].fillna(test_data[i].mean(), inplace=True) else: # 非数值型列 if test_data[i].isnull().sum() > 0: # 使用训练集的众数填充 if i in data.columns: mode_value = data[i].mode()[0] test_data[i].fillna(mode_value, inplace=True) else: test_data[i].fillna(test_data[i].mode()[0], inplace=True) # 4. 独热编码(使用与训练集相同的列) # 确保测试集与训练集的列一致 test_one_hot = pd.get_dummies(test_data, columns=discrete_lists, drop_first=True) # 添加训练集中有但测试集中没有的列,并填充0 missing_cols = set(X_train.columns) - set(test_one_hot.columns) for col in missing_cols: test_one_hot[col] = 0 # 确保列的顺序与训练集一致 test_one_hot = test_one_hot[X_train.columns] # 5. 选择最佳模型进行预测(以随机森林为例) # 您可以根据上面的评估结果选择表现最好的模型 best_model = rf_model # 这里使用随机森林,您可以选择其他表现更好的模型 # 进行预测 test_predictions = best_model.predict(test_one_hot) # 6. 创建提交文件 submission = pd.DataFrame({ 'PassengerId': passenger_ids, 'Survived': test_predictions }) # 7. 保存为CSV文件 submission.to_csv('titanic_predictions.csv', index=False) print("预测完成!结果已保存到 'titanic_predictions.csv'") print(f"提交文件形状: {submission.shape}") print("\n前10条预测结果:") print(submission.head(10))

注:本次比赛的代码只是为了熟悉一下Kaggle平台,只是做了一些简单处理,仍然有很大的改进空间。

最终结果:

@浙大疏锦行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 14:53:40

字符设备驱动(5)

一 、简介字符设备与杂项设备的区别&#xff1a; &#xff08;1&#xff09;杂项设备的主设备号是固定为10&#xff0c;学习字符类设备就需要自己或者系统来分配 &#xff08;2&#xff09;杂项设备可以自动生成设备节点&#xff0c;字符设备需要自己生成设备节点二、申请设备号…

作者头像 李华
网站建设 2026/6/23 8:34:41

Flutter 表单开发实战:表单验证、输入格式化与提交处理

Flutter 表单开发实战&#xff1a;表单验证、输入格式化与提交处理 在 Flutter 应用开发中&#xff0c;表单是承接用户输入的核心组件&#xff0c;广泛应用于登录注册、信息提交、数据编辑等场景。一个高质量的表单不仅需要美观的布局&#xff0c;更要具备严谨的验证逻辑、友好…

作者头像 李华
网站建设 2026/6/22 3:33:20

【光子 AI】AI Agent 架构师 / 技术专家 10 道必考面试题和必过答案完整讲解 1

【光子 AI】AI Agent 架构师 / 技术专家 10 道必考面试题和必过答案完整讲解 文章目录 【光子 AI】AI Agent 架构师 / 技术专家 10 道必考面试题和必过答案完整讲解 一、请你整体设计一个企业级 AI Agent 平台的核心架构,并说明关键技术选型 【考察重点】 【必过答案要点】 【…

作者头像 李华
网站建设 2026/6/22 10:37:14

Flutter 主题与深色模式:全局样式统一与动态切换

Flutter 主题与深色模式&#xff1a;全局样式统一与动态切换 一、引言 在 Flutter 应用开发中&#xff0c;主题&#xff08;Theme&#xff09;是实现 UI 风格统一的核心机制&#xff0c;而深色模式&#xff08;Dark Mode&#xff09;作为当前主流的交互需求&#xff0c;能有效…

作者头像 李华
网站建设 2026/6/23 7:29:20

基于 GEE 使用 Sentinel-2 遥感影像数据反演水体叶绿素 a 质量浓度

目录 一、前言 二、初始化设置 三、影像预处理 四、影像集合加载与预处理 五、波段比计算与叶绿素浓度反演 六、统计分析与结果输出 七、结果可视化 八、核心逻辑与应用场景 九、注意事项 十、运行结果 若觉得代码对您的研究 / 项目有帮助&#xff0c;欢迎点击打赏支…

作者头像 李华
网站建设 2026/6/23 7:54:18

小红书数据采集架构解析与工程实践

小红书数据采集架构解析与工程实践 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 在内容营销和数据分析需求日益增长的背景下&#xff0c;小红书平台已成为品牌洞察和用户研…

作者头像 李华