python實現十元線性回歸(pytorch實現)

2021-10-10 02:46:55 字數 3086 閱讀 2154

import xlrd   #用於讀取excel

import torch

import numpy as np

import random #隨機模組

file_path =

'1.xls'

#這裡的1.xls檔案為11列4000余行的資料。最後一列為標籤,即真值輸出。

data = xlrd.open_workbook(file_path)

table = data.sheets()[

0]row_n = table.nrows

col_n = table.ncols

#建立數列11*n

list1 =[[

]]*11

#轉到數列中去,感覺有些多餘

for i in

range(0

,col_n)

: list1[i]

= table.col_values(i)

data1 = np.array(list1)

data = data1.t

#切片,分離出x與標籤y

x = data[:,

0:10]

y = data[:,

10]#轉到tensor(至於tensor才能利用梯度)

features = torch.from_numpy(x)

labels = torch.from_numpy(y)

num_inputs =

10num_examples =

4177

print

(len

(features)

)#定義資料讀取

defdata_iter

(batch_size, features, labels)

: num_examples =

len(features)

indices =

list

(range

(num_examples)

) random.shuffle(indices)

# 樣本的讀取順序是隨機的

for i in

range(0

, num_examples, batch_size)

: j = torch.longtensor(indices[i:

min(i + batch_size, num_examples)])

# 最後一次可能不足乙個batch

yield features.index_select(

0, j)

, labels.index_select(

0, j)

#一次讀取的資料量

batch_size =

10'''

for x, y in data_iter(batch_size, features, labels):

print(x, '\n', y)

break

'''#係數w與偏置b的設定

w = torch.tensor(np.random.normal(0,

0.01

,(num_inputs,1)

), dtype=torch.float64)

b = torch.zeros(

1, dtype=torch.float64)

#使其可以利用grad

w.requires_grad_(requires_grad=

true

)b.requires_grad_(requires_grad=

true

)def

linreg

(x, w, b)

:# 定義模型

return torch.mm(x, w)

+ b #torch.mm 是矩陣相乘。

defsquared_loss

(y_hat, y)

:# 損失函式

return

(y_hat - y.view(y_hat.size())

)**2/

2def

sgd(params, lr, batch_size)

:# 優化演算法

for param in params:

param.data -= lr * param.grad / batch_size

#相關訓練引數

lr =

0.1num_epochs =

30net = linreg

loss = squared_loss

#開始訓練

for epoch in

range

(num_epochs)

:# 訓練模型一共需要num_epochs個迭代週期

# 在每乙個迭代週期中,會使用訓練資料集中所有樣本一次(假設樣本數能夠被批量大小整除)。x

# 和y分別是小批量樣本的特徵和標籤

for x, y in data_iter(batch_size, features, labels)

: l = loss(net(x, w, b)

, y)

.sum()

# l是有關小批量x和y的損失

l.backward(

)# 小批量的損失對模型引數求梯度

sgd(

[w, b]

, lr, batch_size)

# 使用小批量隨機梯度下降迭代模型引數

# 不要忘了梯度清零

w.grad.data.zero_(

) b.grad.data.zero_(

) train_l = loss(net(features, w, b)

, labels)

print

('epoch %d, loss %f'

%(epoch +

1, train_l.mean(

).item())

)#最後輸出我們想要的相關引數。

print

('\n'

, w)

print

('\n'

, b)

Python基礎學習筆記十(元組)

二 訪問元組 三 元組函式 運算子 三 元組解包 元組 tuple 與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。使用 來建立空元組 當元組不是空元組時,括號可以省略 如果元組不是空元組,它裡邊至少要有乙個元素和乙個 建立了乙個5個元素的元組 元組可以使用下標索引來訪問...

python實現線性回歸

定義 線性回歸在假設特徵滿足線性關係,根據給定的訓練資料訓練乙個模型,並用此模型進行 文中只介紹了簡單的概念,不涉及公式的證明等。從最簡單的一元線性關係介紹,假設有一組資料型態為 y theta x,其中 x y 我們根據 x,y 模擬出近似的 theta 引數值,進而得到 y theta x 模型...

python實現線性回歸

線性回歸模型是最簡單的機器學習模型,基礎可以從線性回歸模型開始入手,慢慢地過渡到非線性回歸以及神經網路模型。1.概念 2.線性回歸 簡單回歸 乙個自變數輸入,y x是一對一的關係,對映到幾何上來說就是二維座標系的直線方程,可表示為y 多元回歸 多個自變數,改變維度的大小。即 3.最小二乘法 通過向量...