一、預備知識
1、凸函數
凸函數:對於一元函數f(x),如果對於任意tϵ[0,1]均滿足 f(tx1+(1−t)x2) ≤ tf(x1)+(1−t)f(x2) 。
凸函數特征:
(1)凸函數的割線在函數曲線的上方。
(2)凸函數具有唯一的極小值,該極小值就是最小值。也就意味着我們求得的模型是全局最優的,不會陷入局部最優值。
圖 1.1.1 圖 1.1.2
判斷是否為凸函數方法:
(1)對於一元函數 f(x),我們可以通過其二階導數 f′′(x) 的符號來判斷。如果函數的二階導數總是非負,即 f′′(x)≥0,則 f(x)是凸函數;例如:f(x)=x2, f′′(x) = 2。
(2)對於多元函數 f(X),我們可以通過其 Hessian矩陣(由多元函數的二階導數組成的方陣)的正定性來判斷。如果Hessian矩陣是半正定矩陣,則是f(X)凸函數。例如:f(x,y)=x2+y2
Hessian矩陣:
2、損失函數
損失函數用來衡量模型擬合程度的好壞,也就是說當模型擬合誤差越大的時候,函數值應該比較大,反之應該比較小。因此,我們的目標就是要使損失函數的值最小,這時學習算法就轉化為了一個優化問題。
線性回歸的損失函數:均方誤差函數
邏輯回歸的損失函數:對數損失函數
可以證明,這些都是凸函數,找到了損失函數的極值點,就找到了最優解。極值點對應的就是導數為零的點。
3、導數
求損失函數需要運用到導數知識。下面列出一些機器學習中常用的求導公式:
二、線性模型的基本形式
給定由 d 個屬性描述的示例 x={x1 ; x2 ; ... ; xd } , 線性模型試圖學得一個通過屬性的線性組合來進行預測的函數:
f(x) = w1x1 + w2x2 + … + wdxd + b
一般用向量形式進行表示:
f(x) = wTx + b
其中 w={ w1 ; w2 ; ... ; wd },w 和 b 學得之后,模型就得以確定。w 稱為權值向量,b 稱為偏置,如果只有一個屬性,例如,由體重預測身高,f(x) = wx + b,w為斜率,b為截距。
線性模型形式簡單,易於建模,具有很好的解釋性。例如:y=0.2x色澤+0.5x根蒂+0.3x敲聲+1
三、線性回歸
線性回歸是屬於機器學習里面的監督學習,與分類問題不同的是,在回歸問題中,其目標是通過對訓練樣本的學習,得到從樣本特征到樣本標簽直接的映射,其中,在回歸問題中,樣本的標簽是連續值。線性回歸是一類重要的回歸問題。在線性回歸中,目標值與特征直接存在線性關系。
1、簡單線性回歸
簡單線性回歸中,一個變量跟另一個變量的變化而變化。
那么,到底什么是線性回歸呢?如青少年的身高與體重,他們存在一種近似的線性關系:身高/cm = 體重/kg +105 。假如我們將青少年的身高和體重值作為坐標,不同人的身高體重就會在平面上構成不同的坐標點,然后用一條直線,盡可能的去擬合這些點,這就是簡單的線性回歸。
簡單的線性回歸模型如下:
y = wx + b
其中 x
表示特征值(如:體重值),w
表示權重,b
表示偏置,y
表示標簽(如:身高值)。
2、多元線性回歸
簡單線性回歸中,一個變量跟另一個變量的變化而變化,但是生活中,還有很多變量,可能由多個變量的變化決定着它的變化,比如房價,影響它的因素可能有:房屋面積、地理位置等等。如果我們要給它們建立出近似的線性關系,這就是多元線性回歸。
多元線性回歸模型如下:
y=b + w1x1 + w2x2 +...+ wnxn
其中 xi 表示第 i
個特征值,wi 表示第 i
個特征對應的權重,b
表示偏置,y
表示標簽。
3、線性回歸一般形式
給定數據集 D = { (x1,y1) , (x2,y2) , ... ,(xm,ym) }, xi = { xi1 ; xi2 ; ... ; xid },yi 是連續的量(實數),線性回歸試圖學得一個線性模型以盡可能准確預測實值輸出標記。即
其中 ,為增廣向量形式。
其中 ŵ=(b;w) ,數據集 D 表示為一個 m*(d+1) 增廣矩陣 X。
損失函數:均方誤差,用於衡量真實值與預測值之間的差異,公式如下:
令 對θ求導得到:
當XTX滿秩:
其中,X為樣本數據構成的m × (d+1) 的矩陣,y是m維標簽列向量,上式即維線性回歸的正規方程解。然而,現實任務中 XTX 是不滿秩的,這時就會有多個 w*。
說明:給定一個包含m個樣本的數據集D,xi為第i個樣本,每個樣本包含d個屬性,是一個d維的列向量,yi為第i個樣本的標簽,在回歸任務中,yi是連續的實數。當權值向量w以及偏置確定后,模型就可以確定,這時我們將樣本數據xi代入到模型中,就可以可到一個預測值y_hat,可以寫成向量形式,其中是增廣向量形式,在向量的最左端增加了一個常量1,變成了一個d+1維的行向量,這里1可以看成偏置b的系數,m個樣本代入到模型中,可以得到m個預測值,將這些預測值用向量的形式表示為,每一行代表一個樣本。w【0】對應的是偏置。
回歸的目標是使得預測值與真實值之間的差異盡量小,這里使用均方誤差來衡量二者之間的差異,記作loss,稱為損失函數或代價函數。y所有樣本的真實值構成的列向量,y_hat為所有樣本的預測值構成列向量。我們的目標轉化為求loss最小時權值向量w,導數等於0的點對應極值點。
4、loss最小時權值向量w——w* 的代碼實現
當XTX滿秩時,
1、將樣本數據轉換為增廣矩陣形式:
import nump as np
ones=np.ones((X.shape[0],1))
np.hstack((ones,X))
2、矩陣轉置:
XT=X.T
3、矩陣相乘:
XTX=np.dot(XT,X)
4、矩陣的逆:
np.linalg.inv(XTX)