「教師付き学習の実践:線形回帰」

Supervised Learning Linear Regression

 

基本的な概要

 

線形回帰は、入力特徴量に基づいて連続的な目標変数を予測するための基本的な教師あり機械学習アルゴリズムです。その名前が示すように、従属変数と独立変数の関係が線形であることを仮定しています。したがって、従属変数Yを独立変数Xに対してプロットしようとすると、直線が得られます。この直線の方程式は次のように表されます:

ここで、

  • Y   予測された出力。
  • X = 複数の線形回帰の入力特徴量または特徴量行列
  • b0 = 切片(直線がY軸と交差する点)。
  • b1 = 直線の傾きまたは係数。

線形回帰の中心的なアイデアは、データポイントに対して最適な適合直線を見つけることであり、実際の値と予測値の間の誤差を最小限にすることです。これは、b0とb1の値を推定することによって行います。その後、この直線を予測に利用します。

 

Scikit-Learnを使用した実装

 

線形回帰の理論を理解したので、さらに理解を深めるために、Pythonの人気のある機械学習ライブラリであるScikit-Learnを使用してシンプルな線形回帰モデルを構築しましょう。理解を深めるために、以下を参考にしてください。

 

1. 必要なライブラリのインポート

 

まず、必要なライブラリをインポートする必要があります。

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error

 

2. データセットの分析

 

データセットはこちらにあります。トレーニングとテスト用に別々のCSVファイルが用意されています。進む前に、データセットを表示して分析しましょう。

# CSVファイルからトレーニングデータセットとテストデータセットを読み込む
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

# トレーニングデータセットの最初の数行を表示して構造を理解する
print(train.head())

 

出力:    

データセットには2つの変数が含まれており、xの値に基づいてyを予測したいとします。

# データ型や欠損値など、トレーニングデータセットとテストデータセットに関する情報をチェックする
print(train.info())
print(test.info())

 

出力:

RangeIndex: 700 entries, 0 to 699
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       700 non-null    float64
 1   y       699 non-null    float64
dtypes: float64(2)
memory usage: 11.1 KB




RangeIndex: 300 entries, 0 to 299
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   x       300 non-null    int64  
 1   y       300 non-null    float64
dtypes: float64(1), int64(1)
memory usage: 4.8 KB

 

上記の出力から、トレーニングデータセットに欠損値が1つあることがわかります。次のコマンドで欠損値を削除できます:

train = train.dropna()

 

また、データセットに重複があるかどうかをチェックし、モデルに入力する前に重複を削除してください。

duplicates_exist = train.duplicated().any()
print(duplicates_exist)

 

出力:

False

 

2. データセットの前処理

 

次に、以下のコードを使用して、トレーニングデータとテストデータ、および対象データを準備します。

# トレーニングデータおよびテストデータの x と y 列を抽出
X_train = train['x']
y_train = train['y']
X_test = test['x']
y_test = test['y']
print(X_train.shape)
print(X_test.shape)

 

出力:

(699, )
(300, )

 

上記のコードでは、1次元の配列を取得しています。一部の機械学習モデルでは、1次元の配列を使用することができますが、一般的な方法ではありませんし、予期しない動作を引き起こす可能性があります。そのため、上記のコードを (699,1) および (300,1) に変形し、データポイントごとに1つのラベルがあることを明示的に指定します。

X_train = X_train.values.reshape(-1, 1)
X_test = X_test.values.reshape(-1,1)

 

特徴量が異なるスケールである場合、一部の特徴量がモデルの学習プロセスを支配し、正しくないまたは最適でない結果になることがあります。そのため、特徴量を標準化して、平均が0、標準偏差が1になるようにします。

変更前:

print(X_train.min(),X_train.max())

 

出力:

(0.0, 100.0)

 

標準化:

scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
print((X_train.min(),X_train.max())

 

出力:

(-1.72857469859145, 1.7275858114641094)

 

これで、必要なデータの前処理手順は完了し、データはトレーニング用に準備ができました。

 

4. データセットの可視化

 

ターゲット変数と特徴量の関係を最初に可視化することは重要です。散布図を作成することで、これを行うことができます:

# 散布図を作成する
plt.scatter(X_train, y_train)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Train Data の散布図')
plt.grid(True)  # グリッドを有効にする
plt.show()

 

 

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

 

次に、Scikit Learn を使用して線形回帰モデルのインスタンスを作成し、トレーニングデータに適合させてみましょう。これにより、データに最も適合する直線の係数(傾き)が求められます。この直線を使用して予測が行われます。このステップのコードは次のようになります:

# 線形回帰モデルを作成する
model = LinearRegression()

# トレーニングデータにモデルを適合させる
model.fit(X_train, y_train)

# テストデータの目標値を予測するために訓練されたモデルを使用する
predictions = model.predict(X_test)

# モデルの性能を評価する評価指標として平均二乗誤差(MSE)を計算する
mse = mean_squared_error(y_test, predictions)
print(f'平均二乗誤差は:{mse:.4f}')

 

出力:

平均二乗誤差は:9.4329

 

6. 回帰直線の可視化

 

以下のコマンドを使用して回帰直線をプロットすることができます:

# 回帰直線をプロットする
plt.plot(X_test, predictions, color='red', linewidth=2, label='回帰直線')

plt.xlabel('X')
plt.ylabel('Y')
plt.title('線形回帰モデル')
plt.legend()
plt.grid(True)
plt.show()

 

出力:  

 

結論

 

以上です!Scikit-learnを使用して基本的な線形回帰モデルを正常に実装しました。ここで習得したスキルは、より多くの特徴を持つ複雑なデータセットに対処するために拡張することができます。これは、データ駆動型の問題解決とイノベーションのエキサイティングな世界への扉を開くために探求する価値のあるチャレンジです。     Kanwal Mehreenは、データサイエンスと医療の応用に興味を持つ、将来有望なソフトウェア開発者です。Kanwalは、APAC地域のGoogle Generation Scholar 2022に選ばれました。Kanwalは、トレンドトピックに関する記事を書くことで技術的な知識を共有することが大好きで、テック業界における女性の代表性向上に情熱を持っています。  

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI研究

「地震をAIで把握する:研究者が深層学習モデルを公開、予測の精度を向上」

研究チームは地震モデルの現状を変革しようとしています。 カリフォルニア大学バークレー校、カリフォルニア大学サンタクルー...

AI研究

「MITのインドの学生が声を必要としない会話デバイスを開発」

魅力的な進展として、名門マサチューセッツ工科大学(MIT)の学生が革新的なAI対応デバイス、AlterEgoを紹介しました。AlterE...

機械学習

Learning to build—Towards AI コミュニティニュースレター第1号

私たちは最新のニュースレターをお知らせすることをとても楽しみにしています!それは私たちの共同体についてのすべてですコ...

データサイエンス

ファインチューニングLLM パラメータ効率の改善 (PEFT) — LoRA および QLoRA — パート1

このブログでは、パラメータ効率的微調整(PEFT)のアイデアを理解し、PEFTの2つの最も重要な手法であるLoRAとQLoRAを探求します

機械学習

「脳に触発された学習アルゴリズムにより、人工およびスパイキングニューラルネットワークにメタプラスティシティを可能にする」

ニューラルネットワークにおけるクレジット割り当ては、自然の神経ネットワークにおいて多くのシナプス可塑性ルールを使用し...