Menu
CoddyTech

勾配ブースティング

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 43/58。

森では木々が並んで育ちます。勾配ブースティングでは、木を1本ずつ順番に育てます。新しい木は、それ以前の木がまだ間違えていることを学習します。

ここでは、スムージーバーの売上を木の本数ごとに当てはめます。

気温に対するスムージーの40日間の売上を示す灰色の点。約20から135まで上昇している。木が1本の場合の点線は大まかな平坦な段差になり、木が3本の場合の破線はよりよく沿い、木が15本の場合の実線は点の間を通る

クラス分類では、モデルは GradientBoostingClassifier です。

from sklearn.ensemble import GradientBoostingClassifier

boost = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=0)
boost.fit(X_train, y_train)

learning_rateは、各修正をどれだけ反映するかを設定します。小さなステップは慎重なので、より多くの木が必要です。

challenge icon

チャレンジ

中級

ランの栽培者は、どの植物が開花するかを知りたいと考えています。スターターコードはorchids.csvを分割し、ランダムフォレストを評価して、木の数を読み込みます。

  1. ratesの各学習率について、その数の木を使ってブースティングを学習させ(random_state=0)、テスト精度を出力します。
  2. 最適な学習率を出力します。同率の場合は、先に出てきたものを維持します。

別の栽培者の場合で、20を指定すると:

Forest: 0.860
Boosting at rate 0.01: 0.600
Boosting at rate 0.1: 0.860
Boosting at rate 1.0: 0.900
Best rate for 20 trees: 1.0

次に、木の数をいくつか試してみましょう。ブースティングがランダムフォレストを上回るのはどんなときでしょうか?

自分で試してみよう

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier

# 栽培者の棚にあるラン:今年開花した (1) か、しなかった (0) か
orchids = pd.read_csv("orchids.csv")
X = orchids.drop(columns="bloomed")
y = orchids["bloomed"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
trees = int(input())
rates = [0.01, 0.1, 1.0]

# 以下の行は変更しないでください:比較対象のランダムフォレストです
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(f"Forest: {forest.score(X_test, y_test):.3f}")

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