本文へスキップ
ひもとくAI

線形回帰を動かしてみる

レッスン 3/7

scikit-learnで、初めてのAIモデルを作る

ここまでの単元で、「学習」「予測」「モデル」「一次関数」「ベクトル」という言葉を学んできました。いよいよこれらを組み合わせて、実際に動くAIモデルを作ってみましょう。

使うのは scikit-learn という、機械学習で最もよく使われるPythonライブラリの一つです。線形回帰は、次のようにとても短いコードで実行できます。

from sklearn.linear_model import LinearRegression
import numpy as np

# 勉強時間(X)と、テストの点数(y)のデータ
X = np.array([[1], [2], [3], [4], [5]])  # 入力は2次元配列で渡す
y = np.array([50, 55, 65, 70, 80])

model = LinearRegression()
model.fit(X, y)       # 学習:データから最適なa, bを見つける
model.predict([[6]])  # 予測:勉強時間6時間のときの点数を予測 → [86.5]
model.predict([[6]])[0]  # 最初の1つを取り出す → 86.5

model.fit(X, y)が「学習」、model.predict(...)が「予測」に対応しています。以前学んだ「学習」と「予測」という2つの段階が、fitとpredictという2つのメソッドにそのまま対応していることに注目してください。

predictは、たくさんのデータをまとめて予測できるように、結果を 配列([86.5]のような並び)で返します。1件だけ予測したときは、最後に[0]を付けて「0番目(最初)の値」を取り出すと、ただの数値として扱えます。リストのscores[0]と同じ書き方です。

Xが2次元配列([[1], [2], ...])になっている点に気づいたでしょうか。これは、scikit-learnが「複数の特徴(入力の項目)を扱えるように」、1件のデータを常にベクトルとして扱う設計になっているためです。特徴が1つ(勉強時間だけ)でも、[1]のようにベクトルの形で渡します。

学習された a と b を覗いてみる

fit()によって学習が終わったモデルは、内部に「傾きaa」と「切片bb」を持っています。これらは、モデルの属性として確認できます。

model.coef_       # 傾き(a)にあたる値の配列
model.intercept_  # 切片(b)にあたる値

つまり、model.fit(X, y)を実行した瞬間に、コンピュータが自動的に「データに最もよく当てはまるaaとbb」を計算してくれているのです。これが、最初の単元で説明した「ルールを人間が書く代わりに、データからルールに相当するものを見つける」という機械学習の考え方そのものです。

model.predict([[6]])を実行すると、内部では次のような計算が行われています。

y=a×6+by = a \times 6 + b

これは、この章の最初のレッスンで学んだ一次関数の計算と全く同じです。scikit-learnは、この「aaとbbを見つける」という部分を自動化してくれる、便利な道具だと言えます。

次のレッスンでは、この「最もよく当てはまる」とはどういう意味なのか、「誤差」という考え方を使って詳しく見ていきます。

演習

演習を読み込んでいます…