一般机器学习教程的前几章节,会讲到逻辑回归,一个很经典的分类算法;
对于训练数据量不多,且GPU资源有限的同学,这会是一个不错的选择;
关于算法原理,铺天盖地的文章,动手查阅一下,本文讲解重在实现一个简单的二分类的小例子;

一、首先生成两类数据,每个数据都在维度为2,利用make_blobs函数生成;
    然后构建系数矩阵,初始化权重weights与标签label;

def generate_data(show_data=False, **parm):data, label = make_blobs(n_samples=parm['samples'], n_features=parm['features'], \centers=parm['class'],cluster_std=[2,2],random_state =1)if show_data:plt.scatter(data[:, 0], data[:, 1], c=label)plt.savefig('rst.jpg')plt.show()m, n = data.shape# Logitic的前向公式记为:F(wx + b)# 为了增加常数b,即bias;# 构建方程矩阵【x1,x2,...,xn,1 】,dim(m,n+1)constant = np.ones((m, 1))data_matrix = np.concatenate((data, constant), axis=1)# 设定随机数种子,保证每次生成的随机数都一致;np.random.seed(1)# 采用正态分布,生成一组(n+1,1)维的权重weights = np.random.normal(loc=0.0, scale=1, size=((n + 1, 1)))return weights, data_matrix, label

生成的数据分布如下图:

·

额,看着有点不舒服,,凑合着看吧;

二、利用生成的数据,划分出什么是训练数据,什么是测试数据,我这里划分的比例为0.6;

def make_datasets(data, label, ratio=0.6):end = int(len(data) * ratio)train_data, train_label = data[:end], label[:end]test_data, test_label = data[end:], label[end:]datasets = {'train': train_data, 'train_label': train_label, 'test': test_data, 'test_label': test_label}return datasets

三、前向计算,需要实现sigmoid激活函数,如下:

def sigmoid(x, w):##Logitic的激活函数inpt = - np.dot(x,w)rst = 1.0 / (1.0 + np.exp(inpt))return rst

四、sigmoid预测出来的值,大于0.5置为1,小于0.5置为0,根据此计算准确率,如下:

def classifier(testData, weights, test_label):prob = sigmoid(testData,weights)prob[prob > 0.5] = 1prob[prob <= 0.5] = 0acc = np.sum(prob == test_label)recall = acc / len(prob)return recall

五、构建具体的训练流程,每10个epoch评估一下模型性能,具体代码如下:

def train(datasets, weights, valid=10, **parm):# --解析数据,train,testbest_acc = 0.0best_weights = Nonetr_data, tr_label = datasets['train'], datasets['train_label']test_data, test_label = datasets['test'], datasets['test_label']epoch = parm['epoch']lr = parm['lr']#维度不匹配,将tr_label 变换为2维的tr_label = np.expand_dims(tr_label, axis=1)test_label = np.expand_dims(test_label, axis=1)# --开始训练,epoch == 1000for k in tqdm(range(epoch)):rst = sigmoid(tr_data, weights)loss = tr_label - rst# 逻辑回归的参数更新,这里采用梯度下降weights = weights + lr * np.dot(tr_data.T, loss)if k % valid == 0:acc = classifier(test_data, weights, test_label)if acc > best_acc:print(f'At Epoch {k},Get best acc is {acc}')best_acc = accbest_weights = weights.copy()return best_weights

六、最终主函数串联起来就好了,具体代码如下:

if __name__ == "__main__":st = time.time()parm = {'samples': 2000, 'class': 2, 'features': 4, 'lr': 0.0001, 'epoch': 1000}weights, data, label = generate_data(**parm)datasets = make_datasets(data, label)best = train(datasets, weights, **parm)print(f'weights is {best}')

七、所引用的package如下

import matplotlib.pyplot as plt
import numpy as np
from tqdm import tqdm
import time
from sklearn.datasets import make_blobs

整体的训练过程如下:

最终得到了0.9925的准确率;
有问题欢迎随时交流!

