Kaggle で競争する方法、全プロセスを解説

Kaggle で競争する方法、全プロセスを解説

導入

Kaggle は機械学習のコンペティションで最も有名なウェブサイトです。 Kaggle コンテストは、Web サイトから入手できるデータセットで構成されており、問題を解決するために機械学習、ディープラーニング、またはその他のデータ サイエンス手法を使用する必要があります。解決策を見つけたら、モデルの結果を Web サイトにアップロードします。すると、結果に基づいてランキングが付けられます。他の出場者よりも良い結果が出れば、賞金を獲得できるかもしれません。

Kaggle は、機械学習とデータサイエンスのスキルを磨き、他の人と自分を比較し、新しいテクニックを学ぶのに最適な場所です。

この記事では、典型的な例を使用して、Kaggle コンペティションに参加する方法を説明します。

  • ツイートが災害に関連しているかどうかを予測するモデルを開発します。
  • モデルを使用して、Kaggle が提供するテスト データセットで予測を行います。
  • 結果を送信すると、Kaggle リーダーボードに掲載されます。

Twitterデータセット

最近の Kaggle コンテストでは、ツイートと、そのツイートが実際に災害に関するものかどうかを示すラベルを含むデータセットが提供されています。このコンテストには、リーダーボードに約 3,000 人の参加者がおり、優勝賞金は 10,000 ドルです。統計と試合の概要はここで見ることができます:

https://www.kaggle.com/c/nlp-getting-started

Kaggle アカウントをまだお持ちでない場合は、無料で作成できます。

コンテスト ページから「すべてダウンロード」を選択すると、3 つの CSV ファイルを含む zip ファイルが取得されます。

最初のデータ ファイル train.csv には、トレーニング目的のための一連の機能とそれに対応するターゲット ラベルが含まれています。このデータセットは次の属性で構成されています。

  • Id: ツイートの数値識別子。これは、リーダーボードに予測をアップロードするときに非常に重要になります。
  • キーワード: ツイート内のキーワード。場合によってはキーワードがないこともあります。
  • 場所: ツイートが送信された場所。存在する場合と存在しない場合があります。
  • テキスト: ツイートの全文。
  • ターゲット: これは予測しようとしているラベルです。ツイートが本当に災害に関するものであれば 1 になり、そうでなければ 0 になります。

これを詳しく見てみましょう。以下のコードでは、set_option コマンドを使用していることがわかります。 Pandas ライブラリのこのコマンドを使用すると、結果のデータフレームの表示形式を制御できます。ここでこのコマンドを使用すると、テキスト列の内容全体が確実に表示されるようになり、結果と分析の確認が容易になります。

  1. pandasをpdpd.set_option( 'display.max_colwidth' ,としてインポートします
  2. -1)train_data = pd.read_csv( 'train.csv' )train_data.head()

2 番目のデータ ファイル test.csv はテスト セットであり、特徴のみが含まれ、ラベルは含まれません。このデータセットでは、ターゲット ラベルを予測し、その結果を使用してリーダーボード上の位置を取得します。

  1. test_data = pd.read_csv( 'test.csv' )test_data.head()

3 番目のファイル sample_submission は、送信ファイルの例です。このファイルには、test.csv ファイルの id 列とモデルで予測したターゲットが含まれます。このファイルを作成したら、それをサイトに送信し、リーダーボードで順位を獲得します。

  1. サンプル提出 =
  2. pd.read_csv( 'sample_submission.csv' )sample_submission.head()

データクリーニング

他の機械学習タスクと同様に、モデルをトレーニングする前に、データのクリーニングと前処理を実行する必要があります。これはテキストデータを扱う場合に特に重要です。

最初のモデルを簡素化するために、またこれらの列には欠損データが大量にあるため、位置とキーワードの特徴を削除し、ツイートの実際のテキストのみをトレーニングに使用します。モデルのトレーニングには役に立たないので、id 列も削除します。

  1. train_data = train_data.drop ([ 'キーワード' , '場所' , 'ID' ] ,
  2. 軸=1)train_data.head()

データセットは次のようになります。

