算法
線性迴歸(連續)
目標函數推導
預測值與誤差:
由中心極限定理可知,誤差服從正態分佈:
帶入可得:
極大似然估計:
取對數:
拆分:
最大化似然函數得到目標函數:
最小化:
目標函數求解
目標函數展開:
對
要令
防止過擬合:
加入正則項目,有三種:
- L1-norm (LASSO迴歸) :
λ∑|θi| - L2-norm (Ridge嶺迴歸):
λ∑θ2i - ElasticNet (混合前兩種) :
λ(p|θi|+(1−p)∑θ2i)
優缺點比較:
- L1:
- 優點:得到解滿足稀疏性要求(因爲在接近原點處正則項不會變小,L2會),有較高的求解速度。
- 缺點:準確性、穩定性、魯棒性較差
- L2:
- 優點:準確性、穩定性、魯棒性較高
- 缺點:求解速度較慢
- ElasticNet:
- 優點:可以同時考慮求解速度和穩定性
邏輯迴歸(二分類)
推導過程
預測和目標:
其中預測函數
似然函數:
取對數再對
所以函數的求解過程類似於梯度下降法:
實現邏輯迴歸的代碼:
#alpha:步長,maxCycles:迭代次數,可以調整
def gradAscent(dataArray,labelArray,alpha,maxCycles):
dataMat=mat(dataArray) #size:m*n
labelMat=mat(labelArray) #size:m*1
m,n=shape(dataMat)
weigh=ones((n,1))
for i in range(maxCycles):
h=sigmoid(dataMat*weigh)
error=labelMat-h #size:m*1
weigh=weigh+alpha*dataMat.transpose()*error
return weigh
softmax迴歸(多分類)
解決多分類的問題,與邏輯迴歸類似
預測和目標的函數變爲:
最後的跟新函數變爲: