隨著計算機技術的迅猛發展,機器學習在各行各業中已經成為一個不可或缺的工具。其中,回歸算法是機器學習領域的一個關鍵組成部分,它被廣泛用于預測數值型的輸出結果。本文將重點介紹幾種常見的回歸算法,包括線性回歸、多項式回歸、決策樹回歸以及隨機森林回歸,并通過案例來解釋什么是回歸分析。
回歸分析是一種統計學方法,用于建立一個數學模型,以了解一個或多個自變量(獨立變量)與一個因變量(依賴變量)之間的關系。這個關系通常用一個方程來表示,該方程可以用來預測因變量的值。回歸分析的目標是找到最合適的模型,以最好地擬合觀測數據點,從而使我們能夠進行有效的預測和推斷。
回歸分析在現實生活中有許多應用。以孩子的身高預測為例,我們可以收集大量不同家庭的數據,包括父母的身高和他們孩子的身高。然后,我們可以使用回歸算法來建立一個模型,該模型可以根據父母的身高預測孩子的身高,考慮到遺傳因素。這個模型可以幫助我們更好地理解身高的遺傳規律,并在醫學或遺傳學研究中有重要的應用價值。
回歸(Regression)簡介
回歸是一種簡單而強大的預測模型,旨在學習輸入變量和目標變量之間的關系。為了簡單理解回歸,我們回歸熟悉簡單直線方程(線性回歸):y=ax+b
這個既熟悉又簡單的方程:y=ax+b用于在二維坐標系上畫一條線。對這個方程進行分解以了解其每個術語。
- y:因變量,隨自變量變化而改變的量。
- x:一個自變量,是一種可以改變的變量,是因果關系中的因變量。
- a:這是線的斜率,它告訴線的實際陡峭程度。
- b:這是 y 截距,它是y什么時候x等于 0。
回歸算法的作用是嘗試學習或近似求解a和b使得對于任何值x我們可以準確預測的值y. y=ax+b 是一條線或直線,所以稱之為線性回歸,是回歸家族最為簡單、直觀的。如果數據之間的關系更加復雜,線性模型可能無法很好地擬合數據,需要考慮使用其他回歸方法,例如多項式回歸、決策樹回歸或隨機森林回歸,以更好地適應數據的復雜性;這些方法更好適應非線性關系,從而提高了對數據的擬合能力。接下來先從最簡單線性回歸開始。
線性回歸(LinearRegression)
為了更直觀地理解線性回歸概念,假設我們想要根據房屋的面積來預測房屋的價格。我們所關心的預測值是房價(house price),這個預測值依賴于房屋的面積(area)。如果房屋的面積與價格存在關聯,那么隨著面積的增加,我們應該觀察到價格也相應上升的趨勢。這有助于我們理解這兩個變量之間的關系,從而使我們能夠對任何給定面積的房屋價格做出預測。
房屋特征及價格的數據集來源于Kaggle,包含有關房屋屬性和價格的信息:https://www.kaggle.com/datasets/yasserh/housing-prices-dataset
利用SNB快速創建一個散點圖,可視化房價與面積兩個變量之間關系。
數據中似乎存在上升趨勢,然而,在散點圖的左下角也似乎有一些輕微的聚集。這可能表明我們的數據存在一定程度的偏斜,因此,讓我們也來可視化每個變量的分布情況。
正如預想的一樣,數據呈右偏態(right skewed)。在大多數機器學習項目中,數據的偏斜性對預測產生不理想的結果,但,有方法可以解決這個問題。需要使用"對數(log/ln)"對數據轉換到更接近正態分布的情況。
regression_data = df1[['area', 'price']]
transformed = np.log(regression_data)
現在數據是基本對稱的,接下來可以將數據分割成訓練集和測試集,并開始訓練我們的模型。
import pandas as pd
import seaborn as sns
import numpy as np
from math import sqrt
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error
from sklearn.model_selection import trAIn_test_split
inputs = np.array(transformed['area']).reshape(-1, 1)
target = transformed['price']
x_train, x_test, y_train, y_test = train_test_split(inputs, target, test_size=0.2, random_state = 2023)
model = LinearRegression()
model.fit(x_train, y_train)
模型評估(Evaluation)
變量model是已經訓練好的回歸模型,評估/檢查模型在預測房屋價格方面的性能(效果和準確性)。首先,我們會在測試數據集上調用predict()方法,以獲得一組預測的房屋價格;然后預測和實際的房屋價格進行計算評估指標,比如:r2 score 、rmse(root mean squared error).
- r2:告訴我們模型與數據的擬合程度并解釋我們的數據。r2分數為1.0意味著完美擬合,我們的模型可以解釋 100% 的數據集。r2 為0意味著模型無法確定數據集中的可預測關系。
- rmse:是我們預測誤差的偏差。它告訴我們數據點與回歸線的平均距離有多遠。換句話說,它告訴您數據在最佳擬合線周圍的集中程度。例如,rmse為10 意味著無論我們預測什么價格,我們都應該期望實際價格與預測價格相差 10 美元以內。
predictions = model.predict(x_test)
rmse = round(sqrt(mean_squared_error(y_test, predictions)), 2)
r2 = round(r2_score(y_test, predictions), 2)
print('rmse:',rmse)
print('r2:',r2)
rmse: 0.33
r2: 0.19
最后,可以提取最佳擬合線: y=ax+b, 過引用屬性model.coef和model.intercept_模型輸出來繪制數據的回歸線。
slope = model.coef_[0]
intercept = model.intercept_
print(f"slope:{slope}")
print(f"intercept:{intercept}")
x = np.linspace(7, 10, 5)
y = [(slope * val) + intercept for val in x]
var = {'x': x, 'y': y}
line = pd.DataFrame.from_records(var)
import seaborn as sns
fig, ax = plt.subplots(figsize=(8, 5))
sns.scatterplot(x="area", y="price", data=transformed,ax=ax)
sns.regplot(x="x", y="y", data=line,color='r')
plt.show()
多元線性回歸(Multiple linear regression)
上面示例是簡單線性回歸模型中,我們只使用一個輸入值來預測目標值。這種簡單性使得數據可視化和模型實現變得容易。然而,簡單線性回歸的結果可能不是最準確的。為了提高模型的準確性,可以訓練一個多元線性回歸模型。區別是:多元線性回歸可以利用多個輸入值(多個自變量)來預測目標變量,因此得名"多元"線性回歸。
分類變量的編碼
在大多數機器學習模型中,輸入自變量必須是數值。這些模型的數學性質使得類似于 bedrooms = 4 或 bathrooms = 2 的列很容易理解。然而,諸如 basement = Yes 或 furnish_status = furnished 這樣的分類意味著對于模型來說毫無意義。我們需要一種方法來對這些分類值進行編碼,以便模型知道如何賦予這些值含義。LabelEncoder編碼是一種常見編碼方式:將類別型進行排序并賦值。
使用LabelEncoder 對數據集分類變量進行編碼:
for col in df1.columns :
if df1[col].dtype == 'object':
df1[col] = LabelEncoder().fit_transform(df1[col])
df1
接下來使用多元線性回歸進行建模和評估:
inputs = df1[df1.columns[1:]]
target = df1['price']
mul_x_train, mul_x_test, mul_y_train, mul_y_test = train_test_split(inputs, target, test_size=.2, random_state = 222)
model = LinearRegression()
model.fit(mul_x_train, mul_y_train)
y_pred = model.predict(mul_x_test)
multiple_mse = round(sqrt(mean_squared_error(mul_y_test, y_pred)), 2)
multiple_r2 = round(r2_score(mul_y_test, y_pred), 2)
print(f'multiple_mse:{multiple_mse}')
print(f'multiple_r2:{multiple_r2}')
模型性能指標如下:
multiple_mse:0.22
multiple_r2:0.71
模型比較
就最佳擬合而言,簡單模型具有 19% 的 R² 分數,而多元線性回歸模型具有 71% 的 R² 分數。性能提高了 373%.
就誤差范圍而言,簡單模型具有 0.33 的 RMSE 分數,而多元線性回歸模型具有 0.22 的 RMSE 分數。誤差范圍減小了 66.67%!
理想情況下:希望一個模型具有高的 R² 分數和低的 RMSE。多元線性回歸模型是更好的模型,因為它將提供更精確的、更準確的預測。
本文介紹了一些在實際機器學習任務中非?;A的概念,例如如何進行數據轉換,將數據劃分成訓練集和測試集,以及如何擬合線性回歸模型并評估其性能。在以后的教程中,我們將繼續介紹更復雜的回歸算法,如多項式回歸、決策樹回歸和隨機森林回歸等。