国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

機(jī)器學(xué)習(xí)之線性回歸法

Jonathan Shieber / 1930人閱讀

摘要:在統(tǒng)計(jì)學(xué)中,線性回歸是利用稱(chēng)為線性回歸方程的最小二乘函數(shù)對(duì)一個(gè)或多個(gè)自變量和因變量之間關(guān)系進(jìn)行建模的一種回歸分析維基百科。對(duì)當(dāng)前示例作圖表示衡量線性回歸法的指標(biāo)誤差一個(gè)訓(xùn)練后的模型通常都會(huì)使用測(cè)試數(shù)據(jù)集測(cè)試該模型的準(zhǔn)確性。

在統(tǒng)計(jì)學(xué)中,線性回歸(Linear regression)是利用稱(chēng)為線性回歸方程的最小二乘函數(shù)對(duì)一個(gè)或多個(gè)自變量和因變量之間關(guān)系進(jìn)行建模的一種回歸分析維基百科

簡(jiǎn)單線性回歸

當(dāng)只有一個(gè)自變量的時(shí)候,成為簡(jiǎn)單線性回歸。

簡(jiǎn)單線性回歸模型的思路

為了得到一個(gè)簡(jiǎn)單線性回歸模型,假設(shè)存在以房屋面積為特征,以?xún)r(jià)格為樣本輸出,包含四個(gè)樣本的樣本集,如圖:

尋找一條直線,最大程度上擬合樣本特征與樣本輸出之間的關(guān)系。

假設(shè)最佳擬合的直線方程為:$y = ax + b$,則對(duì)于樣本特征 $x$ 的每一個(gè)取值 $x^{(i)}$ 的預(yù)測(cè)值為:$hat{y}^{(i)} = ax^{(i)} +b$。而我們希望的就是真值 $y^{(i)}$ 和預(yù)測(cè)值 $hat{y}^{(i)}$ 之間的差距盡量小。

可以用 $|y^{(i)} - hat{y}^{(i)}|$ 表示兩者之間的差距,對(duì)于所有的樣本,使用求和公式求和處理:

$$ sum_{i=1}^{m}|y^{(i)} - hat{y}^{(i)}| $$

但是這個(gè)公式有一個(gè)問(wèn)題,不容易求導(dǎo),為了解決這個(gè)問(wèn)題,可先對(duì) $|y^{(i)} - hat{y}^{(i)}|$ 進(jìn)行平方,如此最后的公式就變成了:

$$ sum_{i=1}^{m}(y^{(i)} - hat{y}^{(i)})^2 $$

最后,替換掉 $hat{y}^{(i)}$ ,即為:

$$ sum_{i=1}^{m}(y^{(i)} - ax^{(i)}-b)^2 $$

因此,找到的一個(gè)簡(jiǎn)單線性回歸模型就是找到合適的 a 和 b,使得該函數(shù)的值盡可能的小,該函數(shù)也稱(chēng)為損失函數(shù)(loss function)。

最小二乘法

找到合適的 a 和 b,使得 $sum_{i=1}^{m}(y^{(i)} - ax^{(i)}-b)^2$ 的值盡可能的小,這樣的方法稱(chēng)為最小二乘法。

如何求 a 和 b 呢?令該函數(shù)為 $J(a, b)$,分別使對(duì) a 和 b 求導(dǎo)的結(jié)果為0。

對(duì) b 求導(dǎo):$frac{partial{J(a, b)}}{partial{b}} = sum_{i=1}^{m}2(y^{(i)} - ax^{(i)}-b)(-1) = 0$,得:

$$ b = overline{y}-aoverline{x} $$

對(duì) a 求導(dǎo):$frac{partial{J(a, b)}}{partial{a}} = sum_{i=1}^{m}2(y^{(i)} - ax^{(i)}-b)(-x^{(i)}) = 0$,得:

$$ a = frac{sum_{i=1}^{m}(x^{(i)}-overline{x})(y^{(i)}-overline{y})}{sum_{i=1}^{m}(x^{(i)}-overline{x})^2} $$

