線性回歸(Linear Regression)是一種基本且常用的統計模型,用於預測目標變數與一個或多個自變數之間的線性關係。今天,我們將介紹如何使用 Sklearn 建立簡單的線性回歸模型,並用 Iris 資料集進行實作。
線性回歸是一種模型,用來表示目標變數(應變數)與一個或多個自變數之間的線性關係。簡單線性回歸的數學公式如下:
[ y = \beta_0 + \beta_1 x + \epsilon ]
其中:
如果有多個自變數,我們可以使用多元線性回歸來表示:
[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n + \epsilon ]
在這個實作中,我們將使用 Iris 資料集中 sepal length (cm)
來預測 petal length (cm)
,建立一個簡單的線性回歸模型。
首先,我們需要從資料集中選取自變數和目標變數,並進行資料分割。
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%),以便我們進行模型訓練和評估。
接下來,我們將使用 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)
之間的關係,最後輸出模型的截距和斜率。
在模型訓練完成後,我們可以使用測試集來進行預測,並評估模型的性能。
# 使用測試集進行預測
y_pred = regressor.predict(X_test)
# 顯示前五筆預測結果
print("實際值:", y_test.values[:5])
print("預測值:", y_pred[:5])
這段程式碼會使用測試集進行預測,並顯示前五筆實際值與預測值的對比。
我們可以使用均方誤差(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 表示模型越能解釋自變數與目標變數之間的變異。
我們可以將回歸線繪製在資料散點圖上,以直觀地展示模型的預測效果。
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()
這段程式碼會繪製訓練資料的散點圖與模型的回歸線,我們可以直觀地看到模型的擬合效果。
在現實中,目標變數通常受到多個自變數的影響,因此我們可以使用多元線性回歸來建模。接下來,我們將同時使用花萼長度與寬度來預測花瓣長度。
# 選取多個自變數
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_}')
這段程式碼使用多個自變數來建立多元線性回歸模型,並輸出模型的截距和斜率。
今天我們學習了如何使用 Sklearn 建立簡單的線性回歸模型,包括:
LinearRegression
建立模型並進行訓練。線性回歸是機器學習中最基本的模型之一,它能夠幫助我們理解自變數與目標變數之間的線性關係。接下來,我們將學習如何使用 Sklearn 進行分類分析,並對資料進行分類預測。