廣州做手機(jī)網(wǎng)站建設(shè)營(yíng)銷咨詢公司
目錄
摘要:
一、簡(jiǎn)單線性回歸與多元線性回歸
1、簡(jiǎn)單線性回歸
2、多元線性回歸
3、殘差
二、線性回歸的正規(guī)方程解
1、線性回歸訓(xùn)練流程
2、線性回歸的正規(guī)方程解
(1)適用場(chǎng)景
(2)正規(guī)方程解的公式
三、衡量線性回歸的性能指標(biāo)
四、scikit-learn線性回歸實(shí)踐 - 波斯頓房?jī)r(jià)預(yù)測(cè)
1、數(shù)據(jù)集介紹
2、LinearRegression
摘要:
????????文章主要介紹了線性回歸相關(guān)內(nèi)容,包括簡(jiǎn)單線性回歸與多元線性回歸的概念及示例,闡述了殘差的定義、在理想與非理想模型中的情況及意義,還講解了線性回歸的正規(guī)方程解,涵蓋其適用場(chǎng)景、公式推導(dǎo)與代碼實(shí)現(xiàn),提及衡量線性回歸性能指標(biāo)可參考其他文章,最后以 scikit-learn 中的 LinearRegression 類為例,介紹了其在波士頓房?jī)r(jià)預(yù)測(cè)實(shí)踐中的應(yīng)用,包括數(shù)據(jù)集情況、類的常用參數(shù)及訓(xùn)練、預(yù)測(cè)函數(shù)的使用等。
一、簡(jiǎn)單線性回歸與多元線性回歸
1、簡(jiǎn)單線性回歸
????????在生活中,我們常常能碰到這么一種情況,一個(gè)變量會(huì)跟著另一個(gè)變量的變化而變化,如圓的周長(zhǎng)與半徑的關(guān)系,當(dāng)圓的半徑確定了,那么周長(zhǎng)也就確定了。還有一種情況就是,兩個(gè)變量之間看似存在某種關(guān)系,但又沒(méi)那么確定,如青少年的身高與體重,他們存在一種近似的線性關(guān)系:
身高/cm = 體重/kg +105。
????????但是,并不是每個(gè)青少年都符合這個(gè)公式,只能說(shuō)每個(gè)青少年的身高體重都存在這么一種近似的線性關(guān)系。這就是其實(shí)就是簡(jiǎn)單的線性回歸,那么,到底什么是線性回歸呢?假如我們將青少年的身高和體重值作為坐標(biāo),不同人的身高體重就會(huì)在平面上構(gòu)成不同的坐標(biāo)點(diǎn),然后用一條直線,盡可能的去擬合這些點(diǎn),這就是簡(jiǎn)單的線性回歸,如下圖:
????????簡(jiǎn)單的線性回歸模型:
????????其中x表示特征值(如:體重值),w表示權(quán)重,b表示偏置,y表示標(biāo)簽(如:身高值)。
2、多元線性回歸
????????簡(jiǎn)單線性回歸中,一個(gè)變量跟另一個(gè)變量的變化而變化,但是生活中,還有很多變量,可能由多個(gè)變量的變化決定著它的變化,比如房?jī)r(jià),影響它的因素可能有:房屋面積、地理位置等等。如果我們要給它們建立出近似的線性關(guān)系,這就是多元線性回歸,多元線性回歸模型如下:
其中,表示第n個(gè)特征值,
表示第n個(gè)特征對(duì)應(yīng)的權(quán)重,b表示偏置,y表示標(biāo)簽。
3、殘差
- 定義
- 殘差是指在回歸分析中,觀測(cè)值與預(yù)測(cè)值之間的差異,即
,其中
是第個(gè)觀測(cè)值,是對(duì)應(yīng)的預(yù)測(cè)值。殘差均值就是所有殘差的平均值,即
,其中n是樣本數(shù)量。
- 殘差是指在回歸分析中,觀測(cè)值與預(yù)測(cè)值之間的差異,即
- 在理想線性回歸模型中的情況
- 在理想的線性回歸模型(基于普通最小二乘法估計(jì)參數(shù))中,殘差均值為零。這是因?yàn)槠胀ㄗ钚《朔ǖ哪繕?biāo)是最小化殘差平方和。
- 從幾何角度看,線性回歸是在尋找一條直線(在簡(jiǎn)單線性回歸中)或一個(gè)超平面(在多元線性回歸中),使得數(shù)據(jù)點(diǎn)到該直線或超平面的垂直距離(即殘差)的平方和最小。在這個(gè)最優(yōu)擬合的情況下,殘差會(huì)在零附近分布,正殘差和負(fù)殘差相互抵消,導(dǎo)致殘差均值為零。
- 殘差均值不為零的情況及意義
- 如果殘差均值不為零,這可能意味著模型存在偏差。例如,如果殘差均值大于零,說(shuō)明模型整體上低估了觀測(cè)值;如果殘差均值小于零,則說(shuō)明模型整體上高估了觀測(cè)值。
- 這可能是由于模型設(shè)定不正確(如遺漏了重要的變量、函數(shù)形式錯(cuò)誤等)或者數(shù)據(jù)存在異常情況(如存在離群點(diǎn)等)導(dǎo)致的。在實(shí)際應(yīng)用中,殘差均值是評(píng)估模型擬合質(zhì)量的一個(gè)簡(jiǎn)單指標(biāo),發(fā)現(xiàn)殘差均值不為零后,需要進(jìn)一步分析模型和數(shù)據(jù),以改進(jìn)模型的擬合效果。
如果線性回歸方程有多個(gè)解,可以如何解決?
解決方法包括但不限于:
- 獲取更多的訓(xùn)練樣本
- 選取樣本有效的特征,使樣本數(shù)量大于特征數(shù)
- 加入正則化項(xiàng)
二、線性回歸的正規(guī)方程解
1、線性回歸訓(xùn)練流程
????????以波士頓房?jī)r(jià)數(shù)據(jù)集為例,該數(shù)據(jù)集每條數(shù)據(jù)包括對(duì)指定房屋的13項(xiàng)數(shù)值型特征和目標(biāo)房?jī)r(jià)組成:
????????由數(shù)據(jù)集可以知道,每一個(gè)樣本有13個(gè)特征與目標(biāo)房?jī)r(jià),而我們要做的事就是通過(guò)這13個(gè)特征來(lái)預(yù)測(cè)房?jī)r(jià),我們可以構(gòu)建一個(gè)多元線性回歸模型,來(lái)對(duì)房?jī)r(jià)進(jìn)行預(yù)測(cè)。模型如下:
????????其中,表示第n個(gè)特征值,
表示第n個(gè)特征對(duì)應(yīng)的權(quán)重,b表示偏置,y表示目標(biāo)房?jī)r(jià)。
????????為了方便,我們稍微將模型進(jìn)行變換(下面求解會(huì)用到):
????????其中。令
,其中
,
。
????????而我們的目的就是找出能夠正確預(yù)測(cè)的多元線性回歸模型,即找出正確的參數(shù)。那么如何尋找呢?通常在監(jiān)督學(xué)習(xí)里面都會(huì)使用這么一個(gè)套路,構(gòu)造一個(gè)損失函數(shù),用來(lái)衡量真實(shí)值與預(yù)測(cè)值之間的差異,然后將問(wèn)題轉(zhuǎn)化為最優(yōu)化損失函數(shù)。既然損失函數(shù)是用來(lái)衡量真實(shí)值與預(yù)測(cè)值之間的差異,那么很多人自然而然的想到了用所有真實(shí)值與預(yù)測(cè)值的差的絕對(duì)值來(lái)表示損失函數(shù)。不過(guò)帶絕對(duì)值的函數(shù)不容易求導(dǎo),所以我們可以采用采用MSE(均方誤差)作為損失函數(shù)(相關(guān)內(nèi)容可以查看另一篇文章:機(jī)器學(xué)習(xí) ---模型評(píng)估、選擇與驗(yàn)證(1)),公式如下:
????????其中?表示第 i 個(gè)樣本的真實(shí)標(biāo)簽,
?表示模型對(duì)第 i 個(gè)樣本的預(yù)測(cè)標(biāo)簽,m為樣本總個(gè)數(shù)。最后,我們?cè)偈褂谜?guī)方程解來(lái)求得我們所需要的參數(shù)。線性回歸模型訓(xùn)練流程如下:
2、線性回歸的正規(guī)方程解
(1)適用場(chǎng)景
- 在數(shù)據(jù)集規(guī)模較小且特征數(shù)量不是很多的情況下,正規(guī)方程解是比較常用的(對(duì)于其他方法,比如梯度下降法等將在之后的文章中提到)。例如,當(dāng)我們處理一些簡(jiǎn)單的實(shí)驗(yàn)數(shù)據(jù)或者小型的商業(yè)分析數(shù)據(jù)集時(shí),假設(shè)特征數(shù)量m較小(比如m<1000),數(shù)據(jù)樣本數(shù)量n也不大(比如n<10000)。
- 因?yàn)檎?guī)方程解的公式在這種情況下計(jì)算起來(lái)相對(duì)簡(jiǎn)單直接。它不需要像梯度下降法那樣進(jìn)行多次迭代來(lái)收斂到最優(yōu)解,只要能夠計(jì)算矩陣的逆,就可以一次性得到參數(shù)θ的最優(yōu)解。
- 例如,在一個(gè)簡(jiǎn)單的房?jī)r(jià)預(yù)測(cè)模型中,我們僅考慮房屋面積、房間數(shù)量這兩個(gè)特征來(lái)預(yù)測(cè)房?jī)r(jià)。數(shù)據(jù)集包含 100 套房子的數(shù)據(jù),通過(guò)正規(guī)方程解可以快速得到線性回歸模型的參數(shù),從而構(gòu)建預(yù)測(cè)模型。
(2)正規(guī)方程解的公式
????????對(duì)線性回歸模型,假設(shè)訓(xùn)練集中m個(gè)訓(xùn)練樣本,每個(gè)訓(xùn)練樣本中有n個(gè)特征,可以使用矩陣的表示方法,預(yù)測(cè)函數(shù)可以寫(xiě)為:,其損失函數(shù)可以表示為:
其中,標(biāo)簽Y為的矩陣,訓(xùn)練特征X為
的矩陣,回歸系數(shù)θ為
的矩陣,對(duì)θ求導(dǎo),并令其導(dǎo)數(shù)等于0,可以得到:
。所以,最優(yōu)解為:
這個(gè)就是正規(guī)方程解,我們可以通過(guò)最優(yōu)方程解直接求得我們所需要的參數(shù)。
代碼實(shí)現(xiàn):
import numpy as np
def mse_score(y_predict,y_test):'''input:y_predict(ndarray):預(yù)測(cè)值y_test(ndarray):真實(shí)值ouput:mse(float):mse損失函數(shù)值'''mse = np.mean((y_predict-y_test)**2)return mseclass LinearRegression :def __init__(self):'''初始化線性回歸模型'''self.theta = Nonedef fit_normal(self,train_data,train_label):'''input:train_data(ndarray):訓(xùn)練樣本train_label(ndarray):訓(xùn)練標(biāo)簽'''# 在訓(xùn)練數(shù)據(jù)的特征矩陣前面添加一列全為1的列,用于表示截距項(xiàng)X = np.hstack((np.ones((train_data.shape[0], 1)), train_data))# 根據(jù)正規(guī)方程公式計(jì)算模型參數(shù)theta# 先計(jì)算X的轉(zhuǎn)置與X的乘積的逆矩陣inverse_term = np.linalg.inv(X.T.dot(X))# 再計(jì)算X的轉(zhuǎn)置與訓(xùn)練標(biāo)簽的乘積product_term = X.T.dot(train_label)# 最后將逆矩陣與上述乘積相乘,得到模型參數(shù)thetaself.theta = inverse_term.dot(product_term)return self.theta
三、衡量線性回歸的性能指標(biāo)
????????這部分在上面提到的另外一篇文章中有提到過(guò),感興趣的話可以去看一看,這里就不再過(guò)多贅述。
四、scikit-learn線性回歸實(shí)踐 - 波斯頓房?jī)r(jià)預(yù)測(cè)
1、數(shù)據(jù)集介紹
????????波斯頓房?jī)r(jià)數(shù)據(jù)集共有506條波斯頓房?jī)r(jià)的數(shù)據(jù),每條數(shù)據(jù)包括對(duì)指定房屋的13項(xiàng)數(shù)值型特征和目標(biāo)房?jī)r(jià)組成。用數(shù)據(jù)集的80%作為訓(xùn)練集,數(shù)據(jù)集的20%作為測(cè)試集,訓(xùn)練集和測(cè)試集中都包括特征和目標(biāo)房?jī)r(jià)。
數(shù)據(jù)集中部分?jǐn)?shù)據(jù)與標(biāo)簽如下圖所示:
2、LinearRegression
LinearRegression?是?scikit-learn?庫(kù)(通常簡(jiǎn)稱為sklearn)中用于實(shí)現(xiàn)線性回歸算法的一個(gè)類。
LinearRegression的構(gòu)造函數(shù)中有兩個(gè)常用的參數(shù)可以設(shè)置:
- fit_intercept:是否有截距,如果沒(méi)有則直線過(guò)原點(diǎn),默認(rèn)為T(mén)ure。
- normalize:是否將數(shù)據(jù)歸一化,默認(rèn)為False。
LinearRegression類中的fit函數(shù)用于訓(xùn)練模型,fit函數(shù)有兩個(gè)向量輸入:
- X:大小為[樣本數(shù)量,特征數(shù)量]的ndarray,存放訓(xùn)練樣本。
- Y:值為整型,大小為[樣本數(shù)量]的ndarray,存放訓(xùn)練樣本的標(biāo)簽值。
LinearRegression類中的predict函數(shù)用于預(yù)測(cè),返回預(yù)測(cè)值,predict函數(shù)有一個(gè)向量輸入:
- X:大小為[樣本數(shù)量,特征數(shù)量]的ndarray,存放預(yù)測(cè)樣本。
????????利用LinearRegression進(jìn)行線性回歸,代碼及相應(yīng)的注釋如下:(此處僅為一個(gè)簡(jiǎn)單的線性回歸的示例)
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import pandas as pd
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score# 加載波士頓房?jī)r(jià)數(shù)據(jù)集
boston = load_boston()# 將數(shù)據(jù)轉(zhuǎn)換為DataFrame格式,這里的特征數(shù)據(jù)
train_data = pd.DataFrame(boston.data, columns=boston.feature_names)# 目標(biāo)數(shù)據(jù)(房?jī)r(jià))作為訓(xùn)練標(biāo)簽
train_label = pd.Series(boston.target)# 劃分訓(xùn)練集和測(cè)試集,測(cè)試集占比可自行設(shè)置,這里設(shè)為0.2(即20%)
X_train, X_test, y_train, y_test = train_test_split(train_data, train_label, test_size=0.2, random_state=42)# 創(chuàng)建線性回歸模型對(duì)象
lr = LinearRegression()# 模型訓(xùn)練
lr.fit(X_train, y_train)# 模型預(yù)測(cè)
pred = lr.predict(X_test)# 將預(yù)測(cè)結(jié)果轉(zhuǎn)換為DataFrame
pred_df = pd.DataFrame({'result': pred})# 模型評(píng)估
mse = mean_squared_error(y_test, pred)
mae = mean_absolute_error(y_test, pred)
r2 = r2_score(y_test, pred)print("\n模型評(píng)估指標(biāo):")
print(f"均方誤差(MSE): {mse}")
print(f"平均絕對(duì)誤差(MAE): {mae}")
print(f"決定系數(shù)(R2): {r2}")