iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Python

30天Python資料分析挑戰:從基礎到視覺化系列 第 28

Day 28: 使用 Sklearn 進行簡單的線性回歸

  • 分享至 

  • xImage
  •  

Day 28: 使用 Sklearn 進行簡單的線性回歸

線性回歸(Linear Regression)是一種基本且常用的統計模型,用於預測目標變數與一個或多個自變數之間的線性關係。今天,我們將介紹如何使用 Sklearn 建立簡單的線性回歸模型,並用 Iris 資料集進行實作。

1. 線性回歸的基本概念

線性回歸是一種模型,用來表示目標變數(應變數)與一個或多個自變數之間的線性關係。簡單線性回歸的數學公式如下:

[ y = \beta_0 + \beta_1 x + \epsilon ]

其中:

  • ( y ) 為目標變數(應變數)
  • ( x ) 為自變數(解釋變數)
  • ( \beta_0 ) 為截距(intercept)
  • ( \beta_1 ) 為斜率(slope)
  • ( \epsilon ) 為誤差項(error term)

如果有多個自變數,我們可以使用多元線性回歸來表示:

[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n + \epsilon ]

2. 建立簡單線性回歸模型

在這個實作中,我們將使用 Iris 資料集中 sepal length (cm) 來預測 petal length (cm),建立一個簡單的線性回歸模型。

2.1 資料準備

首先,我們需要從資料集中選取自變數和目標變數,並進行資料分割。

import pandas as pd
from sklearn.model_selection import train_test_split

# 讀取 Iris 資料集
iris_df = pd.read_csv('/content/drive/MyDrive/iris/iris_dataset.csv')

# 選取自變數(sepal length)與目標變數(petal length)
X = iris_df[['sepal length (cm)']]
y = iris_df['petal length (cm)']

# 將資料分為訓練集與測試集(80% 訓練集,20% 測試集)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 檢視訓練集和測試集的大小
print(f'訓練集大小:{X_train.shape[0]} 筆')
print(f'測試集大小:{X_test.shape[0]} 筆')

這段程式碼會將 Iris 資料集分為訓練集(80%)和測試集(20%),以便我們進行模型訓練和評估。

2.2 建立與訓練線性回歸模型

接下來,我們將使用 Sklearn 的 LinearRegression 來建立線性回歸模型,並使用訓練集進行訓練。

from sklearn.linear_model import LinearRegression

# 建立線性回歸模型
regressor = LinearRegression()

# 使用訓練集進行模型訓練
regressor.fit(X_train, y_train)

# 顯示模型的截距與斜率
print(f'模型截距(intercept):{regressor.intercept_}')
print(f'模型斜率(slope):{regressor.coef_[0]}')

這段程式碼會建立一個線性回歸模型,並訓練它來學習 sepal length (cm)petal length (cm) 之間的關係,最後輸出模型的截距和斜率。

3. 模型預測與評估

在模型訓練完成後,我們可以使用測試集來進行預測,並評估模型的性能。

3.1 使用測試集進行預測

# 使用測試集進行預測
y_pred = regressor.predict(X_test)

# 顯示前五筆預測結果
print("實際值:", y_test.values[:5])
print("預測值:", y_pred[:5])

這段程式碼會使用測試集進行預測,並顯示前五筆實際值與預測值的對比。

3.2 模型性能評估

我們可以使用均方誤差(Mean Squared Error, MSE)和決定係數(R-squared, (R^2))來評估模型的性能。

from sklearn.metrics import mean_squared_error, r2_score

# 計算均方誤差(MSE)
mse = mean_squared_error(y_test, y_pred)

# 計算決定係數(R^2)
r2 = r2_score(y_test, y_pred)

print(f'均方誤差(MSE):{mse:.2f}')
print(f'決定係數(R^2):{r2:.2f}')

這段程式碼會計算模型的均方誤差和決定係數,MSE 越小表示模型預測越精確,R-squared 越接近 1 表示模型越能解釋自變數與目標變數之間的變異。

4. 繪製回歸線圖表

我們可以將回歸線繪製在資料散點圖上,以直觀地展示模型的預測效果。

import matplotlib.pyplot as plt

# 繪製訓練集的資料點與回歸線
plt.scatter(X_train, y_train, color='blue', label='訓練資料')
plt.plot(X_train, regressor.predict(X_train), color='red', linewidth=2, label='回歸線')
plt.title('花萼長度與花瓣長度的回歸分析')
plt.xlabel('花萼長度 (cm)')
plt.ylabel('花瓣長度 (cm)')
plt.legend()
plt.show()

這段程式碼會繪製訓練資料的散點圖與模型的回歸線,我們可以直觀地看到模型的擬合效果。

5. 使用多變數進行多元線性回歸

在現實中,目標變數通常受到多個自變數的影響,因此我們可以使用多元線性回歸來建模。接下來,我們將同時使用花萼長度與寬度來預測花瓣長度。

# 選取多個自變數
X_multi = iris_df[['sepal length (cm)', 'sepal width (cm)']]
y_multi = iris_df['petal length (cm)']

# 將資料分為訓練集與測試集
X_train_multi, X_test_multi, y_train_multi, y_test_multi = train_test_split(X_multi, y_multi, test_size=0.2, random_state=42)

# 建立多元線性回歸模型
regressor_multi = LinearRegression()

# 使用訓練集進行模型訓練
regressor_multi.fit(X_train_multi, y_train_multi)

# 顯示多元模型的截距與斜率
print(f'多元模型截距:{regressor_multi.intercept_}')
print(f'多元模型斜率:{regressor_multi.coef_}')

這段程式碼使用多個自變數來建立多元線性回歸模型,並輸出模型的截距和斜率。

6. 小結

今天我們學習了如何使用 Sklearn 建立簡單的線性回歸模型,包括:

  1. 資料準備:將資料分為訓練集與測試集。
  2. 建立與訓練模型:使用 LinearRegression 建立模型並進行訓練。
  3. 模型預測與評估:使用測試集進行預測,並計算均方誤差和決定係數。
  4. 繪製回歸線:可視化模型的擬合效果。
  5. 多元線性回歸:使用多個自變數來建立更複雜的模型。

線性回歸是機器學習中最基本的模型之一,它能夠幫助我們理解自變數與目標變數之間的線性關係。接下來,我們將學習如何使用 Sklearn 進行分類分析,並對資料進行分類預測。


上一篇
Day 27: 使用 Pandas 進行進階數據操作
下一篇
Day 29: 使用 Sklearn 進行分類分析
系列文
30天Python資料分析挑戰:從基礎到視覺化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言