Kaggle's 30 Days of ML やってみたメモ

2021-08-03に作成

Kaggle’s 30 Days of ML をやってみたメモを記録していく

内容:

オリジナルの記事はこちら

所有者限定モードのためこのボードには投稿できません ボードとは?

Day18

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day15以降の課題

  • 指定のCompetitionへ、1日1回Submitする
    (本プログラム参加者限定コンペ、リンク共有不可)

Competitionの概要

  • 保険のクレームの量を予測する

今日やったこと

  • LightGBM Tunerを使ってハイパーパラメータを最適化してみる
    • LightGBM Tuner: LightGBM に特化したハイパーパラメータ自動最適化のためのモジュール。7個のパラメータにおいて、最適な値の組み合わせを探索

覚えておきたいこと

  • LightGBM Tunerを使うときは、LightGBMのimport行を以下のように変更する
    import optuna.integration.lightgbm as lgb

メモ

  • LightGBM Tunerを使ってはみたが、前回LGBMを使ったときより精度は落ちてしまった
  • LightGBM Tunerの処理はかなり時間がかかる

参考


Originally published at marshmallow444.github.io

Day17

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day15以降の課題

  • 指定のCompetitionへ、1日1回Submitする
    (本プログラム参加者限定コンペ、リンク共有不可)

Competitionの概要

  • 保険のクレームの量を予測する

今日やったこと

覚えておきたいこと

メモ


Originally published at marshmallow444.github.io

Day16

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day15以降の課題

  • 指定のCompetitionへ、1日1回Submitする
    (本プログラム参加者限定コンペ、リンク共有不可)

Competitionの概要

  • 保険のクレームの量を予測する

今日やったこと

覚えておきたいこと

  • 一度SaveしたVersionは削除できないらしい(参考)

メモ


Originally published at marshmallow444.github.io

Day15

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day15以降の課題

  • 指定のCompetitionへ、1日1回Submitする
    (本プログラム参加者限定コンペ、リンク共有不可)

Competitionの概要

  • 保険のクレームの量を予測する

今日やったこと

  • Competitionへの参加方法の説明を読む
  • 初回のSubmitを行う

覚えておきたいこと

  • 新規Notebookの作成方法
    • CodeタブのNew Notebookボタンで作成できる
  • CompetisionのRuleで特に着目すべき項目
    • Section B7A. Data Access and Use
    • Section A1, Winner License
  • Submissionの形式には3種類ある
    • Prediction
    • Code
    • Simulation

メモ

  • 使用するデータのサイズが大きく、学習に時間がかかる(10分くらい?)
    ローカルに環境を作った方がいいかも?

Originally published at marshmallow444.github.io

Day14

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day14の課題

  1. the Intermediate ML CourseのLesson 6のチュートリアルを読む
  2. the Intermediate ML CourseのLesson 6のexerciseを実施する
  3. the Intermediate ML CourseのLesson 7のチュートリアルを読む
  4. the Intermediate ML CourseのLesson 7のexerciseを実施する

the Intermediate ML CourseのLesson 6の内容

  • XGBoost(= eXtreme Gradient Boosting)

覚えておきたいと思った点

  • XGBRegressorを使う
    • Early Stoppingもできる
    • n_jobsで使用するコア数を指定できる
      • データが多い場合に有効
  • パラメータのチューニング
    • n_estimators: 100~1000くらい
    • early_stopping_rounds: 5くらい?
    • learning_rate: デフォルトは0.1

the Intermediate ML CourseのLesson 7の内容

  • data leakage

覚えておきたいと思った点

  • Target Leakage
    • 予測を行う時点で知り得ないデータが混入
  • Train-Test Contamination (Contamination = 汚染)
    • 訓練データとテストデータを分割する前に前処理をしてしまうことにより、精度が落ちる
    • 検証データやテストデータを学習に使用してしまうことにより、ある特定のデータに対してのみ精度が上がり、未知のデータに対する精度が落ちる

