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

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

データサイエンス

「OpenAIの信頼性と安全性の責任者が辞任:ChatGPTに与える影響は何ですか?」

OpenAIという先駆的な人工知能企業では、ChatGPTなどの革新的な技術により、世界に生成型AIを紹介しました。LinkedInでの最近...

機械学習

マルチクエリアテンションの解説

マルチクエリアテンション(MQA)は、モデルのパフォーマンスを保証しながら、デコーダ内のトークン生成の速度を加速すること...

機械学習

「研究:社会的に意識した時間的因果関係デコーダー推薦システム」

エルタイエブ・アフメド(リサーチエンジニア)とサブラジット・ロイ(シニアリサーチサイエンティスト)によるGoogle Resear...

機械学習

グラフの復活:グラフの年ニュースレター2023年春

今日のナレッジグラフ、グラフデータベース、グラフアナリティクス、グラフAIの現在地と今後の方向性に関するニュースと分析...

機械学習

「大規模な言語モデルの探索-パート3」

「この記事は主に自己学習のために書かれていますしたがって、広く深く展開されています興味のあるセクションをスキップした...

機械学習

このAIニュースレターはあなたが必要なものです #68

今週は、マルチモーダルの能力を持つ GPT-4 に対抗する候補として、新しいオープンソースのマルチモーダルモデルである LLaVA...