Logitic逻辑回归二分类代码实现相关推荐

  1. 深度学习 神经网络(5)逻辑回归二分类-Pytorch实现乳腺癌预测

    深度学习 神经网络 逻辑回归二分类-乳腺癌预测 一.前言 二.代码实现 2.1 引入依赖库 2.2 加载并查看数据集 2.3 数据处理 2.4 数据分割 2.5 迭代训练 2.6 数据验证 一.前言 ...

  2. 吴恩达机器学习之逻辑回归(二分类)

    吴恩达机器学习之逻辑回归 逻辑回归 二分类逻辑回归 二分类逻辑回归案例 python代码实现(含详细代码注释): 案例中几个问题的解析 不同于线性回归,逻辑回归的hθ(x)还需要用sigmoid函数处 ...

  3. 逻辑回归二分类算法python_多分类逻辑回归 (Multinomial Logistic Regression)

    前言 分类从结果的数量上可以简单的划分为: 二分类(Binary Classification) 多分类(Multinomial Classification). 其中二分类是最常见且使用最多的分类场 ...

  4. 逻辑回归二分类算法python_机器学习第七周--二分类算法逻辑回归

    一.Logistic分类算法 逻辑回归(Logistic Regression, LR)是传统机器学习中的一种分类模型,由于算法的简单和高效,解释性好以及容易扩展等优点,被广泛应用于点击率预估(CTR ...

  5. [从0开始机器学习]5.逻辑回归 二分类

  6. matlab逻辑回归工具箱,matlab-逻辑回归二分类(Logistic Regression)

    逻辑回归二分类 用到的预测函数为 其中,h为预测函数(大于0.5为一类,小于等于0.5为另一类).θ为各个特征的参数.θ=[θ1,θ2,θ3...]T 损失函数J(θ)为 利用梯度下降算法进行参数的更 ...

  7. 【数据分析与挖掘】基于LightGBM,XGBoost,逻辑回归的分类预测实战:英雄联盟数据(有数据集和代码)

    机器学习-LightGBM 一.LightGBM的介绍与应用 1.1 LightGBM的介绍 1.2 LightGBM的应用 二.数据集来源 三.基于英雄联盟数据集的LightGBM分类实战 Step ...

  8. 机器学习笔记-基于逻辑回归的分类预测

    天池学习笔记:AI训练营机器学习-阿里云天池 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有&quo ...

  9. 机器学习核心总结-概念、线性回归、损失函数、泛化及数据集划分、特征工程、逻辑回归和分类

    文章目录 一.机器学习入门概念 一.基本概念 机器学习:让机器进行学习和决策 机器学习分类:无监督学习.监督学习.强化学习 深度学习:模拟人脑,自动提取输入特征,是实现机器学习的方式之一 神经网络:一 ...

最新文章

  1. 科技部:学术不端零容忍!违规人员所获职称、奖金等全部清退归零
  2. sizeof()与strlen()的区别与联系
  3. 云网融合 — 应用场景
  4. linux nginx 图片服务器,搭建Nginx图片服务器(Linux)
  5. MUI 拍照和从系统相册选择图片上传
  6. YFI创始人旗下多链跨链平台multichain.xyz即将投入使用
  7. BCELoss忽视某个类别
  8. Java toString()方法
  9. 西游释厄传 所有物品代码
  10. win10定时锁定计算机,Win10自动锁屏时间太长了怎么设置?Win10设置自动锁屏时间的操作...
  11. python arp断网攻击_ARP断网攻击的原理与解决方法讲解 | 小马激活官网
  12. RK61键盘配置方法
  13. 【原创】【歌曲评论】【之二】【白色风车】
  14. 关于:-1: error: collect2.exe: error: ld returned 1 exit status和The process was ended forcefully.解决方法
  15. jacob简单使用CAD与Excel
  16. 终于,可以在Excel中直接使用Python!
  17. git archive详解
  18. vcruntime140.dll下载【vcruntime140.dll丢失的解决方法】
  19. 中学时代的记忆---老师的黑板
  20. [置顶] C#执行Excel宏模版的方法

热门文章

  1. 裁员吵架散摊子, 马斯克:我太难了;狠心开源一个舆情获取项目;特征工程跟调参一样简单了?!NeRF大佬直呼卷不动了;前沿论文 | ShowMeAI资讯日报
  2. 计算机语言翻译的情诗,经典英文爱情诗_唯美的情诗带翻译
  3. 8647服务器装系统,机柜系统资料的.doc
  4. 诺贝尔物理学奖与信息通信技术发展
  5. GoogleEarth二次开发平台指南(3) ---如何获取点坐标、绘制线路和区域、沿指定线路三维漫游
  6. 哪个文字转语音朗读软件好?文字转语音软件有哪些
  7. 梯度下降法介绍( 案列:波士顿放假预测)
  8. atu打开服务器端文件失败,ATU操作流程.docx
  9. ()文献可视化--vosviewer入门
  10. sql获取汉字首字母