Scikit-learnのLinearRegressionで予測モデルを構築!サンプルコードで学ぶ線形回帰

Python

機械学習を始めてみたいけど、何から手をつければ良いかわからない…」 「Pythonで予測モデルを作ってみたいけど、難しそう…」

そんな風に感じていませんか?

この記事では、Pythonの有名ライブラリであるScikit-learnに搭載されているLinearRegressionを使い、機械学習の基本である「線形回帰モデル」を構築する方法を、初心者の方にも分かりやすく解説します。

サンプルコードを交えながら、データの準備からモデルの学習、そして予測までの一連の流れを体験できます。この記事を読み終える頃には、あなたも予測モデル作成の第一歩を踏み出せているはずです。

そもそも線形回帰とは?

線形回帰とは、データ間の関係性を一本の直線で表現する、非常にシンプルで強力な機械学習の手法です。

例えば、「部屋の広さ(説明変数)」から「家賃(目的変数)」を予測するような場面で使われます。部屋が広くなるほど家賃が高くなる、という関係性を直線で表し、未知の広さの部屋の家賃を予測します。

この手法の素晴らしい点は、そのシンプルさゆえに結果の解釈がしやすく、多くの予測問題の基礎となる考え方であることです。

Scikit-learnなら数行で実装可能

この線形回帰モデルは、Pythonの機械学習ライブラリScikit-learnを使えば、驚くほど簡単なコードで実装できます。複雑な数式を自分でプログラムする必要はなく、ライブラリが提供する便利な命令(関数やクラス)を呼び出すだけでOKです。

この記事で紹介するコードは、Scikit-learnのバージョン1.0以降で動作確認をしていますが、LinearRegressionの基本的な使い方は多くのバージョンで共通しています。

LinearRegressionによる予測モデル構築の手順

ここからは、実際にコードを書きながら線形回帰モデルを構築する手順を見ていきましょう。今回は、シンプルなサンプルデータを使って「学習時間」から「テストの点数」を予測するモデルを作成します。

Step1: 必要なライブラリの準備

まず、モデル構築に必要なライブラリを準備します。今回はscikit-learnと、データ作成のためのnumpyを使用します。

# scikit-learnから線形回帰モデルのクラスをインポート
from sklearn.linear_model import LinearRegression
# データを取り扱うためのnumpyをインポート
import numpy as np

# もしライブラリがインストールされていない場合は、
# pip install scikit-learn numpy
# をターミナルで実行してください。

Step2: サンプルデータの作成

次に、モデルを学習させるためのサンプルデータを作成します。Xが学習時間(説明変数)、yがテストの点数(目的変数)です。

# 学習時間 (X)
X = np.array([1, 2, 3, 4, 5, 6, 7, 8]).reshape(-1, 1)

# テストの点数 (y)
y = np.array([40, 55, 60, 70, 75, 80, 88, 92])

# Xはscikit-learnで扱えるように2次元配列に変換しています
# .reshape(-1, 1) は「行数はデータに合わせて、列数は1にしてね」という意味です

Step3: モデルのインスタンス化と学習 (fit)

データが準備できたら、いよいよモデルを学習させます。LinearRegressionクラスのインスタンスを作成し、fitメソッドにデータXyを渡すだけです。

# 線形回帰モデルのインスタンスを作成
model = LinearRegression()

# モデルをデータに適合させる(学習させる)
model.fit(X, y)

print("モデルの学習が完了しました。")

たったこれだけで、コンピュータはデータXyの関係性(どのような直線が最もデータにフィットするか)を自動で学習してくれます。

Step4: 新しいデータで予測 (predict)

モデルが学習できたら、新しいデータを使って予測してみましょう。例えば、「9時間」勉強した場合のテストの点数を予測してみます。

# 9時間勉強した場合の点数を予測
# predictメソッドには、学習時と同じ形式の2次元配列を渡します
new_X = np.array([[9]])
predicted_score = model.predict(new_X)

print(f"9時間勉強した場合の予測点数: {predicted_score[0]:.2f} 点")
# 出力例: 9時間勉強した場合の予測点数: 99.88 点

学習したデータに基づいて、非常に精度の高い予測ができました。これが予測モデルの基本的な使い方です。

モデルの性能を確認してみよう

作成したモデルがどれくらい良いものなのか、性能を評価したり、中身を覗いたりしてみましょう。

決定係数(R²スコア)で精度を評価

決定係数(R²)は、モデルがどれだけデータのばらつきを説明できているかを示す指標で、0から1の間の値を取ります。1に近いほど、モデルの当てはまりが良いことを意味します。

# 決定係数を計算
r2_score = model.score(X, y)

print(f"モデルの決定係数 (R^2): {r2_score:.4f}")
# 出力例: モデルの決定係数 (R^2): 0.9839

0.9839という非常に高い値が出ました。これは、作成したモデルがデータの変動の約98.4%を説明できていることを示しており、非常に精度の良いモデルだと言えます。

モデルが学習した「係数」と「切片」

線形回帰モデルは、中学校で習う一次関数の式 y=ax+b と同じ構造をしています。

  • a: 傾き(係数 coef_
  • b: y切片(切片 intercept_

モデルが学習したこれらの値を確認してみましょう。

# 学習したモデルの係数(傾き)
print(f"係数 (a): {model.coef_[0]:.2f}")
# 出力例: 係数 (a): 7.44

# 学習したモデルの切片(y切片)
print(f"切片 (b): {model.intercept_:.2f}")
# 出力例: 切片 (b): 32.88

これは、「テストの点数 = 7.44 * 学習時間 + 32.88」という関係式をモデルが学習したことを意味します。学習時間が1時間増えるごとに、点数が約7.44点上がると解釈できますね。

まとめ:Scikit-learnで機械学習の第一歩を踏み出そう

今回は、Scikit-learnのLinearRegressionを使って、線形回帰モデルを構築し、予測を行うまでの一連の流れを解説しました。

  • 線形回帰は、データ間の関係を直線で表すシンプルな手法
  • Scikit-learnを使えば、fitで学習、predictで予測が簡単にできる
  • scoreでモデルの精度を評価し、coef_intercept_でモデルの中身を確認できる

線形回帰は、数ある機械学習の手法の中でも特に基本となる重要なアルゴリズムです。まずはこの記事のコードを実際に動かしてみて、「自分で予測モデルを作れた!」という成功体験を掴んでみてください。

ここから、さらに複雑なモデルに挑戦したり、現実のデータで予測にチャレンジしたりと、あなたの機械学習の世界は大きく広がっていくはずです。

コメント

タイトルとURLをコピーしました