Originally published at marshmallow444.github.io

Day13

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day13の課題

  1. the Intermediate ML CourseのLesson 4のチュートリアルを読む
  2. the Intermediate ML CourseのLesson 4のexerciseを実施する
  3. the Intermediate ML CourseのLesson 5のチュートリアルを読む
  4. the Intermediate ML CourseのLesson 5のexerciseを実施する

the Intermediate ML CourseのLesson 5の内容

  • パイプライン

覚えておきたいと思った点

  • パイプラインの長所
    • コードが整理される
    • バグが減る
    • 製品化しやすい
    • 交差検証法のオプションが多い
  • Pipelineを使う

the Intermediate ML CourseのLesson 6の内容

  • 交差検証法

覚えておきたいと思った点

  • Pipelineを使うことで交差検証法が簡単にできる
    • cross_val_score()を使う
      • 負のMAEの値が返ってくるので注意
  • foldごとのMAEを求めて、平均値を取る

Originally published at marshmallow444.github.io

Day12

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day12の課題

  1. the Intermediate ML CourseのLesson 1のチュートリアルを読む
  2. the Intermediate ML CourseのLesson 1のexerciseを実施する
  3. the Intermediate ML CourseのLesson 2のチュートリアルを読む
  4. the Intermediate ML CourseのLesson 2のexerciseを実施する
  5. the Intermediate ML CourseのLesson 3のチュートリアルを読む
  6. the Intermediate ML CourseのLesson 3のexerciseを実施する

the Intermediate ML CourseのLesson 1の内容

  • Introduction
    • RandomForestRegressorを使って、家の価格の予測をしてみる(Intro to ML Courseのおさらい的な感じ)

the Intermediate ML CourseのLesson 2の内容

  • 欠損値

覚えておきたいと思った点

  • 欠損値の扱い方
    • 欠損値を含む列を削除する
    • 適当な値で置換する
    • 置換する + 「値が欠損していたかどうか」の列を追加する
      • 非常に有効な場合もあれば、全く意味がない場合もある
    • 列を削除すると情報が失われるので、精度が落ちがち
      • 欠損値の数が20%以内の場合は削除しない方が良いことが多い
    • Imputerfit_transform()transform()の違いについてはこちらを参照

the Intermediate ML CourseのLesson 3の内容

  • カテゴリ変数

覚えておきたいと思った点

  • カテゴリ変数の扱い方
    • カテゴリ変数を除去する
      • カテゴリ変数が有益な情報でない場合に有効
    • 整数に変換する(Ordinal Encoding)
      • OrdinalEncoderを使う
    • One Hot Encodingを行う
      • OneHotEncoderを使う
        • 今回はhandle_unknown='ignore', sparse=Falseにする
      • カテゴリに順番がない場合に向いている
      • カテゴリ数が多くない場合(だいたい15以下)に向いている
      • cardinality: あるカテゴリにおける値の数
  • One-hot encodingの手順
    1. OneHotEncoderを生成し、カテゴリデータの各列に適用する
    2. 1.でindexが削除されてしまうので、それを元に戻す
    3. カテゴリデータの入った列を削除する
    4. One-hot encodingされた列を加える

Originally published at marshmallow444.github.io

Day11

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day11の課題

  1. the Intro to ML CourseのLesson 7のチュートリアルを読む
  2. the Intro to ML CourseのLesson 7のexerciseを実施する

the Intro to ML CourseのLesson 7の内容

  • Competitionに参加する

覚えておきたいと思った点

  • Competitionへの参加の仕方
    1. 用意された訓練用データ(train.csvなど)を使って学習する
    2. 用意されたテスト用データ(test.csvなど)を使って予測する
    3. 予測結果をcsvファイルへ書き出す
    4. 書き出した予測結果のファイルを提出する
  • 予測結果ファイルの提出の仕方
    1. CompetitionのページでJoin Competitionボタンをクリックしておく
    2. NotebookのSave Versionボタンをクリックする
    3. Save and Run Allオプションを選択し、Saveボタンをクリックする
    4. Notebook右上のSave Versionボタンの右にある、数字のボタンをクリックする
    5. Version Historyにて、提出したいバージョンの右側にある...をクリックする
    6. Submit to Competition > Submitを選択する
    7. もしくは、Open in Viewer > Outputタブ(画面右側) > Submit > Submitを選択する
  • featuresを増やした時にNaNが含まれる箇所はfillna()関数で置換することで対応できた