多くの場合、テキストには機械学習アルゴリズムにとって必ずしも意味をなさない特殊文字が多く含まれています。したがって、私が最初に行うステップは、これらを削除することです。また、すべての単語を小文字にします。

  1. インポートredef clean_text(df, text_field): df[text_field] =
  2. df[テキストフィールド] .str.lower () df[テキストフィールド] =
  3. df[テキストフィールド].apply(lambda elem: re.sub(r"(@[A-Za-z0-9]+)|([^0-9A-
  4. Za-z \t])|(\w+:\/\/\S+)|^rt|http.+? ", " ", elem))戻り  
  5. dfdata_clean = clean_text(train_data, "テキスト" )data_clean.head()

もう一つの便利なテキストクリーニングプロセスは、ストップワードの削除です。ストップワードは非常によく使われる単語ですが、通常はほとんど意味を伝えません。英語では、これらの単語には「the」、「it」、「as」が含まれます。これらの単語をテキスト内に残しておくと、多くのノイズが発生し、アルゴリズムの学習が難しくなります。

NLTK は、テキスト データを処理するための Python ライブラリとツールのコレクションです。処理ツールに加えて、NLTK には、さまざまな言語のすべてのストップワードを含む大規模なテキスト コーパスと語彙リソースもあります。このライブラリを使用して、データセットからストップワードを削除します。

NLTK ライブラリは pip 経由でインストールできます。インストール後、ライブラリ コレクションをインポートし、ストップワード ファイルをダウンロードする必要があります。

  1. nltk.corpusnltk.download( 'ストップワード' )をインポートします。

これが完了すると、ストップワードを読み取って、それを使用してツイートを削除できます。

  1. nltk.corpusからstopwordsstop = をインポートします
  2. stopwords.words( '英語' )data_clean[ 'テキスト' ] =
  3. data_clean[ 'text' ].apply(lambda x: ' ' . join ([単語ごと  
  4. x.split() 単語  (停止)]))data_clean.head() で

データ前処理

データがクリーンアップされたら、機械学習アルゴリズムで使用できるようにするために、さらに前処理が必要です。

すべての機械学習アルゴリズムは、数学的計算を使用して、ターゲット変数内の特徴 (この場合はテキストまたは単語) とパターンをマッピングします。したがって、機械学習モデルをトレーニングする前に、これらの計算を実行するためにテキストを数値表現に変換する必要があります。

このタイプの前処理には多くの方法がありますが、この例では scikit-learn ライブラリの 2 つの方法を使用します。

このプロセスの最初のステップは、データをトークンまたは個々の単語に分割し、各単語がテキスト内に出現する頻度をカウントし、これらのカウントをスパース マトリックスとして表すことです。 CountVectoriser 関数はこれを実現できます。

次のステップは、CountVectoriser によって生成された単語数に重みを付けることです。この重み付けを適用する目的は、テキスト内で非常に頻繁に出現する単語の影響を縮小し、モデルのトレーニングでは、出現頻度が低く、より有益な可能性のある単語が重要であるとみなされるようにすることです。 TfidTransformer はこの機能を実行できます。

機械学習プロセス

