首页 > 解决方案 > 无论内核类型或文件名如何,从命令行向 Kaggle 比赛提交结果,无论是在 Kaggle 内部还是外部

问题描述

在 Kaggle 中:无论内核类型或文件名如何,我如何将我的结果提交给 Kaggle 比赛?

如果我在 Kaggle 以外的笔记本(Colab、Jupyter、Paperspace 等)中?

标签: google-colaboratorykaggle

解决方案


简介(可以跳过这部分)

我正在四处寻找一种方法来做到这一点。特别是,能够在笔记本中的任何位置提交(以便您可以测试不同的方法)、具有任何名称的文件(以保持事物分开)和任意次数(尊重 Kaggle 限制)。

我发现很多网站解释了这个过程,比如

Making Submission
1. Hit the "Publish" button at the top of your notebook screen.
If you have written an output file, then you have an "Output" tab.
2. Output > Submit to Competition

然而,他们未能阐明内核必须是“脚本”类型而不是“笔记本”类型。

这有一些我尚未完全探索的局限性。

我只是希望能够提交笔记本中的任何文件,就像其中的任何其他命令一样。


过程

好吧,这是我想出的过程。

欢迎提出建议、错误、评论、改进。具体来说,我想知道为什么这种方法并不比上述方法好。

过程:

  1. 安装所需的库
  2. 提供你的 kaggle 凭证
    • 使用文件 kaggle.json 或
    • 使用您的 kaggle 凭据设置一些环境变量
  3. 使用简单的命令提交。

问:我在哪里可以获得我的 kaggle 凭证?

答:您可以从https://www.kaggle.com > 'Account' > "Create new API token"获取它们


1.安装需要的库

# Install required libraries
!pip install --upgrade pip
!pip install kaggle --upgrade

2. 提供你的 kaggle 凭证——用你的 kaggle 凭证设置一些环境变量

# Add your PRIVATE credentials
# Do not use "!export KAGGLE_USERNAME= ..." OR "" around your credential
%env KAGGLE_USERNAME=abc
%env KAGGLE_KEY=12341341

# Verify
!export -p | grep KAGGLE_USERNAME
!export -p | grep KAGGLE_KEY

请参阅下面的注释


2. 提供你的 kaggle 凭证——使用文件 kaggle.json

%mkdir --parents /root/.kaggle/
%cp /kaggle/input/<your_private_dataset>/kaggle.json   /root/.kaggle/
!chmod 600 /root/.kaggle/kaggle.json

如何获取文件取决于您。

一种简单的方法是:

  1. 将 kaggle.json 下载到您的计算机
  2. 在 kaggle 中,创建一个私有数据集(Your_Profile > Datasets > New Dataset)
  3. 将 kaggle.json 添加到该数据集
  4. 将私有数据集添加到您的笔记本(数据 > 添加数据 > 数据集 > 您的数据集)

这可能看起来有点麻烦,但是您的 API 凭据迟早可能会更改,并且在某一点(数据集)更新文件将在您的所有笔记本中更新它。


3. 用一个简单的命令提交。

<competition-name>是比赛的代号。您可以从比赛的 url 或比赛页面中的“我的提交”部分获取它。

# Submit
!kaggle competitions submit -c <competition-name> -f submission.csv -m "Notes"
# example:
!kaggle competitions submit -c bike-sharing-demand -f submission.csv -m "Notes"

# View results
!kaggle competitions submissions -c <competition-name>
# example:
!kaggle competitions submissions -c bike-sharing-demand 

注意: 如果您太在意您的凭证的安全性和/或想要共享内核,那么您可以在“控制台”上而不是在笔记本中输入带有您的凭证的 2 个命令(下面的示例)。它们仅在该会话期间有效/可用。

import os
os.environ['KAGGLE_USERNAME'] = "here DO use double quotes"
os.environ['KAGGLE_KEY'] = "here DO use double quotes"

您可以在内核底部找到控制台。


PS:最初这是在此处发布的,但是当答案增加时,Kaggle 中的 Markdown 显示中断(而不是在其他地方),因此我不得不将其从 Kaggle 中取出。


推荐阅读