《機器學習實戰》線性回歸python3原始碼

2021-08-30 21:31:14 字數 3740 閱讀 6094

開啟pycharm建立乙個regression.py檔案,輸入如下**:

#coding:utf-8

from numpy import *

seterr(divide='ignore',invalid='ignore')

"""------------------------普通線性回歸------------------------------"""

def loaddata(filename):

# 開啟乙個用逗號「,」分隔的文字檔案,該檔案的第一列數值全為1.0,即設定x0=1.0。

# 預設檔案每行最後乙個值是目標值,計算每行資料(非目標值)的個數numfeat

# 該文字檔案每行都需要有資料,若沒有資料也會報錯,所以不要用回車鍵在文字下面弄非常多的空格

numfeat=len(open(filename).readline().split(','))-1

print("每行非目標值的資料個數:",numfeat)

datamat=;labelmat=

fr=open(filename)

for line in fr.readlines():

linearr=

curline=line.strip('\n').split(',')

for i in range(numfeat):

print("r1:",shape(labelmat))

#print(labelmat)

return datamat,labelmat

#datamat,labelmat都是list型別,傳給standregression函式的兩個形參xarr,yarr

def standregression(xarr,yarr):

#xarr,yarr都是list型別,xarr是多維的mat轉置後就是乙個矩陣,

# 而ymat是一維的list,mat後變成1*2的矩陣,必須轉置一下變成列向量,因為y本身就是個列向量

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

xtx=xmat.t*xmat

if linalg.det(xtx)==0.0:

print("this matrix is singular,cannot do inverse")

return

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

return ws

"""--------------------------嶺回歸(正則化線性回歸)---------------------------"""

def ridgeregression(xmat,ymat,lam=0.2):

xtx = xmat.t*xmat

denom = xtx +eye(shape(xmat)[1])*lam #lam就是蘭木塔

if linalg.det(denom) == 0:

print("this matrix is singular,cannot do inverese")

return

ws = denom.i * (xmat.t*ymat) #嶺回歸下求得的最佳回歸係數ws

return ws

def ridgetest(xarr,yarr):

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

#資料標準化

ymean = mean(ymat,0)

ymat=(ymat-ymean) #ymat只有一列,不需要再除以方差

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=ridgeregression(xmat,ymat,exp(i-10))

#print(ws)

wmat[i,:]=ws.t

return wmat

重新建立乙個python檔案,用於呼叫regression.py檔案中的函式並進行驗證以及畫出擬合的曲線

注釋掉的**並非錯誤,是執行時怕同一檔案下相同變數名給出不同的定義而報錯。

#coding:utf-8

from numpy import *

import regression #匯入regression這個已經寫好的檔案

import matplotlib.pyplot as plt

"""*********************普通線性回歸擬合曲線********************************"""

xarr,yarr=regression.loaddata("d:\pycharmprojects\exo.txt")

ws=regression.standregression(xarr,yarr)

xmat=mat(xarr)

ymat=mat(yarr).t

print("r2:",shape(ymat))

fig=plt.figure()

ax=fig.add_subplot(111)

ax.scatter(xmat[:,3].flatten().a[0],ymat[:,0].flatten().a[0])

xcopy=xmat.copy()

xcopy.sort(0)

yhat=xcopy*ws

ax.plot(xcopy[:,3],yhat)

plt.show()

"""**************************嶺回歸lamda函式曲線***********************"""

# abx,aby=regression.loaddata("d:\pycharmprojects\exo.txt")

# ridgeweights=regression.ridgetest(abx,aby)

# fig=plt.figure()

# ax=fig.add_subplot(111)

# ax.plot(ridgeweights)

# ax.set_xlabel("log(lambda)")

# plt.show()

"""************************嶺回歸擬合曲線*************************"""

# xarr,yarr=regression.loaddata("d:\pycharmprojects\exo.txt")

# xmat=mat(xarr)

# ymat=mat(yarr).t

# ws=regression.ridgeregression(xmat,ymat)

## fig=plt.figure()

# ax=fig.add_subplot(111)

# ax.scatter(xmat[:,3].flatten().a[0],ymat[:,0].flatten().a[0])

## xcopy=xmat.copy()

# xcopy.sort(0)

# yhat=xcopy*ws

# ax.plot(xcopy[:,3],yhat)

## plt.show()

機器學習線性回歸案例講解 機器學習實戰 線性回歸

本文將用 泰坦尼克船員獲救 這一案例展示一下使用線性回歸建模的流程。首先匯入原始的資料並展示資料的前5行,大致了解一下資料的情況。原始資料中分別有以下幾列資訊 passengerid survived pclass name age sibsp parch ticket fare cabin emb...

機器學習實戰之線性回歸

之前我們學習的機器學習演算法都是屬於分類演算法,也就是 值是離散值。當 值為連續值時,就需要使用回歸演算法。本文將介紹線性回歸的原理和 實現。如圖所示,這時一組二維的資料,我們先想想如何通過一條直線較好的擬合這些散點了?直白的說 盡量讓擬合的直線穿過這些散點 這些點離擬合直線很近 目標函式 要使這些...

機器學習實戰之線性回歸

線性回歸原理與推導 如圖所示,這時一組二維的資料,我們先想想如何通過一條直線較好的擬合這些散點了?直白的說 盡量讓擬合的直線穿過這些散點 這些點離擬合直線很近 目標函式 要使這些點離擬合直線很近,我們需要用數學公式來表示。首先,我們要求的直線公式為 y xtw。我們這裡要求的就是這個w向量 類似於l...