このすべての前処理とモデルフィッティングを scikit-learn パイプラインにまとめて、モデルのパフォーマンスを確認してみましょう。この最初の試みでは、一般的に最高のテキスト分類アルゴリズムの 1 つと考えられている線形サポート ベクター マシン分類器 (SGDClassifier) を使用しました。

  1. sklearn.model_selectionからtrain_test_splitをインポートします。X_train、X_test、y_train、y_test =
  2. train_test_split(data_clean[ 'テキスト' ],data_clean[ 'ターゲット' ],random_state
  3. = 0) sklearn.feature_extraction.textからTfidfVectorizerをインポート
  4. sklearn.pipeline は、sklearn.feature_extraction.text から Pipeline をインポートします。
  5. CountVectorizerをsklearn.feature_extraction.textからインポートします
  6. TfidfTransformer から sklearn.linear_model をインポート
  7. SGDClassifierpipeline_sgd = パイプライン([ ( 'vect' ,
  8. CountVectorizer()), ( 'tfidf' 、 TfidfTransformer()), ( 'nb'
  9. SGDClassifier(),])モデル = pipeline_sgd.fit(X_train, y_train)

このトレーニング済みモデルを使用してテスト データを予測し、このモデルのパフォーマンスを確認してみましょう。

  1. sklearn.metricsからclassification_reporty_predictをインポートします =
  2. モデル予測(X_test)印刷(分類レポート(y_test, y_predict))

最初の試みとしては、モデルのパフォーマンスはかなり良好でした。

成績を提出する

それでは、このモデルが競合テスト データセットでどのように機能するか、またリーダーボードでどこにランクされるかを見てみましょう。

まず、テスト ファイル内のテキストをクリーンアップし、モデルを使用して予測を行う必要があります。次のコードは、テスト データのコピーを取得し、トレーニング データに適用したものと同じクリーニングを実行します。出力は次のコードに示されています。

  1. submission_test_clean = テストデータ.コピー() submission_test_clean =
  2. clean_text(submission_test_clean、
  3. "テキスト" )submission_test_clean[ 'テキスト' ] =
  4. submission_test_clean[ 'text' ].apply(lambda x: ' ' . join ([逐語的に
  5. x.split()単語  (停止)]))submission_test_clean =
  6. submission_test_clean[ 'テキスト' ]submission_test_clean.head()

次に、モデルを使用して予測を作成します。

  1. submission_test_pred = モデルを予測します(submission_test_clean)

提出物を作成するには、テスト セットの ID と予測のみを含むデータフレームを構築する必要があります。

  1. id_col = test_data[ 'id' ] submission_df_1 = pd.DataFrame({
  2. 「id」 : id_col、 「ターゲット」 :
  3. submission_test_pred})submission_df_1.head()

最後に、CSV ファイルとして保存します。 index=False を含める必要があります。そうしないと、インデックスがファイル内の列として保存され、送信が拒否されます。

  1. submission_df_1.to_csv( 'submission_1.csv' インデックス= False )

CSV ファイルを作成したら、コンテスト ページに戻り、「予測を送信」ボタンを選択します。 CSV ファイルをアップロードできるフォームが開きます。以前の送信試行の記録を残すために、方法に関するコメントを追加することをお勧めします。

ファイルを送信すると、次の結果が表示されます。

これでコミットは成功しました!

このモデルはスコア 0.78 とリーダーボードでのランキング 2371 を獲得しました。明らかに改善の余地はありますが、今後の提出物のための基準ができました。

<<:  マスク着用で顔認証での支払いは難しいですが、手渡しでの支払いは可能ですか?

>>:  TensorFlow から Theano まで: 7 つのディープラーニング フレームワークの水平比較

ブログ    

推薦する

Javaの組み込みソートアルゴリズムをどうやって克服したか

Java 8 では、組み込みのソート アルゴリズムが大幅に最適化されました。整数やその他のプリミティ...

世界トップ10のAIトレーニングチップの包括的なレビュー

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

ゲーム開発における機械学習の活用

機械学習のメリット機械学習は多くの分野で驚異的な進歩を遂げてきました。応用分野の観点から見ると、機械...

マイクロソフトはBing Chatを今後も無料のままにすると約束

近年、OpenAI、Microsoft、Google など多くの企業やスタートアップチームが独自のチ...

実現可能な AI、SF から科学的事実へ: 今日の AI の現実

人工知能(AI)の概念は何千年も前から存在しています。 AI の物語は歴史を通じて世界中に広がってい...

インテル、IoTとエッジ向け第10世代プロセッサーを発表

Intel は最近、第 10 世代 Core プロセッサが、スループット、LGA ソケットのスケーラ...

AI による IoT センサー電力の管理

[[352688]]センサーの電源喪失は IoT の悩みの種です。数百万個のセンサーを導入しても、そ...

第1回自動車開発者会議(2021)が成功裏に終了しました

10月20日、国家インテリジェントコネクテッドビークルイノベーションセンター(以下、「イノベーション...

小売実店舗におけるインテリジェント機器の応用シナリオの分析

顔認識やセルフサービスチェックアウト、スマート端末製品などのテクノロジーが実店舗のシナリオに適用され...

チューリング賞受賞者:人工知能を実装したものは、もはや人工知能とは呼ばれない

1956年、マッカーシーはダートマス大学で開催された会議で初めて「人工知能」の概念を提唱した。後に、...

...

ボストン・ダイナミクスのロボット犬はまもなく腕が生え、走って充電できるようになる

ボストン・ダイナミクスの創業者マーク・レイバート氏は、スポットロボット犬は将来「家庭で使用できるよう...

文部科学省が文書を発表:AI、アルゴリズム等が2018年度から高等学校の教育課程に取り入れられる!

教育部はこのほど記者会見を開き、「高等学校一般教育課程計画及び中国語等教科教育課程基準(2017年版...

組織内の AI スキルを向上させる 3 つのステップ

[[350689]]今日、ほとんどの組織は人工知能が遍在する世界に向けて準備を進めています。この進化...