多元特征的輸入
-
- 一、概念
- 二、完整實作代碼:
一、概念
我們來看看多元輸入(Multiple Dimension Input),我們先看看多元Logistic回歸模型:
假設我們有一個8維的輸入,于是就可以改變我們的Logistic回歸模型。
運用相關矩陣的知識我們便可以分析出Z矩陣的相關次元,并且b矩陣可以運用廣播機制來參與相關的運算。
下面是對糖尿病病人的病情進行預測,預測未來是否會加重。
輸入有8個名額,也就是8個次元,輸出隻有一個次元即是否加重病情。
次元的變化其實就是線性代數中矩陣乘法的作用:[m×n]⋅[n×k]=[m×k][m×n]⋅[n×k]=[m×k]
二、完整實作代碼:
import numpy as np
import torch
#1.準備資料集
xy = np.loadtxt('diabetes.csv.gz',delimiter=',',dtype=np.float32)
#xy = np.loadtxt('diabetes.csv',delimiter=',',dtype=np.float32)
'''
torch.from_numpy()方法把數組轉換成張量,且二者共享記憶體,
對張量進行修改比如重新指派,那麼原始數組也會相應發生改變。
'''
x_data = torch.from_numpy(xy[:,:-1]) #x_data除了最後一列不取
y_data = torch.from_numpy(xy[:,[-1]]) # y_data是最後1列
#2.建構網絡模型class
class Model(torch.nn.Module):
#初始化
def __init__(self):
super(Model,self).__init__() #這是對繼承自父類的屬性進行初始化。而且是用父類的初始化方法來初始化繼承的屬性。也就是說,子類繼承了父類的所有屬性和方法,父類屬性自然會用父類方法來進行初始化。
self.linear1 = torch.nn.Linear(8,6)
self.linear2 = torch.nn.Linear(6,4)
self.linear3 = torch.nn.Linear(4,1)
self.sigmoid = torch.nn.Sigmoid()
def forward(self,x):
x = self.sigmoid(self.linear1(x))
x = self.sigmoid(self.linear2(x))
x = self.sigmoid(self.linear3(x))
return x
model = Model()
#3.構造損失函數和優化器
criterion = torch.nn.BCELoss(size_average=True) #還是二分類的,繼續用BCELoss
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)
#4.訓練
for epoch in range(100):
#Forward
y_pred = model(x_data)
loss = criterion(y_pred,y_data)
print(epoch,loss.item())
#Backward()
optimizer.zero_grad()
loss.backward()
#Update
optimizer.step()
參考連結:https://blog.csdn.net/qq_45866407/article/details/108112533
https://www.bilibili.com/video/BV1Y7411d7Ys?p=7