回歸演算法之線性回歸

2021-10-04 04:01:40 字數 3768 閱讀 6081

線性回歸的定義是:目標值預期是輸入變數的線性組合。線性模型形式簡單、易於建模,但卻蘊含著機器學習中一些重要的基本思想。線性回歸,是利用數理統計中回歸分析,來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法,運用十分廣泛。

優點:結果易於理解,計算不複雜

缺點:對非線性的資料擬合不好

適用資料型別:數值型和標稱型

對於單變數線性回歸,例如:前面房價例子中房子的大小**房子的**。f(x) = w1*x+w0,這樣通過主要引數w1就可以得出**的值。

通用公式為:

h\left(\theta\right)\theta_0+\theta_1h(θ)=θ​0​​+θ​1​​x

那麼對於多變數回歸,例如:瓜的好壞程度f(x) = w0+0.2色澤+0.5根蒂+0.3*敲聲,得出的值來判斷乙個瓜的好與不好的程度。

通用公式為:

h\left(\theta\right)\theta_+\theta_}+\theta_}h(θ)=θ​0​​+θ​1​​x​1​​+θ​2​​x​2​​

線性模型中的向量w值,客觀的表達了各屬性在**中的重要性,因此線性模型有很好的解釋性。對於這種「多特徵**」也就是(多元線性回歸),那麼線性回歸就是在這個基礎上得到這些w的值,然後以這些值來建立模型,**測試資料。簡單的來說就是學得乙個線性模型以盡可能準確的**實值輸出標記。

那麼如果對於多變數線性回歸來說我們可以通過向量的方式來表示w值與特徵x值之間的關係:

\theta = \begin\theta_0 \\\theta_1 \\\theta_2 \\\theta_3\endθ=​⎝​⎜​⎜​⎛​​​θ​0​​​θ​1​​​θ​2​​​θ​3​​​​​⎠​⎟​⎟​⎞​​ x = \beginx_0\\x_1\\x_2\\x_3\endx=​⎝​⎜​⎜​⎛​​​x​0​​​x​1​​​x​2​​​x​3​​​​​⎠​⎟​⎟​⎞​​

兩向量相乘,結果為乙個整數是估計值,其中所有特徵集合的第乙個特徵值x_0x​0​​=1,那麼我們可以通過通用的向量公式來表示線性模型:

h(\theta) = \theta^t * xh(θ)=θ​t​​∗x

乙個列向量的轉置與特徵的乘積,得出我們**的結果,但是顯然我們這個模型得到的結果可定會有誤差,如下圖所示:

單變數

多變數

損失函式

損失函式是乙個貫穿整個機器學習重要的乙個概念,大部分機器學習演算法都會有誤差,我們得通過顯性的公式來描述這個誤差,並且將這個誤差優化到最小值。

對於線性回歸模型,將模型與資料點之間的距離差之和做為衡量匹配好壞的標準,誤差越小,匹配程度越大。我們要找的模型就是需要將f(x)和我們的真實值之間最相似的狀態。於是我們就有了誤差公式,模型與資料差的平方和最小:

j\left(\theta\right)\sum_^ \left((^)^\right)^j(θ)=∑​i=1​m​​(h​θ​​(x​(i)​​)−y​(i)​​)​2​​

上面公式定義了所有的誤差和,那麼現在需要使這個值最小?那麼有兩種方法,一種使用梯度下降演算法另一種使正規方程解法(只適用於簡單的線性回歸)

梯度下降演算法

上面誤差公式是乙個通式,我們取兩個單個變數來求最小值,誤差和可以表示為:

cost\left(\right)\sum_^ \left(\right)^cost(w​0​​+w​1​​x​1​​)=∑​i=1​n​​(w​0​​+w​1​​x​i​​−y​i​​)​2​​

可以通過調整不同的w_1w​1​​和w_0w​0​​的值,就能使誤差不斷變化,而當你找到這個公式的最小值時,你就能得到最好的w_1w​1​​,w_0w​0​​ 而這對\left(,\right)(w​1​​,w​0​​)就是能最好描述你資料關係的模型引數。

