原來機(jī)器學(xué)習(xí)這么簡(jiǎn)單—線性回歸
一、什么是線性回歸?
線性回歸 是一種基本但極為重要的監(jiān)督學(xué)習(xí)算法,廣泛用于預(yù)測(cè)連續(xù)數(shù)值型數(shù)據(jù)。其主要目標(biāo)是通過分析已知數(shù)據(jù)點(diǎn)之間的關(guān)系,找出一個(gè)能夠用來預(yù)測(cè)新數(shù)據(jù)點(diǎn)的函數(shù)模型。在最簡(jiǎn)單的情況下,線性回歸嘗試找到一條直線,這條直線能夠最佳地通過數(shù)據(jù)點(diǎn),并最小化預(yù)測(cè)值與實(shí)際值之間的差異。
二、線性回歸的原理
圖1 1 維和 2 維輸入特征的線性模型
2.4 模型的評(píng)估
在得到模型后,我們需要評(píng)估其效果,常用的評(píng)估指標(biāo)包括:
- 均方誤差(MSE):衡量模型預(yù)測(cè)值與實(shí)際值之間的平均誤差平方。
三、案例分析
我們將使用加州房?jī)r(jià)數(shù)據(jù)集(California Housing Dataset),這是一個(gè)公開的機(jī)器學(xué)習(xí)數(shù)據(jù)集,包含加利福尼亞州各地區(qū)的房屋信息,包括房?jī)r(jià)、中位數(shù)收入、住房年齡等特征。我們將選擇合適的特征來預(yù)測(cè)房?jī)r(jià)。
1. 導(dǎo)入數(shù)據(jù)集和必要的庫(kù)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 設(shè)置字體,解決中文顯示問題
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑體字體顯示中文
plt.rcParams['axes.unicode_minus'] = False # 解決坐標(biāo)軸負(fù)號(hào)顯示問題
# 加載加州房?jī)r(jià)數(shù)據(jù)集
california = fetch_california_housing()
data = pd.DataFrame(california.data, columns=california.feature_names)
data['MedHouseVal'] = california.target
data
2. 創(chuàng)建和訓(xùn)練線性回歸模型
# 選擇特征 'MedInc' 進(jìn)行建模
X = data[['MedInc', 'HouseAge', 'AveRooms', 'AveOccup']]
y = data['MedHouseVal']
# 分割數(shù)據(jù)為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化線性回歸模型
model = LinearRegression()
# 訓(xùn)練模型
model.fit(X_train, y_train)
3. 模型預(yù)測(cè)和評(píng)估
# 使用測(cè)試集進(jìn)行預(yù)測(cè)
y_pred = model.predict(X_test)
# 評(píng)估模型表現(xiàn)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方誤差(MSE): {mse}")
print(f"決定系數(shù)(R^2): {r2}")
均方誤差(MSE): 0.657451727882265
決定系數(shù)(R^2): 0.49828508595474374
4. 結(jié)果可視化
# 可視化預(yù)測(cè)值與實(shí)際值的比較
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.5, label="預(yù)測(cè)值 vs 實(shí)際值")
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2, label="理想的直線 $y = x$")
plt.xlabel("實(shí)際房?jī)r(jià)")
plt.ylabel("預(yù)測(cè)房?jī)r(jià)")
plt.title("實(shí)際房?jī)r(jià) vs 預(yù)測(cè)房?jī)r(jià)")
plt.legend()
plt.show()
四、總結(jié)
線性回歸通過簡(jiǎn)單的數(shù)學(xué)關(guān)系和優(yōu)化方法,為我們提供了一個(gè)有效的工具來預(yù)測(cè)連續(xù)型數(shù)據(jù)。它不僅易于理解和實(shí)現(xiàn),而且在實(shí)際應(yīng)用中非常有效,是入門機(jī)器學(xué)習(xí)的理想算法之一。通過深入理解線性回歸的原理和計(jì)算過程,我們可以更好地掌握機(jī)器學(xué)習(xí)的核心思想,并為更復(fù)雜的算法打下堅(jiān)實(shí)的基礎(chǔ)。
本文轉(zhuǎn)載自??寶寶數(shù)模AI??,作者: BBSM ????
