#coding=utf-8
import ccsql
from numpy import *
def load_data(filename):
#讀取資料
numfeat = len(open(filename).readline().split('\t')) - 1
datamat = ; labelmat =
fr = open(filename)
for line in fr.readlines():
linearr =
curline = line.strip().split('\t')
for i in range(numfeat):
return datamat,labelmat
def standard_regres(data,label):
'''標準線性回歸'''
#基於最小二乘法
x=mat(data);y=mat(label).t
xtx=x.t*x
#計算這個因為回歸係數方程w=[(x.tx)^-1]*x.t*y
#要保證xtx不是奇異矩陣
if linalg.det(xtx)==0.0:
#判斷xtx是否是奇異矩陣
#linalg.det()計算行列式的值
print 'this matrix is singular, cannot do inverse'
return
regression_weights=xtx.i*(x.t*y)
#回歸係數求得的是2*1矩陣
#因為樣本資料每一行是1*2 ,例如:[1.000000 0.73833]
#其中前面的1是偏移量,所給的資料中每一行的第乙個值都是1.
return regression_weights
def lwlr(test_point,x,y,k=1.0):
'''區域性加權線性回歸'''
x=mat(x);y=mat(y).t
m=shape(x)[0]
weights=mat(eye((m)))
# m階單位矩陣
for j in range(m):
diff_mat=test_point-x[j,:]
#矩陣差
weights[j,j]=exp(diff_mat*diff_mat.t/(-2.0*k**2))
#計算對應點權重。高斯核w(i,i)=exp[|x(i)-x|/(-2k^2)]
# k決定了對附近的點賦予多大的權重
# 換個說法 k 應該是乙個區域性範圍,也就是『區域性加權』中的區域性的範圍
# k足夠小回歸曲線就應該接近於折線
xtx=x.t*(weights*x)
if linalg.det(xtx)==0.0:
#計算行列式的值
print 'this matrrix is singular,cannot do inverse'
return
regression_weights=xtx.i*(x.t*(weights*y))
estimate=test_point*regression_weights
#估值就等於測試點乘以回歸係數
return estimate
#import matplotlib.pyplot as plt
#fig=plt.figure()
#ax=fig.add_subplot(111)
#x=mat(x);y=mat(y)
#ax.scatter(x[:,1].flatten().a[0],y.t[:,0].flatten().a[0])
#x0=x[:,1].argsort(0)
#x1=x[x0][:,0,:]
#ax.plot(x1[:,1],yh[x0],'red')
#plt.show()
區域性加權線性回歸
簡單來說,這個過程其實是在先擬合出一條曲線,然後再用這個曲線去 需要 的點。但是如果這個曲線擬合得不好 或者說樣本資料含有大量噪音 那麼這個 結果就會很差。區域性加權線性回歸 對於乙個資料集合 x0,y0 x1,y1 xm,ym 我們 它在x點時對應的y值時,如果採用的是傳統的 線性回歸模型,那麼 ...
區域性加權線性回歸
區域性加權線性回歸是機器學習裡的一種經典的方法,彌補了普通線性回歸模型欠擬合或者過擬合的問題。機器學習裡分為無監督學習和有監督學習,線性回歸裡是屬於有監督的學習。普通的線性回歸屬於引數學習演算法 parametric learning algorithm 而區域性加權線性回歸屬於非引數學習演算法 n...
區域性加權線性回歸
區域性加權回歸 locally weighted linear regression,lwr 是一種非引數學習方法 在 新樣本值時候每次都會重新訓練資料得到新的引數值,也就是說每次 新樣本都會依賴訓練資料集合,所以每次得到的引數值是不確定的。注 引數學習方 在訓練完成所有資料後得到一系列訓練引數,然...