Originally published at marshmallow444.github.io

Day10

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day10の課題

  1. the Intro to ML CourseのLesson 5のチュートリアルを読む
  2. the Intro to ML CourseのLesson 5のexerciseを実施する
  3. the Intro to ML CourseのLesson 6のチュートリアルを読む
  4. the Intro to ML CourseのLesson 6のexerciseを実施する

the Intro to ML CourseのLesson 5の内容

  • 未学習と過学習

the Intro to ML CourseのLesson 6の内容

  • ランダムフォレスト

覚えておきたいと思った点

  • ランダムフォレスト使用時はRandomForestRegressorを使う

Originally published at marshmallow444.github.io

Day9

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day9の課題

  1. the Intro to ML CourseのLesson 3のチュートリアルを読む
  2. the Intro to ML CourseのLesson 3のexerciseを実施する
  3. the Intro to ML CourseのLesson 4のチュートリアルを読む
  4. the Intro to ML CourseのLesson 4のexerciseを実施する

the Intro to ML CourseのLesson 3の内容

  • モデリングのためのデータを選ぶ

覚えておきたいと思った点

  • 予測の手順:
    1. 予測対象のデータを決める
    2. 予測に使うデータ(特徴)を決める
    3. モデルを構築する
  • Pandasでは、読み込んだcsvデータに対して以下の操作が可能
    • data.columnsで列の見出しを取得
    • data.列名で列のデータを取得
    • data[列見出しリスト]で、指定した複数列のデータを取得
    • data.head()で先頭の5行を取得

the Intro to ML CourseのLesson 4の内容

  • モデルを評価する

覚えておきたいと思った点

  • train_test_split()でテストデータと検証データの分割ができる
  • mean_absolute_error()で平均絶対誤差を取得できる

Originaly published at marshmallow444.github.io

Day8

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day8の課題

  1. the Intro to ML CourseのLesson 1のチュートリアルを読む
  2. the Intro to ML CourseのLesson 2のチュートリアルを読む
  3. the Intro to ML CourseのLesson 2のexerciseを実施する

the Intro to ML CourseのLesson 1の内容

  • How Models Work
    • 決定木を使って不動産の価格を予想することを考える

the Intro to ML CourseのLesson 2の内容

  • Basic Data Exploration
    • Pandasを使ってデータの概要を見てみる

覚えておきたいと思った点

  • 以下の要領でcsvファイルを読み込める
    data = pd.read_csv()
  • 上記で読み込んだデータの概要を、以下のようにして表示できる
    data.describe()
  • データの中身に問題がないか、予めチェックしておく必要がある

Originally published at marshmallow444.github.io

Day7

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day7の課題

  1. Python CourseのLesson 7のチュートリアルを読む
  2. Python CourseのLesson 7のexerciseを実施する

Python CourseのLesson 7の内容

  • 外部ライブラリの使い方

覚えておきたいと思った点

  • モジュールの関数を呼ぶ時に、モジュール名を省略する例:
    from math import * print(pi, log(32, 2))
  • 謎のオブジェクトを理解するのに役立つメソッド
    • type()
      • オブジェクトの型を調べる
    • dir()
      • そのオブジェクトで何ができるのか調べる(変数、関数など)
    • help()
  • 演算子のオーバーロード
    • オブジェクトの演算子がオーバーロードされている場合があり、予想と違う動作をする場合があるので要注意

メモ

  • この課題はヘビーな問題が2つ出て、予想より時間がかかってしまった。でも楽しかった

