2021-07-26

标题逻辑回归

import torch
from torch import nn
from matplotlib import pyplot as plt
import numpy as np
from torch.distributions import MultivariateNormal  #构建了多元高斯分布
#设置两个高斯分布的均值向量和高斯矩阵
mu1=-3*torch.ones(2)
mu2=3*torch.ones(2)
sigmal1=torch.eye(2)*0.5
sigmal2=torch.eye(2)*2
#从2个高斯分布中取100个样本
m1=MultivariateNormal(mu1,sigmal1)
m2=MultivariateNormal(mu2,sigmal2)
x1=m1.sample((100,))
x2=m2.sample((100,))
#设置政府样本标签
y=torch.zeros((200,1))
y[100:]=1
#组合打乱样本
x=torch.cat([x1,x2],dim=0)
idx=np.random.permutation(len(x))
print(idx)
x=x[idx]
y=y[idx]
#绘制样本
plt.scatter(x1.numpy()[:,0],x1.numpy()[:,1])
plt.scatter(x2.numpy()[:,0],x2.numpy()[:,1])
#plt.show()
#线性方程
D_in,D_out=2,1
linear=nn.Linear(D_in,D_out,bias=True)
output=linear(x)

print(x.shape,linear.weight.shape,linear.bias.shape,output.shape)

def my_linear(x,w,b):
    return torch.mm(x,w.t())+b

torch.sum((output-my_linear(x,linear.weight,linear.bias)))
#激活函数
sigmoid=nn.Sigmoid()
scores=sigmoid(output)
def my_sigmoid(x):
    x=1/(1+torch.exp(-x))
    return x

#print(torch.sum(sigmoid(output)-my_sigmoid(output)))
#损失函数
loss=nn.BCELoss()
loss(sigmoid(output),y)

import torch.nn as nn

class LogisticRegression(nn.Module):
    def __init__(self,D_in):
        super(LogisticRegression,self).__init__()
        self.linear=nn.Linear(D_in,1)
        self.sigmoid=nn.Sigmoid()
        pass
    def forward(self,x):
        x=self.linear(x)
        output=self.sigmoid(x)
        return output
    pass
lr_model=LogisticRegression(2)
loss(lr_model(x),y)
#优化算法
from torch import optim
optimizer=optim.SGD(lr_model.parameters(),lr=0.03)

batch_size=10
iters=10
for _ in range(iters):
    for i in range(int(len(x)/batch_size)):
        input=x[i*batch_size:(i+1)*batch_size]
        target = y[i * batch_size:(i + 1) * batch_size]
        optimizer.zero_grad()
        output=lr_model(input)
        l=loss(output,target)
        l.backward()
        optimizer.step()
        pass
    pass
#主函数
pred_neg=(output <= 0.5).view(-1)
pred_pos=(output > 0.5).view(-1)
#plt.scatter(x[pred_neg,0],x[pred_neg ,1])
#plt.scatter(x[pred_pos,0],x[pred_pos ,1])


w=lr_model.linear.weight[0]
b=lr_model.linear.bias[0]

def draw_decision(x,b,x0):
    x1=(-b-w[0]*x0)/w[1]
    plt.plot(x0.detach().numpy(),x1.detach().numpy(),'r')
    pass
draw_decision(w,b,torch.linspace(x.min(),x.max(),50))
plt.show()

高斯分布
高斯分布200个样本点示例
在这里插入图片描述
逻辑回归聚类效果

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值