迴歸入門及案例實戰

線性迴歸

普通線性迴歸

最小二乘法

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

  • 線性:得名於f(x)=ax+b的圖像的形象 很直觀 就是一條直線的形象

嶺迴歸

原理

在這裏插入圖片描述

縮減係數來“理解”數據

在這裏插入圖片描述

優點

  • 縮減方法可以去掉不重要的參數,因此能更好地理解數據。此外,與簡單的線性迴歸相比,縮減法能取得更好的預測效果;
  • 嶺迴歸是加了二階正則項的最小二乘,主要適用於過擬合嚴重或各變量之間存在多重共線性的時候,嶺迴歸是有bias的,這裏的bias是爲了讓variance更小。

總結

  1. 嶺迴歸可以解決特徵數量比樣本量多的問題
  2. 嶺迴歸作爲一種縮減算法可以判斷哪些特徵重要或者不重要,有點類似於降維的效果
  3. 縮減算法可以看作是對一個模型增加偏差的同時減少方差

應用場景

  1. 數據點少於變量個數
  2. 變量間存在共線性(最小二乘迴歸得到的係數不穩定,方差很大)
  3. 應用場景就是處理高度相關的數據

Lasso迴歸

拉格朗日乘數法

  • least absolute shrinkage and selection operator,最小絕對值收縮和選擇算子
  • 與嶺迴歸類似,它也是通過增加懲罰函數來判斷、消除特徵間的共線性。
    在這裏插入圖片描述
    當λ足夠小時,一些影響較弱的係數會因此被迫縮減到0

優點

跟嶺迴歸類似,不同的算法

普通線性迴歸、嶺迴歸與lasso迴歸比較

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

from sklearn.linear_model import LinearRegression,Ridge,Lasso
# 生成數據
# 樣本量少於特徵量,50樣本,200個正
X = np.random.randn(50,200)
X
# Xw = y
w = np.random.randn(200)
# 隨機選取190,讓其爲0
w
index= np.arange(200)
index
np.random.shuffle(index)
index
w[index[:190]] = 0
w
# y是目標值
#X.dot(w)返回的是(X,w)兩個數組的點積(dot product)   
y = X.dot(w)
y
lr = LinearRegression(fit_intercept=False)

ridge = Ridge(alpha = 1000,fit_intercept=False)

lasso = Lasso(alpha=0.1,fit_intercept=False)


lr.fit(X,y)

ridge.fit(X,y)

lasso.fit(X,y)


lr_w = lr.coef_

ridge_w = ridge.coef_

lasso_w = lasso.coef_



# 四個子視圖
plt.figure(figsize=(12,9))

ax = plt.subplot(2,2,1)
ax.plot(w)
ax.set_title('True')


ax = plt.subplot(2,2,2)
ax.plot(lr_w)
ax.set_title('lr')

ax = plt.subplot(2,2,3)
ax.plot(ridge_w)
ax.set_title('Ridge')

ax = plt.subplot(2,2,4)
ax.plot(lasso_w)
ax.set_title('Lasso')

在這裏插入圖片描述

邏輯斯蒂函數(logistics)

什麼是邏輯斯蒂函數

在這裏插入圖片描述
在這裏插入圖片描述
根據現有數據對分類邊界線建立迴歸公式,依此進行分類

  • 邏輯斯蒂迴歸---->分類
    利用Logistics迴歸進行分類的主要思想是:根據現有數據對分類邊界線建立迴歸公式,以此進行分類。這裏的“迴歸” 一詞源於最佳擬合,表示要找到最佳擬合參數集

Logistic Regression和Linear Regression的原理是相似的,可以簡單的描述爲這樣的過程