注:這里略去了公式的推導(dǎo)過(guò)程。

簡(jiǎn)單線性回歸的實(shí)現(xiàn)

有了數(shù)學(xué)的幫助,實(shí)現(xiàn)簡(jiǎn)單線性回歸就比較方便了。

首先聲明一個(gè)樣本集:

import numpy as np

x = np.array([1., 2., 3., 4., 5.])
y = np.array([1., 3., 2., 3., 5.])

公式中用到了 x 和 y 的均值:

x_mean = np.mean(x)
y_mean = np.mean(y)

求 a 和 b 的值有兩種方法。第一種是使用 for 循環(huán):

# 分子
num = 0.0

# 分母
d = 0.0

for x_i, y_i in zip(x, y):
    num += (x_i - x_mean) * (y_i - y_mean)
    d += (x_i - x_mean) ** 2
    
a = num / d
b = y_mean - a * x_mean

第二種是使用矩陣乘:

num = (x - x_mean).dot(y - y_mean)
d = (x - x_mean).dot(x - x_mean)

a = num / d
b = y_mean - a * x_mean 

注:使用矩陣乘效率更高。

求出了 a 和 b,簡(jiǎn)單線性模型就有了:$hat{y} = a*x + b$。對(duì)當(dāng)前示例作圖表示:?

衡量線性回歸法的指標(biāo) 誤差

一個(gè)訓(xùn)練后的模型通常都會(huì)使用測(cè)試數(shù)據(jù)集測(cè)試該模型的準(zhǔn)確性。對(duì)于簡(jiǎn)單線性歸回模型當(dāng)然可以使用 $sum_{i=1}^{m}(y_{test}^{(i)} - hat{y}_{test}^{(i)})^2$ 來(lái)衡量,但是它的取值和測(cè)試樣本個(gè)數(shù) m 存在聯(lián)系,改進(jìn)方法很簡(jiǎn)單,只需除以 m 即可,即均方誤差(Mean Squared Error):

$$ MSE:frac{1}{m}sum_{i=1}^{m}(y_{test}^{(i)} - hat{y}_{test}^{(i)})^2 $$

np.sum((y_predict - y_true) ** 2) / len(y_true)

值得一提的是 MSE 的量綱是樣本單位的平方,有時(shí)在某些情況下這種平方并不是很好,為了消除量綱的不同,會(huì)對(duì) MSE 進(jìn)行開(kāi)方操作,就得到了均方根誤差(Root Mean Squared Error):

$$ RMSE:sqrt{frac{1}{m}sum_{i=1}^{m}(y_{test}^{(i)} - hat{y}\_{test}^{(i)})^2} = sqrt{MSE_{test}} $$

import math

math.sqrt(np.sum((y_predict - y_true) ** 2) / len(y_true))

還有一種衡量方法是平均絕對(duì)誤差(Mean Absolute Error),對(duì)測(cè)試數(shù)據(jù)集中預(yù)測(cè)值與真值的差的絕對(duì)值取和,再取一個(gè)平均值:

$$ MAE:frac{1}{m}sum_{i=1}^{m}|y_{test}^{(i)} - hat{y}_{test}^{(i)}| $$

np.sum(np.absolute(y_predict - y_true)) / len(y_true)

注:Scikit Learn 的 metrics 模塊中的 mean_squared_error() 方法表示 MSE,mean_absolute_error() 方法表示 MAE,沒(méi)有表示 RMSE 的方法。

R Squared

更近一步,MSE、RMSE 和 MAE 的局限性在于對(duì)模型的衡量只能做到數(shù)值越小表示模型越好,而通常對(duì)模型的衡量使用1表示最好,0表示最差,因此引入了新的指標(biāo):R Squared,計(jì)算公式為:

$$ R^2 = 1 - frac{SS_{residual}}{SS_{total}} $$

