はじめに
最初のモデルをトレーニングした後、次の疑問は、モデルがなぜ学習したのかということです。この記事は、損失を読み取り、結果をデバッグし、モデルがいつ正しく学習しているのか、それとも正しく学習していないのかを知るのに十分な直観的なレベルで線形回帰を理解するのに役立ちます。
レッスンの目標
- 線形回帰が何を学ぼうとしているのかを理解します。
- 損失関数、勾配降下法、正則化を直感的に把握します。
- 線形回帰をいつ使用するか、いつ強制的に使用しないかを理解します。
線形回帰は何をしているのでしょうか?
エリアから住宅価格を予測したいと想像してください。線形モデルは、予測価格と実際の価格の間の誤差が最小限になるように、最適な直線を見つけようとします。
基本的な式:
$$ \hat{y} = w_1x_1 + w_2x_2 + ... + w_nx_n + b $$
損失関数: モデルがどの程度悪いかを示す尺度
回帰では、よく知られた損失が MSE です。
$$ MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y_i})^2 $$
その意味は非常に一般的で、予測モデルが現実から乖離すればするほど損失が大きくなります。二乗は、遠すぎるポイントに厳しいペナルティを与えるのに役立ちます。
勾配降下法: モデルがエラーを修正する方法
勾配降下法は反復プロセスです。予測、損失の計算、重みの増減方法を確認し、モデルがより安定するまで何度も更新します。
学習率が大きすぎると、モデルが前後に飛びやすくなり、収束しません。小さすぎると、モデルの学習が非常に遅くなります。
最小限のコード例
sklearn.linear_model からインポート LinearRegression、Ridge
sklearn.metricsインポートからmean_absolute_error
sklearn.model_selection からのインポート train_test_split
X_train、X_test、y_train、y_test = train_test_split(X、y、test_size=0.2、random_state=42)
モデル = LinearRegression()
model.fit(X_train, y_train)
preds = model.predict(X_test)
print('MAE:', means_absolute_error(y_test, preds))
print('インターセプト:', model.intercept_)
print('係数:', model.coef_)
過学習を防ぐための正則化
- リッジは多くの場合、よりスムーズな重み付けに役立ちます。
- なげなわは、一部のウェイトを 0 にプッシュでき、フィーチャを選択する場合に適しています。
よくある間違い
- データの正規化は完了しましたが、同じ方法でテスト セットに適用されていません。
- 係数は因果関係であるという結論。
- テストエラーは見ずに、トレインスコアだけを見てください。
練習問題を練習する
- 同じデータセットで線形回帰とリッジを学習させます。
- 2 つのモデルの MAE を比較します。
- 短い 5 行で書いてください: Ridge が純粋な線形回帰よりも優れているのはどのような場合ですか?
完了基準
- 損失関数を簡単な言葉で説明します。
- 重みの更新に使用される勾配降下法を理解します。
- 実際の例で線形回帰とリッジを比較します。
段階的に練習する (上級)
- 少なくとも 6 つの特徴を持つ回帰データセットを選択します。
- 正則化を行わずに線形回帰を使用してベースラインをトレーニングします。
- 5 つの異なるアルファ値を使用して Ridge をテストします。
- 各アルファの MAE を比較するグラフを描きます。
- コメントを書く: 大きすぎるアルファはバイアス/分散にどのように影響しますか?
アーティファクトを送信する必要があります
- Notebook には Linear と Ridge の比較があります。
- MAE と RMSE の結果の表。
- 正則化の選択についての結論は 8 ~ 10 行です。
セルフテストの質問
- MSE が MAE よりも外れ値に敏感なのはなぜですか?
- 学習率は収束速度にどのように影響しますか?
- 投げ縄がリッジよりも試してみる価値があるのはどのような場合ですか?