機械学習モデルのトレーニング
機械学習モデルをトレーニングするには、機械学習アルゴリズムをトレーニング データに合わせて調整する必要があります。これは、特徴量に適用できる程度の正確性の関数を決定し、対応するラベルを計算するためです。 これは概念的には単純な考えのように思えます。ただし、トレーニングに使ったデータだけでなく、新しいデータでも正確な予測を生成するという実際のモデル トレーニング プロセスは困難であり、複数のアルゴリズムとパラメーターを使ってモデルのトレーニングと評価を繰り返す反復的な方法が必要になることもあります。
トレーニングデータと検証データ
機械学習モデルをトレーニングするときの一般的な方法は、"トレーニング" と "検証" のサブセットにデータをランダムに分割することです。 そして、トレーニング データセットを使ってアルゴリズムを調整し、モデルをトレーニングしてから、残しておいた検証データを使ってモデルのパフォーマンスをテストします。 こうすることで、モデルを適切に "一般化" できます。言い換えると、過去にトレーニングしていないトレーニングでも正確な予測を生成できます。
Note
トレーニング済みのデータでは適切に予測できても、新しいデータではうまくいかないモデルは、トレーニング データに "過剰適合" していると表現されます。
一般に、約 70% のデータを使ってモデルをトレーニングし、約 30% を検証用に残しておくことをお勧めします。
機械学習のアルゴリズム
多数の機械学習アルゴリズムがあり、解決する必要がある機械学習の問題の種類に基づいて、さまざまなアルゴリズムの種類にグループ化されています。 ほとんどの機械学習フレームワークには、回帰と分類のための複数のアルゴリズムと、クラスタリングのような教師なし機械学習問題のためのアルゴリズムが含まれています。
解決するモデルを作成する問題の種類を特定したら、その種類の複数のアルゴリズムから選択できます。 個々の種類では、複数のアルゴリズムを選択できる場合があります。その多くはさまざまな数学演算に基づいています。 たとえば、分類のための一連のアルゴリズムには、次のような種類のアルゴリズムがあります。
- "ロジスティック回帰" アルゴリズム。ロジスティック関数を繰り返し適用して、可能性のある各クラスの確率を表す 0 と 1 の間の値を計算し、予測クラスと実際の既知のラベル値との差に基づいて関数の係数を最適化します。
- デシジョン ツリーを決定する "ツリーベース" 関数。個々の特徴を検討し、その値に基づいて別の特徴を検討する処理を、適切なクラス ラベルが決まるまで続けます。
- "アンサンブル" アルゴリズム。複数の手法を組み合わせて、全体として最適な予測関数を見つけます。
"最適な" アルゴリズムはデータによって異なります。通常は反復的な試行錯誤で判断する必要があります。
ハイパーパラメーター
機械学習アルゴリズムの "パラメーター" は、トレーニング対象となるデータの特徴量 (とラベル) です。 さらに、ほとんどの機械学習アルゴリズムには "ハイパーパラメーター" が用意されており、これを使ってアルゴリズムの動作に影響を与えることができます。 ハイパーパラメーターを使うと、モデルに許容するランダム性のレベル (適切に一般化すると同時に許容できる程度の正確性の予測を実行できます)、最適なモデルを見つけるための反復回数 (過剰適合を回避してトレーニング時間を最適化できます)、ツリー モデルで考慮するブランチ数など、アルゴリズム固有の要因を制御できます。
モデルの調整
モデルを実際にトレーニングするには、アルゴリズムをデータに合わせる必要があります。 そのための具体的な構文やデータ形式は機械学習のフレームワークによって異なりますが、原則は常に同じです。 教師あり機械学習の場合、既知のラベルに基づく特徴量に合わせてアルゴリズムを調整します。 教師なし機械学習の場合、特徴量を指定すると、アルゴリズムによって、個別のクラスターへの分類が試行されます。
次の例は、Spark MLlib フレームワークを使ってロジスティック回帰モデルのトレーニングを開始する際に使われるコードを示しています。 トレーニング データはデータフレームとして提供されます。ラベルは整数値の列という形式であり、対応する特徴量は値の 1 つのベクトル (配列) として表されます。 この例では、2 つのハイパーパラメーター (maxIter と regParam) も指定されています。
from pyspark.ml.classification import LogisticRegression
lr = LogisticRegression(labelCol="label", featuresCol="features", maxIter=10, regParam=0.3)
model = lr.fit(training_df)