$SS_{residual} = sum_{i=1}^{m}(hat{y}^{(i)} - y^{(i)})^2$,表示使用模型產(chǎn)生的錯(cuò)誤;$SS_{total} = sum_{i=1}^{m}(overline{y} - y^{(i)})^2$,表示使用 $y = overline{y}$ 預(yù)測(cè)產(chǎn)生的錯(cuò)誤。

更深入的講,對(duì)于每一個(gè)預(yù)測(cè)樣本的 x 的預(yù)測(cè)值都為樣本的均值 $overline{y}$ ,這樣的模型稱(chēng)為基準(zhǔn)模型;當(dāng)我們的模型等于基準(zhǔn)模型時(shí),$R^2$ 的值為0,當(dāng)我們的模型不犯任何錯(cuò)誤時(shí) $R^2$ 得到最大值1。

$R^2$ 還可以進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換結(jié)果為:

$$ R^2 = 1 - frac{MSE(hat{y}, y)}{Var(y)} $$

實(shí)現(xiàn)也很簡(jiǎn)單:

1 - np.sum((y_predict - y_true) ** 2) / len(y_true) / np.var(y_true)

注:Scikit Learn 的 metrics 模塊中的 r2_score() 方法表示 R Squared。

多元線性回歸 多元線性回歸模型的思路

當(dāng)有不只一個(gè)自變量時(shí),即為多元線性回歸,如圖:

對(duì)于有 n 個(gè)自變量來(lái)說(shuō),我們想獲得的線性模型為:

$$ y = heta_{0} + heta_{1}x_{1} + heta_{2}x_{2} + ... + heta_{n}x_{n} $$

根據(jù)簡(jiǎn)單線性回歸的思路,我們的目標(biāo)即為:

找到 $ heta_{0}$,$ heta_{1}$,$ heta_{2}$,...,$ heta_{n}$,使得 $sum_{i=1}^{m}(y^{(i)} - hat{y}^2)^2$ 盡可能的小,其中 $hat{y}^{(i)} = heta_{0} + heta_{1}X_{1}^{(i)} + heta_{2}X_{2}^{(i)} + ... + heta_{n}X_{n}^{(i)}$ 。

$hat{y}^{(i)}$:訓(xùn)練數(shù)據(jù)中第 i 個(gè)樣本的預(yù)測(cè)值;$X_{j}^{(i)}$:訓(xùn)練數(shù)據(jù)中第 i 個(gè)樣本的第 j 個(gè)自變量。

如果用矩陣表示即為:

$$ hat{y}^{(i)} = X^{(i)}· heta $$

其中:${X^{(i)} = (X_{0}^{(i)},X_{1}^{(i)},X_{2}^{(i)},...,X_{n}^{(i)}), X_{0}^{(i)}equiv1}$;$ heta = ( heta_{0}, heta_{1}, heta_{2},..., heta_{n})^T$。

更進(jìn)一步,將 $hat{y}^{(i)}$ 也使用矩陣表示,即為:

$$ hat{y} = X_b· heta $$

其中:$X_b = egin{pmatrix} 1 & X_1^{(1)} & X_2^{(1)} & cdots & X_n^{(1)} 1 & X_1^{(2)} & X_2^{(2)} & cdots & X_n^{(2)} cdots & & & & cdots 1 & X_1^{(m)} & X_2^{(m)} & cdots & X_n^{(m)} end{pmatrix}$,$ heta = egin{pmatrix} heta_0 heta_1 heta_2 cdots heta_n end{pmatrix} $

因此,我們目標(biāo)就成了:使 $(y-X_b· heta)^T(y-X_b· heta)$ 盡可能小。而對(duì)于這個(gè)公式的解,稱(chēng)為多元線性回歸的正規(guī)方程解(Nomal Equation):

$$ heta = (X_b^TXb)^{-1}(X_b^Ty) $$

實(shí)現(xiàn)多元線性回歸

將多元線性回歸實(shí)現(xiàn)在 LinearRegression 類(lèi)中,且使用 Scikit Learn 的風(fēng)格。