怎麼找cost\left(\right)cost(w​0​​+w​1​​x​1​​)的最小? cost\left(\right)cost(w​0​​+w​1​​x​1​​)的影象其實像乙個山谷一樣,有乙個最低點。找這個最低點的辦法就是,先隨便找乙個點(w_1w​1​​=5, w_0w​0​​=4), 然後 沿著這個碗下降的方向找,最後就能找到山谷的最低點。

所以得出}-}=-\frac\right)}}w​1​​′′​​​​−w​1​​′​​​​=−​∂w1​​∂cost(w​0​​+w​1​​x​1​​)​​,那麼這個過程是按照某一點在w_1w​1​​上的偏導數下降尋找最低點。當然在進行移動的時候也需要考慮,每次移動的速度,也就是\alphaα的值,這個值也叫做(學習率),如下式:

:=--\alpha\frac\right)}}w​1​​:=−w​1​​−α​∂w1​​∂cost(w​0​​+w​1​​x​1​​)​​

:=--\alpha\frac\right)}}w​0​​:=−w​0​​−α​∂w1​​∂cost(w​0​​+w​1​​x​1​​)​​

這樣就能求出w_0,w_1w​0​​,w​1​​的值,當然你這個過程是不斷的進行迭代求出來,通過交叉驗證方法即可。

linearregression

sklearn.linear_model.linearregression

class linearregression(fit_intercept = true,normalize = false,copy_x = true,n_jobs = 1)

:param normalize:如果設定為true時,資料進行標準化。請在使用normalize = false的估計器調時用fit之前使用preprocessing.standardscaler

:param copy_x:boolean,可選,預設為true,如果為true,則x將被複製

:param n_jobs:int,可選,預設1。用於計算的cpu核數

例項**:

fromsklearn.linear_modelimportlinearregressionreg = linearregression()

方法fit(x,y,sample_weight = none)

使用x作為訓練資料擬合模型,y作為x的類別值。x,y為陣列或者矩陣

reg.fit ([[0,0], [1,1], [2,2]], [0,1,2])

predict(x)

**提供的資料對應的結果

reg.predict([[3,3]])array([3.])

屬性coef_

表示回歸係數w=(w1,w2....)

reg.coef_array([0.5,0.5])

intercept_表示w0

加入交叉驗證

前面我們已經提到了模型的交叉驗證,那麼我們這個自己去建立資料集,然後通過線性回歸的交叉驗證得到模型。由於sklearn中另外兩種回歸嶺回歸、lasso回歸都本省提供了回歸cv方法,比如linear_model.lasso,交叉驗證linear_model.lassocv;linear_model.ridge,交叉驗證linear_model.ridgecv。所以我們需要通過前面的cross_validation提供的方法進行k-折交叉驗證。

fromsklearn.datasets.samples_generatorimportmake_regressionfromsklearn.model_selectionimportcross_val_scorefromsklearnimportlinear_modelimportmatplotlib.pyplotaspltlr = linear_model.linearregression()x, y = make_regression(n_samples=200, n_features=5000, random_state=0)result = cross_val_score(lr, x, y)printresult

演算法之線性回歸

一 普通線性回歸 原理 分類的目標變數是標稱型資料,而回歸將會對連續型的資料做出 應當怎樣從一大堆資料裡求出回歸方程呢?假定輸人資料存放在矩陣x中,而回歸係數存放在向量w中。那麼對於給定的資料x1,結果將會通過 y x w 給出。現在的問題是,手裡有一些x和對應的y,怎樣才能找到w呢?乙個常用的方法...

演算法梳理之線性回歸

線性回歸模型作為演算法梳理的第乙個模型,也是機器學習中最為基礎與容易理解的模型,在各個機器學習的書籍與教程中也是作為機器學習的引例。線性回歸的資料集的形式為多個屬性x與乙個對應的y,目的是求解x與y之間的線性對映關係,優化求解引數的目標是降低 值與y之間的差別,差別 的度量方式有很多種 如均方誤差,...

線性回歸演算法

1 有監督學習 supervised learning 不僅把訓練資料丟給計算機,而且還把分類的結果 資料具有的標籤 也一併丟給計算機分析。計算機進行學習之後,再丟給它新的未知的資料,它也能計算出該資料導致各種結果的概率,給你乙個最接近正確的結果。由於計算機在學習的過程中不僅有訓練資料,而且有訓練結...