タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

サイキットラーンを使った簡単な線形回帰のAIを実装

AI Python

t f B! P L

パソコンの画像


 仕事をしていていると、いまある手元のデータから未知のデータを予測したいときがあります。

そんなときはどうするでしょうか?

多くの人は、Excelにデータをいれて、散布図をつくり、回帰直線を引いて、予測値を推測するのではないでしょうか?

この一連の作業をAIを作って自動化させると、日々の作業が劇的に楽になります。

線形回帰は、統計学や機械学習の基本的な手法の一つです。データの傾向をモデリングし、未知のデータに対する予測を行うのに役立ちます。この記事では、Pythonの機械学習ライブラリであるサイキットラーンを使用して、簡単な線形回帰モデルを実装してみましょう。

〇コードの実装

1インストールと準備

まず最初に、サイキットラーンをインストールしましょう。ターミナルまたはコマンドプロンプトで以下のコマンドを実行します。

pip install scikit-learn

そして、以下のように必要なライブラリをインポートします。

import numpy as np

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

from sklearn.metrics import mean_squared_error

線形回帰の例として、仮想的なデータを生成してみましょう。以下のコードでは、numpyを使ってランダムなデータを生成しています。

2データ生成

ここは実際は自分の分析を行いたいデータを使います。

今回は仮なので・・・

np.random.seed(42)

X = 2 * np.random.rand(100, 1)

y = 4 + 3 * X + np.random.randn(100, 1)

3データ分割

データを学習用と予測用に分けています。

test_size=0.2とすることで2割のデータを予測用に取り分けています。

random_state=42は指定しないと、つどつどランダムに選択されるのであえて指定しています。別に12といった数を指定しても構いません。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

サイキットラーンのLinearRegressionモデルを使って線形回帰モデルをトレーニングします。

4モデルの作成とトレーニング

model = LinearRegression()

model.fit(X_train, y_train)

トレーニングが終わったら、テストデータを使ってモデルの予測を行い、性能を評価します。

5予測

y_pred = model.predict(X_test)

〇モデルの性能評価

mse = mean_squared_error(y_test, y_pred)

print(f"Mean Squared Error: {mse}")

結果の可視化

最後に、トレーニングデータとモデルの予測結果を可視化してみましょう。

〇トレーニングデータと予測結果の可視化

plt.scatter(X_train, y_train, color='blue', label='Training Data')

plt.scatter(X_test, y_test, color='green', label='Test Data')

plt.plot(X_test, y_pred, color='red', linewidth=3, label='Linear Regression')

plt.xlabel('X')

plt.ylabel('y')

plt.legend()

plt.show()

〇コードをまとめると

import numpy as np

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

from sklearn.metrics import mean_squared_error

np.random.seed(42)

X = 2 * np.random.rand(100, 1)

y = 4 + 3 * X + np.random.randn(100, 1)

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)

y_pred = model.predict(X_test)

print(y_pred)

ここまでのコードで予測値が表示されます。

モデルの評価をしたければ平均二乗誤差を算出する方法があります。

mse = mean_squared_error(y_test, y_pred)

print(f"Mean Squared Error: {mse}")

です。しかし・・・

score = model.score(x_test, y_test)

で決定係数r2を表示させることもできます。

〇注意点

単回帰分析をScikit-learnで行う際には、以下の注意点に留意すると良いでしょう。 

・データの準備:

単回帰分析では説明変数(特徴量)が1つしかないため、データセットの特徴量行列X1列のベクトルである必要があります。データの読み込みや前処理を行う際に、この点を確認しましょう。

・欠損値の取り扱い:

データセットに欠損値がある場合、これを適切に処理することが重要です。欠損値を補完するか、対象となるサンプルを取り除くなどの方法を検討してください。

・外れ値の影響:

単回帰分析は外れ値に敏感です。外れ値がモデルに大きな影響を与えないように注意が必要です。外れ値を検出し、適切な対処法を考えましょう。

・データの可視化:

データを可視化して、説明変数と目的変数の関係を理解しましょう。散布図や回帰直線を用いて、データの傾向やパターンを確認することが重要です。

・モデルの評価指標:

単回帰の場合、モデルの評価指標として一般的に使用されるのは平均二乗誤差(Mean Squared Error, MSE)や決定係数(Coefficient of Determination, R^2)です。これらの指標を確認してモデルの性能を判断しましょう。

・過学習の確認:

モデルが過学習していないかどうかを確認します。モデルがトレーニングデータに過剰に適合している場合、新しいデータに対する予測性能が低下する可能性があります。

・推論と因果関係の注意:

単回帰分析は変数間の相関関係を示すものであり、因果関係を示すものではありません。因果関係を主張する前に、ドメイン知識や実験デザインに基づいた考察が必要です。

これらの注意点に留意しながら単回帰分析を行うことで、より信頼性の高いモデルを構築し、適切な結論を導くことができます。

まとめ

これで、サイキットラーンを使った簡単な線形回帰の実装が完了しました。線形回帰は機械学習の基本であり、サイキットラーンを使用することで簡単に利用できます。データの生成、モデルのトレーニング、予測、評価、可視化といった手順を順に実行することで、機械学習の基本的な流れを理解できます。これを基にして、実際のデータに対して線形回帰を適用してみると良いでしょう。

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