Originally published at marshmallow444.github.io

Day6

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day6の課題

  1. Python CourseのLesson 6のチュートリアルを読む
  2. Python CourseのLesson 6のexerciseを実施する

Python CourseのLesson 6の内容

  • Strings
  • Dictionaries

覚えておきたいと思った点

  • Pythonでは
    • 文字列は'または"で囲む
      • 文中に'が含まれるときは"で囲むと便利
    • 文中に' " \を含める場合、前に\をつける
    • \nで改行可能
    • """で囲むと、中の文が改行された位置で(\nをつけなくても)改行される
    • Listと同様に各文字へアクセスできるが、immutable
      • 文字列操作の結果は何かの変数へ入れる必要がある
    • 文字列中に数値を入れたいとき
      • 数値をstr()で文字列に変換する
      • "{}, you'll always be the {}th planet to me.".format(planet, position)のように書く
    • 以下のように書くと、Listの各要素とindexが取れる
      for i, item in enumerate(item_list)
    • str.rstrip()で引数の文字を探して除去する

Originally published at marshmallow444.github.io

Day5

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day5の課題

  1. Python CourseのLesson 4のチュートリアルを読む
  2. Python CourseのLesson 4のexerciseを実施する
  3. Python CourseのLesson 5のチュートリアルを読む
  4. Python CourseのLesson 5のexerciseを実施する

Python CourseのLesson 4の内容

  • Lists
  • Tuples

覚えておきたいと思った点

  • 一つのListに異なる型の要素を入れることが可能
  • Listの要素にアクセスする際、インデックスに-xを指定すると、リストの最後からx番目の要素にアクセスできる
  • リスト[a:b]のように書くことで、a番目からb番目の要素のリストを取得できる
    • aを省けば最初からb番目まで
    • bを省けばa番目から最後まで
    • インデックスに負の値を入れても良い
  • Pythonに出てくる全てのものはobject
  • 要素 in リストで、リスト内に要素が含まれるか確認できる
  • TupleとListの違い
    • Tupleは( )または括弧なし, Listは[ ]で囲む
    • Tupleはimmutable, Listはmutable
  • 返り値が複数ある場合、それを受け取る変数をTupleにしておくと、それぞれの値をひとつずつの変数に格納できる
    • 例:numerator, denominator = x.as_integer_ratio()
  • Listを内包するListのlen()を使うと、内包されるListが一つの要素として数えられる

Python CourseのLesson 5の内容

  • Loops
  • List Comprehensions

覚えておきたいと思った点

  • for文はfor 要素 in リスト等のように書く
  • [num for num in nums if num < 0]みたいな書き方もできる

メモ

  • 問題文にまさかのマリオカート登場。びっくりした。。(Lesson 4)

Originally published at marshmallow444.github.io

Day4

Kaggleの初心者向けプログラム「30 Days of ML」に挑戦中。

Day4の課題

  1. Python CourseのLesson 3のチュートリアルを読む
  2. Python CourseのLesson 3のexerciseを実施する

Python CourseのLesson 3の内容

  • Boolean型
  • 条件文

覚えておきたいと思った点

  • Pythonでは
    • bool型はTrueFalse
      • bool()でbool型に変換できる
    • 論理演算子はand or not
      • 同じ条件式内にandがあれば、これが優先される
    • if文はif elif else
      • コードブロックを作るには、以下のように:(半角スペース)を入れる
        if 条件: ←半角スペース4つでインデントを下げて処理を書く インデントをやめるとブロックの終わりになる
      • 1行で書くと以下 (→参考)
        値1 if 条件 else 値2

メモ

  • blackjackでhitすべきかどうかを判定する関数を作る問題(Optional)が楽しかった。
    勝率を4割くらいまでしか上げられなかったけど。。
    (blackjackはやったことがないので、どうしたら勝ちやすいのかよくわからない・・・)
  • Github Pagesのコードブロック内でインデントするには半角スペース8個が必要

Originally published at marshmallow444.github.io