从命令行向 Kaggle 竞赛提交结果,无论内核类型或文件名在 Kaggle 内部还是外部

Submitting results to Kaggle competition from command line regardless of kernel type or file name, in or out of Kaggle

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

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

简介(此部分可跳过)

我正在寻找一种方法来做到这一点。特别是,能够在 notebook 中的任何位置提交(这样你就可以测试不同的方法)、任何名称的文件(以保持内容分开)以及任意次数(遵守 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

但是他们未能阐明内核必须是 "Script" 类型而不是 "Notebook".

这有一些我还没有完全探索的局限性。

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


过程

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

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

进程:

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

问:我从哪里获得我的 kaggle 凭证?

A:你从 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 > 数据集 > 新数据集)
  3. 将 kaggle.json 添加到该数据集
  4. 将私有数据集添加到您的笔记本(数据 > 添加数据 > 数据集 > 您的数据集)

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


3。使用简单的命令提交。

这里<competition-name>是比赛代号。您可以从比赛的 url 或比赛页面的 "My submissions" 部分获得。

# 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 

注: 如果您对凭据的安全性过于在意 and/or 想要共享内核,那么您可以在“Console”而不是在笔记本(下面的例子)。他们将仅在该会话期间 valid/available。

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

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


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