# -- coding: utf-8 --#knn
from regression import*
from numpy import*
import operator
from os import listdir
import matplotlib.pyplot as plt
path = r'f:\file\python\py3test\venv\adaboost\horsecolictraining2.txt'
path1 = r'f:\file\python\py3test\venv\regression\ex0.txt'
path2 = r'f:\file\python\py3test\venv\regression\abalone.txt'
xarr,yarr = loaddataset(path1) #xarr為陣列
ws = standregres(xarr,yarr)
print(ws)
xmat = mat(xarr) #行向量 mat為矩陣
ymat = mat(yarr) #行向量
yhat =xmat*ws #模型估計值
cor = corrcoef(yhat.t,ymat) #計算相關係數
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xmat[:,
1].flatten().a[0],ymat.t[:,
0].flatten().a[0])
xcopy = xmat.copy()
xcopy.sort(0)
yhat =xcopy*ws
ax.plot(xcopy[:,
1],yhat)
plt.show()
#區域性加權線性回歸
re = lwlrtest(xarr,xarr,yarr,
0.01)
strind =xmat[:,
1].argsort(0) #按第二列從小到大排列 返回索引
xsort =xmat[strind][:,
0,:]
fig1 = plt.figure()
ax = fig1.add_subplot(111)
ax.plot(xsort[:,
1],re[strind]) #擬合曲線
ax.scatter(xmat[:,
1].flatten().a[0],ymat.t[:,
0].flatten().a[0],
s=2,
c='red') #樣本點
plt.show()
abx,aby = loaddataset(path2)
ridgrweights = ridgetest(abx,aby)
fig2 = plt.figure()
ax = fig2.add_subplot(111)
ax.plot(ridgrweights)
plt.show()
stagewise(abx,aby,
0.01
,200)
# -- coding: utf-8 --#regression
from numpy import*
import operator
from os import listdir
def
loaddataset(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
standregres(xarr,yarr):
xmat = mat(xarr)
ymat = mat(yarr).t
xtx = xmat.t*xmat
if linalg.det(xtx) == 0.0: #計算行列式 行列式為0 矩陣不可逆 出錯
print('this matrix is singular,cannot do inverse')
return
ws = xtx.i*(xmat.t*ymat) #行列式為0 求最小二乘
return ws
#區域性加權線性回歸
def
lwlr(testpoint,xarr,yarr,k=1.0):
xmat = mat(xarr)
ymat = mat(yarr).t
m=shape(xmat)[0] #樣本數
weights = mat(eye((m))) #構建對角矩陣 對角線為1 其他為0 m乘m
for j in
range(m):
diffmat = testpoint - xmat[j,:]
weights[j,j] = exp(diffmat*diffmat.t/(-2.0*k**2)) #對角線為區域性權重
xtx = xmat.t * (weights * xmat)
if linalg.det(xtx) == 0.0:
print ("this matrix is gingular,cannot do inverse")
return
ws = xtx.i*(xmat.t *(weights * ymat))
return testpoint * ws
def
lwlrtest(testarr,xarr,yarr,k=1.0):
m = shape(testarr)[0]
yhat = zeros(m)
for i in
range(m):
yhat[i] = lwlr(testarr[i],xarr,yarr,k)
return yhat
def
rsserror(yarr,yhatarr):
return ((yarr - yhatarr)**2).sum()
#嶺回歸 用於特徵數大於樣本數的情況 將xtx不可逆 變為可逆
def
ridgeregres(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
def
ridgetest(xarr,yarr): #選用30次lam 進行測試訓練
xmat =mat(xarr)
ymat = mat(yarr).t
ymean = mean(ymat,
0) #對各列求均值
ymat =ymat - ymean
xmeans = mean(xmat,
0) xvar = var(xmat,
0) #對每一列求方差
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
def
stagewise(xarr,yarr,eps = 0.01
,numit=100): #eps迭代步長
xmat = mat(xarr)
ymat = mat(yarr).t
ymean = mean(ymat,
0) ymat = ymat - ymean
xmeans = mean(xmat,
0) #對特徵歸一化
xvar = var(xmat,
0) #對每一列求方差
xmat = (xmat - xmeans)/xvar
m,n = shape(xmat)
returnmat = zeros((numit,n))
ws = zeros((n,
1)) wstest = ws.copy()
wsmax = ws.copy()
for i in
range(numit): #迭代次數
print(ws.t)
lowesterror = inf #最小誤差初始化
for j in
range(n):
for sign in [-1
,1]:
wstest = ws.copy()
wstest[j] += eps*sign #每個權值更新
ytest = xmat*wstest
rsse = rsserror(ymat.a,ytest.a) #計算誤差
if rsse < lowesterror:
lowesterror = rsse
wsmax = wstest #記錄最小誤差下的權值
ws = wsmax.copy()
returnmat[i,:] = ws.t
return returnmat
機器學習 線性回歸
可以說基本上是機器學習中最簡單的模型了,但是實際上其地位很重要 計算簡單 效果不錯,在很多其他演算法中也可以看到用lr作為一部分 先來看乙個小例子,給乙個 線性回歸是什麼 的概念。圖來自 2 假設有乙個房屋銷售的資料如下 面積 m 2 銷售價錢 萬元 123 250 150 320 87 160 1...
機器學習(線性回歸)
在機器學習中,回歸 分類和標註共同構成了監督學習技術。監督學習 supervised learning 是機器學習在工業界應用最廣的乙個領域分支。在學術界中也是研究最多的領域之一。大家都知道的資料探勘十大經典演算法中,監督學習技術佔據6席。方法 自變數 特徵 因變數 結果 關係 回歸演算法是試圖採用...
機器學習 線性回歸
line fitter linearregression 建立模型 line fitter.fit temperature,sales 傳入引數 sales predict line fitter.predict temperature 模型 直線 直線上會有loss 計算loss時 要使用平方距離...