鏈接:
1. 線性回歸總結(jié)
2. 正則化
3. 邏輯回歸
4. Boosting
5. Adaboost算法
一. 模型介紹
線性回歸簡而言之就是在平面中用一條直線去擬合一些點(diǎn)數(shù)據(jù),在三維空間中就是用一個(gè)平面去擬合三維中的數(shù)據(jù),而我們要做的就是尋找出一條最佳的線段或者平面去擬合數(shù)據(jù),當(dāng)然高維情況類似去尋找超平面穿稳。
初中的時(shí)候我們就學(xué)習(xí)過一元一次方程,那就是一個(gè)簡單的擬合過程,只不過那個(gè)是完全可以擬合在一條線上,現(xiàn)在要做的是在有誤差或者數(shù)據(jù)非線性排列的情況下,我們只能去盡力找出一條最佳的擬合線路:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1,10,2).reshape(-1,1)
y = a*2
plt.plot(x,y,'r-',linewidth=2, label=u"線性擬合")
plt.plot(x,y, 'bo')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
x = np.arange(1,10,2).reshape(-1,1)
y = a*2 + np.random.randn(5)
linear_model = LinearRegression()
linear_model.fit(x.reshape(-1, 1),y)
y_pre = linear_model.predict(x)
plt.plot(x,y_pre,'r-',linewidth=2, label=u"線性擬合")
plt.plot(x,y, 'bo')
plt.show()
定義一下一些符號表達(dá)吧史,我們通常習(xí)慣用X=(x1,x2,...,xn)T∈?n×p表示數(shù)據(jù)矩陣,其中xi∈?p表示一個(gè)p維度長的數(shù)據(jù)樣本艺智;y=(y1,y2,...,yn)T∈?n表示數(shù)據(jù)的label,這里只考慮每個(gè)樣本一類的情況浪默。
線性回歸的模型是這樣的塞弊,對于一個(gè)樣本xi,它的輸出值是其特征的線性組合:
其中强窖,w0稱為截距凸椿,或者bias,通過設(shè)置X中X0=1,向量表達(dá),簡化了形式翅溺,因此實(shí)際上xi有p+1維度脑漫。
線性回歸的目標(biāo)是用預(yù)測結(jié)果盡可能地?cái)M合目標(biāo)label,
二. 損失函數(shù)
從下圖來直觀理解一下線性回歸優(yōu)化的目標(biāo)——圖中線段距離(平方)的平均值未巫,也就是最小化到分割面的距離和窿撬。
這里我們要做的是在隨機(jī)放置權(quán)值W的情況下不斷的優(yōu)化程式,以達(dá)到效果最佳的情況,這里的優(yōu)化指的是盡量讓各個(gè)點(diǎn)擬合在所求超平面,如果不能擬合,也要使得其距離超平面最近為好,也就是可以定義損失函數(shù)
三. 求解過程
由于上述損失函數(shù)圖形如下,我們這里選用兩種方式去求解
1. 矩陣滿秩:###
這種形式下我們可以通過求解導(dǎo)數(shù)為零的方式求解算法启昧,可以直接得到最后的W權(quán)值.
1. 矩陣不滿秩:###
當(dāng)矩陣不滿秩叙凡,無法求得上述的矩陣逆解,這里采用梯度下降法進(jìn)行求解密末,梯度下降法通常分為三種形式:整體批次梯度下降法握爷,隨機(jī)梯度下降法和批量梯度下降法.
梯度下降算法是一種求局部最優(yōu)解的方法跛璧,對于F(x),在a點(diǎn)的梯度是F(x)增長最快的方向新啼,那么它的相反方向則是該點(diǎn)下降最快的方向追城,具體參考wikipedia。
原理:將函數(shù)比作一座山燥撞,我們站在某個(gè)山坡上座柱,往四周看,從哪個(gè)方向向下走一小步物舒,能夠下降的最快色洞;注意:當(dāng)變量之間大小相差很大時(shí),應(yīng)該先將他們做處理冠胯,使得他們的值在同一個(gè)范圍火诸,這樣比較準(zhǔn)確。
1)首先對θ賦值荠察,這個(gè)值可以是隨機(jī)的置蜀,也可以讓θ是一個(gè)全零的向量。
2)改變θ的值悉盆,使得J(θ)按梯度下降的方向進(jìn)行減少盯荤。
描述一下梯度減少的過程,對于我們的函數(shù)J(θ)求偏導(dǎo)J:
下圖表達(dá)出解得最終結(jié)果與初始值相關(guān):
在這里我們需要進(jìn)行的是:
在批量梯度下降中焕盟,每一次參數(shù)更新都會遍歷全部的訓(xùn)練數(shù)據(jù){x1, y1}, {x2, y2}, ... , {xm,ym}對于線性回歸問題廷雅,這種方法可以得到一個(gè)全局最優(yōu)解,但是當(dāng)樣本數(shù)據(jù)量很大的時(shí)候京髓,會非常耗時(shí)航缀。
多項(xiàng)式回歸
我們可以通過設(shè)計(jì)高階特征在線性回歸的基礎(chǔ)上實(shí)現(xiàn)多項(xiàng)式回歸。對于線性回歸的hypothesis,
令$ x2=x1^2, x3=x1^3 $,實(shí)現(xiàn)了一個(gè)3次多項(xiàng)式的回歸:
這也是用線性模型實(shí)現(xiàn)非線性的常用方法堰怨。這種方式能夠擬合出非線性的超平面芥玉,有時(shí)候表現(xiàn)出很好的特性
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
X_test = [[6], [8], [11], [16]]
y_test = [[8], [12], [15], [18]]
quadratic_featurizer = PolynomialFeatures(degree=2)
X_train_quadratic = quadratic_featurizer.fit_transform(X_train)
X_test_quadratic = quadratic_featurizer.transform(X_test)
xx = np.linspace(0, 26, 100)
regressor_quadratic = LinearRegression()
regressor_quadratic.fit(X_train_quadratic, y_train)
xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))
plt.plot(xx, regressor_quadratic.predict(xx_quadratic), 'r-')
plt.show()
參考:
機(jī)器學(xué)習(xí)方法:回歸(一):線性回歸Linear regression
機(jī)器學(xué)習(xí)-----線性回歸淺談(Linear Regression)
Stanford機(jī)器學(xué)習(xí)筆記-1.線性回歸
線性回歸