はじめに
これは、「理論は知っているが、モデルをトレーニングしたことがない」という最大の心理的障壁を克服するのに役立つため、非常に重要な記事です。この記事の目的は、最初のモデルを手動で適合させ、結果を測定し、すべての本格的な ML プロジェクトで ベースライン が常に必須のステップである理由を理解することです。
レッスンの目標
- 列車は最初に scikit-learn を使用してモデル化されます
- トレーニングとテストの分割がどのように機能するかを理解する
- ベースラインを作成し、機械学習モデルと比較する方法を理解する
1. サンプル問題: 住宅価格の予測
次の列で構成される住宅データがあると仮定します。
- エリア
- 部屋番号
- 家の築年数
- 地区
- 販売価格
この問題では:
X機能セットですy家の価格です
出力は実数であるため、これは 回帰 問題です。
2. ベースラインとは何ですか?
ベースラインは、ランドマークとして使用する最も簡単なオプションです。
住宅価格の予測例:
- ベースライン 1: トレーニング セットの平均価格を常に推測します
- ベースライン 2: 常に中央価格を推測します
ML モデルがベースラインより優れていない場合、複雑なモデルを使用する理由はありません。
3. トレーニング/テストの分割
データを 2 つの部分に分割します。
train: モデル学習へtest: 目に見えないデータを評価する
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
の意味 random_state=42 あなたと他の誰かがもう一度実行して同じ結果が得られるようにするためです。
4. 線形回帰を使用した最初のモデル
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
df = pd.read_csv('data/raw/houses.csv')
features = ['dien_tich', 'so_phong', 'tuoi_nha']
X = df[features]
y = df['gia']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)
mae = mean_absolute_error(y_test, pred)
print('MAE:', mae)
理解しておくべき最も重要なこと:
fit()モデルがトレーニング データから学習するときですpredict()モデルが新しいデータを予測するとき- メトリクスはモデルがどの程度優れているかを示します
5. 比較のためにベースラインを測定する
baseline_pred = [y_train.mean()] * len(y_test)
baseline_mae = mean_absolute_error(y_test, baseline_pred)
print('Baseline MAE:', baseline_mae)
print('Model MAE:', mae)
もし Model MAE < Baseline MAE、モデルが作成した値。
##6.なぜMAEを選ぶのですか?
回帰の場合、一般的な指標は次のとおりです。
- 前
- MSE
- RMSE
- $R^2$
MAE は、問題の正しい単位での平均誤差を表すため、初心者にとっては最も理解しやすいメトリックです。
たとえば:
- MAE = 0.2 億 5,000 万は、モデルの平均偏差が約 2 億 5,000 万であることを意味します。
7. 最初のモデルは強い必要はありません
多くの人は線形回帰が単純であるため、それをスキップして XGBoost に切り替えたいと考えています。それは間違った学習リズムです。
シンプルに始める理由:
- デバッグが簡単
- 説明しやすい
- データエラーを検出しやすい
- 以下のモデルの思考ベースラインを用意する
8. チェックリストは結果を適切に読み取ります
トレーニング後は、メトリクスの数値だけを見て結論を下さないでください。尋ねてください:
- モデルはベースラインより優れていますか?
- メトリクスは問題に対して正しいですか?
- テスト データは実際のデータを表していますか?
- カラムに漏れはありませんか?
9. 非常に短い分類のバリエーション
問題が分類である場合、コード構造はほぼ同一であり、モデルとメトリクスのみが変更されます。
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
clf = LogisticRegression(max_iter=300)
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print('Accuracy:', accuracy_score(y_test, pred))
これは、同じワークフローをさまざまな問題にどのように適用できるかを理解するのに役立ちます。
練習問題を練習する
- 回帰問題のベースラインを作成します。
- 線形回帰モデルをトレーニングします。
- ベースラインとモデルの間でメトリクスを比較します。
- 結論の文を 3 つ書きます。モデルは維持する価値がありますか、そしてその理由を述べます。
よくある間違い
- 列車セット自体のモデルを評価します。
- ベースラインと比較しないでください。
- メトリクスの実際の意味を理解せずに使用する。
完了基準
- 最初のモデルをセルフトレーニングします
- 適切なベースラインを作成する
- モデルがベースラインよりも優れている、または劣っている理由を説明します