07-处理多维特征的输入

数据集

image-20210227114517458

一个样本具有的多个特征即多维特征。

import numpy as np
xy = np.loadtxt('./数据集/diabetes/diabetes.csv.gz',delimiter=',',dtype=np.float32)
x_data = torch.from_numpy(xy[:,:-1])
y_data = torch.from_numpy(xy[:,[-1]]) # 使用[-1]取出数据后是矩阵形式,使用-1则是向量

logistic回归模型

y^(i)=σ(j=1nxj(i)wj+b)=σ(WTX+b)\hat y^{(i)} = \sigma(\sum\limits_{j=1}^nx_j^{(i)}\cdot w_j + b) = \sigma(W^T\cdot X+b)

其中$W^T = [w_1,\cdots,w_n]$,$X^T=[x_1,x_2,\cdots,x_n]$。

import torch

class LogisticRegressionModel(torch.nn.Module):
    
    def __init__(self,):
        super(LogisticRegressionModel,self).__init__()
        self.linear = torch.nn.Linear(8,1)
        self.sigmoid = torch.nn.Sigmoid()
        
    def forward(self,X):
        y_pred = self.sigmoid(self.linear(X))
        return y_pred
        
lrm = LogisticRegressionModel()
image-20210227120525450

如果,权重$W$为$8 \times 2$的矩阵,则如下表示:

image-20210227120651890

示例

  • 神经网络层

image-20210227123147738
  • 定义模型

image-20210227131619619
import torch

class LogisticRegressionModel(torch.nn.Module):
    
    def __init__(self,):
        super(LogisticRegressionModel,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
    
lrm = LogisticRegressionModel()
  • 构造损失函数以及优化器

criterion = torch.nn.BCELoss(reduction='sum')
# lr为学习率
optimizer = torch.optim.SGD(lrm.parameters(),lr=0.1)
  • 训练

for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss.item())
    
    optimizer.zero_grad()
    loss.backward()
    
    optimizer.step()

更多激活函数

最后更新于

这有帮助吗?