【项目实战】pytorch实现逻辑斯蒂回归
视频指导:https://www.bilibili.com/video/BV1Y7411d7Ys?p=6
一些数据集
在pytorch框架下,里面面有配套的数据集,pytorch里面有一个torchversion的包,他可以提供相应的,比如MNIST这种很基础的数据集,但是安装的时候这些数据集不会包含在包里面,所以需要下载,具体代码以及解释如下:
import torchvision
train_set = torchvision.datasets.MNIST(root= '../dataset/mnist', train=True, download=True) //root后面表示把数据集安装在什么位置,train表示是要训练集还是测试集,download表示是否需要下载(如果没有下载就需要下载)
text_set = torchvision.datasets.MNIST(root= '../dataset/mnist', train=False, download=True)
还有一个叫做CIFAR-10 的数据集,训练集里面包含了5w个样本,测试集包含了1w个样本,内容就是一些图片,被分成了十类,分别表示不同的事务
import torchvision
train_set = torchvision.datasets.CIFAR10(...)
text_set = torchvision.datasets.CIFAR10(...)
逻辑斯蒂回归
首先我们自己设计几个数据
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])
然后开始设计模型
class LogisiticRegressionModel(torch.nn.Module):
def __init__(self):
super(LogisiticRegressionModel, self).__init__()
self.linear = torch.nn.Linear(1, 1)
def forward(self,x):
y_pred = F.sigmoid(self.linear(x))
return y_pred
这里和昨天不一样的地方在于forward里面使用了逻辑斯蒂回归
然后是优化器和损失函数
model = LogisiticRegressionModel()
critertion = torch.nn.BCELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
损失函数采用的是BCE,就是交叉熵损失
开始训练
for epoch in range(1000):
y_pred = model(x_data)
loss = critertion(y_pred,y_data)
print(epoch, loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
结果可视化
用matplotlib进行绘图可以使结果可视化,具体代码和解释如下
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200) //意思就是在0到10之间弄出来两百个点
x_t = torch.Tensor(x).view((200, 1)) //把他变成200行一列的矩阵
y_t = model(x_t) //送入模型
y = y_t.data.numpy() //用numpy接收y_data的数据
plt.plot(x, y) //绘图
plt.plot([0, 10], [0.5, 0.5], c='r') //表示在0到10,0.5到0.5上面画一条线(显然是一条直线)
plt.ylabel('probability of pass')
plt.grid()
plt.show()
总结
第一遍跑有一个警告
UserWarning: nn.functional.sigmoid is deprecated. Use torch.sigmoid instead. warnings.warn
查了一下,把
F.sigmoid(self.hidden(x))
#修改成以下语句
torch.sigmoid(self.hidden(x))
即可
估计是版本问题吧
然后我有魔改了一下代码,具体如下
import torch
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])
class LogisiticRegressionModel(torch.nn.Module):
def __init__(self):
super(LogisiticRegressionModel, self).__init__()
self.linear = torch.nn.Linear(1, 1)
def forward(self,x):
y_pred = torch.sigmoid(self.linear(x))
return y_pred
model = LogisiticRegressionModel()
critertion = torch.nn.BCELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(50000):
y_pred = model(x_data)
loss = critertion(y_pred,y_data)
print(epoch, loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 100, 2000)
x_t = torch.Tensor(x).view((2000, 1))
y_t = model(x_t)
y = y_t.data.numpy()
plt.plot(x, y)
plt.plot([0, 100], [0.5, 0.5], c='r')
plt.xlabel('hours')
plt.ylabel('pass')
plt.grid()
plt.show()
最后的结果,我愿称之为,过拟合之王

