機械学習の仕組み — 例から学んで、まだ見ていない例で試す
例の関係を学び、次の値を予測する
まずは、小さな関係を学習する
Python 3の新しい仮想環境へscikit-learnを追加し、次をlearning-demo.pyに保存します。環境の作り方はAI・機械学習入門を使えます。
from sklearn.linear_model import LinearRegression
X = [[1], [2], [3]]
y = [3, 5, 7]
model = LinearRegression()
model.fit(X, y)
print(f"係数: {model.coef_[0]:.1f}")
print(f"切片: {model.intercept_:.1f}")
print(f"入力4の予測: {model.predict([[4]])[0]:.1f}")
係数: 2.0
切片: 1.0
入力4の予測: 9.0
この練習では、結果 = 2 × 入力 + 1という直線に合うパラメーターを求めます。fitが学習、predictが予測です。3件しかなく、実務の性能評価をするデータではありません。入力4は学習した範囲の外なので、現実でもこの直線が成り立つかは別に確かめます。
学習方法と、評価の問いを分ける
教師あり学習は正解付きの例、教師なし学習は正解ラベルなしの構造、強化学習は行動と報酬を扱います。学習する情報や目的はさまざまで、「写真を見せるだけで必ず猫が分かる」のような保証ではありません。
損失は学習時に最適化する目的の数値です。正解率、誤検出、見逃し等の評価とは同じものとは限りません。勾配降下法は更新方法の一つで、すべての機械学習が使うわけでも、必ず最良の解へ到達する方法でもありません。
初めてのデータで試す
学習用と評価用を先に分け、前処理のパラメーターも学習用だけから求めます。評価を何度も見てモデルを選ぶと、その評価へ合わせてしまいます。検証や交差検証と、最後のテストの役割を分けましょう。
時間順のデータや同じ人の記録は、単純なランダム分割では漏れが起きることがあります。花の分類を試す機械学習入門で、学習120件と評価30件が分かれていることを確認してみましょう。
もう少し詳しく:深層学習と汎化
ニューラルネットワークはパラメーターを持つ数理モデルで、脳と同じ動作をするという説明ではありません。深層学習では複数の層を使いますが、深さ・計算量・データ量の増加だけで、どの課題も改善する保証はありません。
新しいデータで役立つことが汎化です。過学習を疑ったら、分割と情報の漏れ、データの分布を調べ、必要に応じてモデルや正則化を見直します。学習データへ良く合うことと、本番で役立つことを分けます。
🐧 ペンギン先生のまとめ:「機械学習」って出てきたら「例から予測の手がかりを学び、初めての例で確かめる方法」と思えばだいたいOK!
資料を探して回答へ使う方法はRAGの仕組みで学べます。
参考資料
- scikit-learn:Getting Started — fit/predict・前処理・評価
- scikit-learn:LinearRegression — 線形回帰の係数・切片・予測
- scikit-learn:Common pitfalls — 学習と評価の分離・漏洩
- scikit-learn:SGD — 勾配の更新・損失と正則化