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