哈哈哈哈哈,很有意思
- 总之整个代码编写就分这几步:
- 准备数据;
- 设计模型;
- 构造损失函数和优化器;
- 训练过程;
- 打印结果
熟悉了就可以搞出自己的模型了
【项目实战】pytorch实现逻辑斯蒂回归的更多相关文章
- python机器学习实现逻辑斯蒂回归
逻辑斯蒂回归 关注公众号"轻松学编程"了解更多. [关键词]Logistics函数,最大似然估计,梯度下降法 1.Logistics回归的原理 利用Logistics回归进行分类的 ...
- 【转】机器学习笔记之(3)——Logistic回归(逻辑斯蒂回归)
原文链接:https://blog.csdn.net/gwplovekimi/article/details/80288964 本博文为逻辑斯特回归的学习笔记.由于仅仅是学习笔记,水平有限,还望广大读 ...
- 机器学习之LinearRegression与Logistic Regression逻辑斯蒂回归(三)
一 评价尺度 sklearn包含四种评价尺度 1 均方差(mean-squared-error) 2 平均绝对值误差(mean_absolute_error) 3 可释方差得分(explained_v ...
- [置顶] 局部加权回归、最小二乘的概率解释、逻辑斯蒂回归、感知器算法——斯坦福ML公开课笔记3
转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9113681 最近在看Ng的机器学习公开课,Ng的讲法循循善诱,感觉提高了不少 ...
- 【分类器】感知机+线性回归+逻辑斯蒂回归+softmax回归
一.感知机 详细参考:https://blog.csdn.net/wodeai1235/article/details/54755735 1.模型和图像: 2.数学定义推导和优化: 3.流程 ...
- spark机器学习从0到1逻辑斯蒂回归之(四)
逻辑斯蒂回归 一.概念 逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型.logistic回归的因变量可以是二分类的,也可以是多分类的.logis ...
- 逻辑斯蒂回归(Logistic Regression)
逻辑回归名字比较古怪,看上去是回归,却是一个简单的二分类模型. 逻辑回归的模型是如下形式: 其中x是features,θ是feature的权重,σ是sigmoid函数.将θ0视为θ0*x0(x0取值为 ...
- 逻辑斯蒂回归VS决策树VS随机森林
LR 与SVM 不同 1.logistic regression适合需要得到一个分类概率的场景,SVM则没有分类概率 2.LR其实同样可以使用kernel,但是LR没有support vector在计 ...
- [转]逻辑斯蒂回归 via python
# -*- coding:UTF-8 -*-import numpydef loadDataSet(): return dataMat,labelMat def sigmoid(inX): retur ...
随机推荐
- CSS进阶内容—盒子和阴影详解
CSS进阶内容 在学习了CSS基本知识之后,我们需要进一步了解CSS,因此写下了这篇文章 当然如果没有学习之前的知识,可以到我的主页中查看之前的文章:秋落雨微凉 - 博客园 CSS三大特性 首先我们先 ...
- 👨💻Mybatis源码我搞透了,面试来问吧!写了134个源码类,1.03万行代码!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言:手撸一万行! 完结撒花:4个月.20章.134个类.1.03万行代码! 22年3月初 ...
- 服务器宕机了,Kafka 消息会丢失吗?
大家好,我是树哥. 消息队列可谓是高并发下的必备中间件了,而 Kafka 作为其中的佼佼者,经常被我们使用到各种各样的场景下.随着 Kafka 而来得,还有三个问题:消息丢失.消息重复.消息顺序.今天 ...
- C语言项目实现顺序表
#include <stdio.h> #include <stdlib.h> #include "test_顺序表声明.h" /* run this pro ...
- 算法竞赛进阶指南0x41并查集
并查集简介 并查集的两类操作: Get 查询任意一个元素是属于哪一个集合. Merge 把两个集合合并在一起. 基本思想:找到代表元. 注意有两种方法: 使用一个固定的值(查询方便,但是在合并的时候需 ...
- typescript中的--strictFunctionTypes选项
什么是协变和逆变 原来,在泛型参数上添加了in关键字作为泛型修饰符的话,那么那个泛型参数就只能用作方法的输入参数,或者只写属性的参数,不能作为方法返回值等,总之就是只能是"入",不 ...
- The Art of Code
目录 1. Polyglot 2. Palin 3. Others 1. Polyglot 2. Palin 3. Others
- 2536-springsecurity系列--关于session管理1
版本信息 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...
- netdata检测工具的安装与使用
Netdata 是一款 Linux 性能实时监测工具..以web的可视化方式展示系统及应用程序的实时运行状态(包括cpu.内存.硬盘输入/输出.网络等linux性能的数据). Netdata文档地址: ...
- 梳理清楚springAOP,轻松面向切面编程
不知道大家有没有这样的感觉,平时经常说aop,但是对aop中的一些概念还是模糊,总感觉很飘渺,今天来梳理下关于aop的知识. 一.概念 我们知道现在开发都是spring,讲的最多的也是springAO ...