機器學習 線性回歸regression

2021-08-21 10:25:50 字數 4993 閱讀 8607

# -- 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時 要使用平方距離...