前回のおさらいと今回のテーマ
こんにちは!前回は、データ前処理の基本として、欠損値処理や特徴量スケーリングについて解説しました。適切な前処理を行うことで、データがモデルに適した形になり、予測精度が向上します。これらの前処理が機械学習の基礎を支える重要なステップであることを理解していただけたかと思います。
今回は、前処理したデータを使って、線形回帰モデルを実装します。線形回帰は、機械学習における最も基本的なモデルの一つで、データの傾向を予測するのに広く使用されます。Scikit-learnを使って、シンプルかつ実用的なモデルを作成していきましょう!
線形回帰とは?
線形回帰(Linear Regression)は、入力変数(特徴量)と出力変数(目的変数)の間の線形関係をモデル化する手法です。例えば、家の広さ(入力変数)と価格(出力変数)の関係を予測する場合、線形回帰を使って、広さが増えると価格がどれだけ増えるかを数式で表現します。
線形回帰の数式は以下のように表されます。
[
y = w_0 + w_1 \cdot x
]
- ( y ): 予測される出力(目的変数)
- ( w_0 ): 切片(バイアス項)
- ( w_1 ): 傾き(係数)
- ( x ): 入力変数(特徴量)
この数式は直線の方程式と同じ形をしており、データに最も適した直線(回帰線)を見つけることが線形回帰の目的です。
線形回帰モデルの実装
それでは、Scikit-learnを使って線形回帰モデルを実装してみましょう。以下のステップで進めていきます。
- データセットの準備
- データの前処理
- データの分割
- モデルの構築と訓練
- モデルの評価と可視化
1. データセットの準備
まず、Pandasを使ってサンプルデータを読み込みます。ここでは、Scikit-learnが提供するBoston
データセットを例にします。このデータセットは、アメリカのボストン市における住宅価格に関するデータで、13個の特徴量(家の広さ、部屋の数、犯罪率など)が含まれています。
import pandas as pd
from sklearn.datasets import load_boston
# データの読み込み
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['PRICE'] = boston.target
# データの確認
print(df.head())
2. データの前処理
次に、データを前処理します。線形回帰はスケーリングが必要なモデルではありませんが、スケーリングすると学習がより安定する場合があります。ここでは、RM
(部屋数)とPRICE
(住宅価格)に焦点を当ててモデルを構築します。
from sklearn.preprocessing import StandardScaler
# 特徴量とターゲットの選択
X = df[['RM']] # 部屋数
y = df['PRICE'] # 価格
# スケーリングの適用
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
3. データの分割
データを訓練用とテスト用に分割します。これにより、モデルの性能をテストデータで評価できるようになります。
from sklearn.model_selection import train_test_split
# データの分割
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
4. モデルの構築と訓練
Scikit-learnのLinearRegression
クラスを使ってモデルを作成し、訓練データで学習させます。
from sklearn.linear_model import LinearRegression
# モデルの作成と訓練
model = LinearRegression()
model.fit(X_train, y_train)
- LinearRegression(): 線形回帰モデルを作成します。
- fit(): 訓練データとターゲットを使ってモデルを訓練します。
5. モデルの評価と可視化
モデルの性能を評価するために、テストデータを使って予測を行い、実際の値と比較します。また、予測結果をグラフで可視化します。
import matplotlib.pyplot as plt
import numpy as np
# テストデータで予測
y_pred = model.predict(X_test)
# モデルの評価(決定係数R^2)
r2_score = model.score(X_test, y_test)
print(f"R^2 Score: {r2_score}")
# グラフの描画
plt.scatter(X_test, y_test, color='blue', label='Actual')
plt.scatter(X_test, y_pred, color='red', label='Predicted')
plt.title('Linear Regression: Room Count vs. Price')
plt.xlabel('Number of Rooms (standardized)')
plt.ylabel('Price')
plt.legend()
plt.show()
- predict(): モデルを使ってテストデータの予測を行います。
- score(): モデルの性能を決定係数(R²)で評価します。R²は、1に近いほどモデルの精度が高いことを意味します。
グラフでは、青い点が実際の住宅価格、赤い点が予測された価格を示しています。モデルがどの程度実際のデータに近づいているかを視覚的に確認できます。
まとめ
今回は、線形回帰モデルの基本的な実装方法について解説しました。Scikit-learnを使えば、数行のコードでモデルを構築し、予測と評価が簡単に行えます。線形回帰は、機械学習の入門的なモデルであり、データの関係性を理解するために非常に有効です。今回学んだステップを基に、他のデータセットや特徴量でも試してみてください。
次回予告
次回は、分類モデルの実装として、ロジスティック回帰モデルを用いて分類タスクを行う方法を解説します。分類問題の基礎を学び、様々な応用ができるようになりましょう!
注釈
- 線形回帰: 入力変数と出力変数の線形関係をモデル化する手法。連続値の予測に適している。
- 決定係数(R²): モデルの予測精度を示す指標で、1に近いほど良好なモデルを示す。
コメント