_init_() 方法首先初始化線性回歸模型,_theta 表示 $ heta$,interception_ 表示截距,chef_ 表示回歸模型中自變量的系數(shù):

class LinearRegression:
    def __init__(self):
        self.coef_ = None
        self.interceiption_ = None
        self._theta = None

fit_normal() 方法根據(jù)訓(xùn)練數(shù)據(jù)集訓(xùn)練模型,X_b 表示添加了 $X_{0}^{(i)}equiv1$ 的樣本特征數(shù)據(jù),并且使用多元線性回歸的正規(guī)方程解求出 $ heta$:

def fit_normal(self, X_train, y_train):
    X_b = np.hstack([np.ones((len(X_train), 1)), X_train])
    self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)

    self.interception_ = self._theta[0]
    self.coef_ = self._theta[1:]

    return self

predict() 方法為預(yù)測(cè)方法,同樣使用了矩陣乘:

def predict(self, X_predict):
    X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])
    return X_b.dot(self._theta)

score() 根據(jù)給定的測(cè)試數(shù)據(jù)集使用 R Squared 指標(biāo)計(jì)算模型的準(zhǔn)確度:

def score(self, X_test, y_test):
    y_predict = self.predict(X_test)
    return r2_score(y_test, y_predict)
Scikit Learn 中的線性回歸實(shí)現(xiàn)放在 linear_model 模塊中,使用方法如下:

from sklearn.linear_model import LinearRegression

線性回歸的特點(diǎn)

線性回歸算法是典型的參數(shù)學(xué)習(xí)的算法,只能解決回歸問(wèn)題,其對(duì)數(shù)據(jù)具有強(qiáng)解釋性。

缺點(diǎn)是多元線性回歸的正規(guī)方程解 $ heta = (X_b^TXb)^{-1}(X_b^Ty)$ 的時(shí)間復(fù)雜度高,為 $O(n^3)$,可優(yōu)化為 $O(n^{2.4})$。

源碼地址

Github | ML-Algorithms-Action

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44925.html

相關(guān)文章

  • 機(jī)器學(xué)習(xí)之梯度下降線性回歸

    摘要:表示學(xué)習(xí)率,是梯度下降法的一個(gè)超參數(shù),其取值影響最優(yōu)解的速度。因此在使用梯度下降法之前,最好進(jìn)行數(shù)據(jù)歸一化。同時(shí)在隨機(jī)梯度下降法中學(xué)習(xí)率的取值是逐漸遞減的,為了防止固定取值的學(xué)習(xí)率使得梯度下降到達(dá)最優(yōu)解附近時(shí)繼續(xù)跳出這個(gè)范圍。 梯度下降法不是一個(gè)機(jī)器學(xué)習(xí)算法,而是一種基于搜索的最優(yōu)化方法,用于最小化一個(gè)效用函數(shù)。 簡(jiǎn)單理解梯度下降法 假設(shè)存在一個(gè)只有一個(gè)參數(shù) $ heta$ 的損失函數(shù)...

    cod7ce 評(píng)論0 收藏0
  • JavaScript機(jī)器學(xué)習(xí)之線性回歸

    摘要:不能用于機(jī)器學(xué)習(xí)太慢幻覺(jué)矩陣操作太難有函數(shù)庫(kù)啊,比如只能用于前端開(kāi)發(fā)開(kāi)發(fā)者笑了機(jī)器學(xué)習(xí)庫(kù)都是開(kāi)發(fā)者機(jī)器學(xué)習(xí)庫(kù)神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)自然語(yǔ)言處理卷積神經(jīng)網(wǎng)絡(luò)一系列庫(kù)神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)我們將使用來(lái)實(shí)現(xiàn)線性回歸,源代碼在倉(cāng)庫(kù)。 譯者按: AI時(shí)代,不會(huì)機(jī)器學(xué)習(xí)的JavaScript開(kāi)發(fā)者不是好的前端工程師。 原文: Machine Learning with JavaScript : Part 1 ...

    gitmilk 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<