(1)找一個合適的預測函數,一般表示爲h函數,該函數就是我們需要找的分類函數,它用來預測輸入數據的判斷結果。這個過程是非常關鍵的,需要對數據有一定的瞭解或分析,知道或者猜測預測函數的“大概”形式,比如是線性函數還是非線性函數
(2)構造一個Cost函數(損失函數),該函數表示預測的輸出(h)與訓練數據類別(y)之間的偏差,可以是二者之間的差(h-y)或者是其他的形式。綜合考慮所有訓練數據的“損失”,將Cost求和或者求平均,記爲J(θ)函數,表示所有訓練數據預測值與實際類別的偏差
(3)顯然,J(θ)函數的值越小表示預測函數越準確(即h函數越準確),所以這一步需要做的是找到J(θ)函數的最小值。找函數的最小值有不同的方法,Logistic Regression實現時有梯度下降法(Gradient Descent)

推導過程

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

優缺點

  • 實現簡單,易於理解和實現;
  • 計算代價不高,速度很快,存儲資源低
  • 容易欠擬合,分類精度可能不高

矩陣

滿秩矩陣

  • 滿秩矩陣(non-singular matrix): 設A是n階矩陣, 若r(A) = n, 則稱A爲滿秩矩陣。但滿秩不侷限於n階矩陣。
  • 若矩陣秩等於行數,稱爲行滿秩
  • 若矩陣秩等於列數,稱爲列滿秩
  • 既是行滿秩又是列滿秩則爲n階矩陣n階方陣
  • 行滿秩矩陣就是行向量線性無關,列滿秩矩陣就是列向量線性無關;所以如果是方陣,行滿秩矩陣與列滿秩矩陣是等價的。
  • 滿秩有行滿秩和列滿秩,既是行滿秩又是列滿秩的話就一定是方陣

奇異矩陣

  • 奇異矩陣是線性代數的概念,就是該矩陣的秩不是滿秩。首先,看這個矩陣是不是方陣(即行數和列數相等的矩陣。若行數和列數不相等,那就談不上奇異矩陣和非奇異矩陣)
a = np.array([[3,3.5,2],[3.2,3.6,3],[6,7,4]])
np.linalg.matrix_rank(a)

矩陣求逆

逆矩陣作用

  • 逆矩陣可以類比成數字的倒數,比如數字5的倒數是1/5,矩陣A的“倒數”是A的逆矩陣。5(1/5)=1, A(A的逆矩陣) = I,I是單位矩陣。
  • 引入逆矩陣的原因之一是用來實現矩陣的除法。比如有矩陣X,A,B,其中XA = B,我們要求X矩陣的值。本能來說,我們只需要將B/A就可以得到X矩陣了。但是對於矩陣來說,不存在直接相除的概念。我們需要藉助逆矩陣,間接實現矩陣的除法。具體的做法是等式兩邊在相同位置同時乘以矩陣A的逆矩陣,如下所示,XA(A的逆矩陣)= B(A的逆矩陣)。由於A(A的逆矩陣) = I,即單位矩陣,任何矩陣乘以單位矩陣的結果都是其本身。所以,我們可以得到X = B(A的逆矩陣)。

numpy矩陣求逆

a_ = np.linalg.inv(a)

正則化

怎樣解決過擬合?

  • 係數個數,減少
  • 係數的絕對值變小

作用

  • 機器學習中,如果參數過多,模型過於複雜,容易造成過擬合(overfit)。即模型在訓練樣本數據上表現的很好,但在實際測試樣本上表現的較差,不具備良好的泛化能力。
  • 爲了避免過擬合,最常用的一種方法是使用使用正則化,例如 L1 和 L2 正則化。
  • 左圖即爲欠擬合,中圖爲合適的擬合,右圖爲過擬合。
    在這裏插入圖片描述

L1正則化

  • L1正則化,即原損失函數 + 所有權重的平均絕對值 * λ ,其中λ >0
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 比原始的更新規則多出了η * λ * sgn(w)/n這一項。當w爲正時,更新後的w變小。當w爲負時,更新後的w變大——因此它的效果就是讓w往0靠,使網絡中的權重儘可能爲0,也就相當於減小了網絡複雜度,防止過擬合

L2正則化

  • L2正則化,即原損失函數 + 所有權重平方和的平均值 * λ / 2 , λ>0

人臉自動補全實戰

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章