機器學習經典演算法之(二十一) 嶺回歸

2021-08-20 21:29:55 字數 2273 閱讀 3429

(一)  嶺回歸簡介:

線性回歸最主要問題是對異常值敏感。在真實世界的資料收集過程中,經過會遇到錯誤的度量結果。而線性回歸使用的普通最小二乘法,其目標是使平方誤差最小化。這時,由於異常值誤差的絕對值很大,因此破壞整個模型。

如何解決呢?

我們引入正則化項的係數作為閾值來消除異常的影響。這個方法稱為嶺回歸。

(具體原理待完善,讀者可參考其他文獻)

fromnumpy import *

defloaddataset(filename):    

numfeat =len(open(filename).readline().split('\t')) - 1 #get number of fields

datamat = ; labelmat =

fr = open(filename)

for line in fr.readlines():

linearr =

curline = line.strip().split('\t')

for i in range(numfeat):

return datamat,labelmat

defridgeregres(xmat,ymat,lam=0.2):

xtx = xmat.t*xmat

denom = xtx + eye(shape(xmat)[1])*lam

if linalg.det(denom) == 0.0:

print "this matrix is singular,cannot do inverse"

return

ws = denom.i * (xmat.t*ymat)

return ws

defridgetest(xarr,yarr):

xmat = mat(xarr); ymat=mat(yarr).t

ymean = mean(ymat,0)

ymat = ymat - ymean     #to eliminate x0 take mean off of y

#regularize x's

xmeans = mean(xmat,0)   #calc meanthen subtract it off

xvar = var(xmat,0)      #calc variance of xi then divide by it

xmat = (xmat - xmeans)/xvar

numtestpts = 30

wmat = zeros((numtestpts,shape(xmat)[1]))

for i in range(numtestpts):

ws = ridgeregres(xmat,ymat,exp(i-10))

wmat[i,:]=ws.t

return wmat

(三)  sklearn中嶺回歸舉例:

importnumpy as np

fromnumpy import *

filename="data.txt"

x =

y =

withopen(filename, 'r') as f:

for line in f.readlines():

xt= [float(i) for i in line.split(',')]

x=np.array(x);y=np.array(y).t

print(shape(x),shape(y))

num_training= int(0.7 * len(x))

num_test= len(x) - num_training

x_train =np.array(x[:num_training])

y_train =np.array(y[:num_training])

x_test =np.array(x[num_training:])

y_test =np.array(y[num_training:])

fromsklearn import linear_model

ridge_regressor= linear_model.ridge(alpha=0.1,fit_intercept=true,max_iter=10000)

ridge_regressor.fit(x_train,y_train)

y_test_pred= ridge_regressor.predict(x_test)

for i,yyin enumerate(y_test):

print("true:",yy," predict:",y_test_pred[i])

機器學習經典演算法之嶺回歸

一 嶺回歸簡介 線性回歸最主要問題是對異常值敏感。在真實世界的資料收集過程中,經過會遇到錯誤的度量結果。而線性回歸使用的普通最小二乘法,其目標是使平方誤差最小化。這時,由於異常值誤差的絕對值很大,因此破壞整個模型。如何解決呢 我們引入正則化項的係數作為閾值來消除異常的影響。這個方法稱為嶺回歸。具體原...

Swift 學習之二十一 ?和 !(詳解)

swift語言使用var定義變數,但和別的語言不同,swift裡不會自動給變數賦初始值,也就是說變數不會有預設值,所以要求使用變數之前必須要對其初始化 如果在使用變數之前不進行初始化就會報錯 plain view plain copy print var stringvalue string err...

MYSQL入門學習之二十一 MYSQL使用者管理

一 新增使用者 1 直接新增 mysql insert into mysql.user host,user,password values testuser password testuser 2 新增使用者並賦權 mysql grant select on test.to testuser1 lo...