勾配ブースティング
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 43/58。
森では木々が並んで育ちます。勾配ブースティングでは、木を1本ずつ順番に育てます。新しい木は、それ以前の木がまだ間違えていることを学習します。
ここでは、スムージーバーの売上を木の本数ごとに当てはめます。
クラス分類では、モデルは 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は、各修正をどれだけ反映するかを設定します。小さなステップは慎重なので、より多くの木が必要です。
チャレンジ
中級ランの栽培者は、どの植物が開花するかを知りたいと考えています。スターターコードはorchids.csvを分割し、ランダムフォレストを評価して、木の数を読み込みます。
ratesの各学習率について、その数の木を使ってブースティングを学習させ(random_state=0)、テスト精度を出力します。- 最適な学習率を出力します。同率の場合は、先に出てきたものを維持します。
別の栽培者の場合で、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}")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