そんなときはどうするでしょうか?
多くの人は、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は指定しないと、つどつどランダムに選択されるのであえて指定しています。別に1や2といった数を指定しても構いません。
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つしかないため、データセットの特徴量行列Xは1列のベクトルである必要があります。データの読み込みや前処理を行う際に、この点を確認しましょう。
・欠損値の取り扱い:
データセットに欠損値がある場合、これを適切に処理することが重要です。欠損値を補完するか、対象となるサンプルを取り除くなどの方法を検討してください。
・外れ値の影響:
単回帰分析は外れ値に敏感です。外れ値がモデルに大きな影響を与えないように注意が必要です。外れ値を検出し、適切な対処法を考えましょう。
・データの可視化:
データを可視化して、説明変数と目的変数の関係を理解しましょう。散布図や回帰直線を用いて、データの傾向やパターンを確認することが重要です。
・モデルの評価指標:
単回帰の場合、モデルの評価指標として一般的に使用されるのは平均二乗誤差(Mean
Squared Error, MSE)や決定係数(Coefficient of Determination, R^2)です。これらの指標を確認してモデルの性能を判断しましょう。
・過学習の確認:
モデルが過学習していないかどうかを確認します。モデルがトレーニングデータに過剰に適合している場合、新しいデータに対する予測性能が低下する可能性があります。
・推論と因果関係の注意:
単回帰分析は変数間の相関関係を示すものであり、因果関係を示すものではありません。因果関係を主張する前に、ドメイン知識や実験デザインに基づいた考察が必要です。
これらの注意点に留意しながら単回帰分析を行うことで、より信頼性の高いモデルを構築し、適切な結論を導くことができます。
まとめ
これで、サイキットラーンを使った簡単な線形回帰の実装が完了しました。線形回帰は機械学習の基本であり、サイキットラーンを使用することで簡単に利用できます。データの生成、モデルのトレーニング、予測、評価、可視化といった手順を順に実行することで、機械学習の基本的な流れを理解できます。これを基にして、実際のデータに対して線形回帰を適用してみると良いでしょう。
0 件のコメント:
コメントを投稿