机器学习之逻辑回归模型

2023-11-04

1 逻辑回归模型介绍

        逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是一种机器学习算法,属于分类和预测算法中的一种,主要用于解决二分类问题。逻辑回归通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将购买的概率设置为因变量,将用户的特征属性,例如性别,年龄,注册时间等设置为自变量。根据特征属性预测购买的概率。

        逻辑回归它通过建立一个逻辑回归模型来预测输入样本属于某个类别的概率。逻辑回归模型的核心思想是使用一个称为sigmoid函数(或者称为逻辑函数)的函数来建模概率。sigmoid函数的公式为:

3f7cad7875574855a07fd6d7384381ad.png

2 逻辑回归的应用场景

        逻辑回归是一种简单而高效的机器学习算法,它具有多个优势。首先,逻辑回归模型易于理解和实现,计算效率高,特别适用于大规模数据集。其次,逻辑回归提供了对结果的解释和推断能力,模型的系数可以揭示哪些特征对分类结果的影响较大或较小。此外,逻辑回归适用于高维数据,能够处理具有大量特征的问题,并捕捉到不同特征之间的关系。另外,逻辑回归能够输出概率预测,而不仅仅是分类结果,对于需要概率估计或不确定性分析的任务非常有用。最后,逻辑回归对于数据中的噪声和缺失值具有一定的鲁棒性,能够适应现实世界中的不完美数据。综上所述,逻辑回归是一种强大而实用的分类算法,在许多实际应用中被广泛采用。以下是逻辑回归常见的应用场景。

  • 金融领域:逻辑回归可用于信用评分、欺诈检测、客户流失预测等金融风险管理任务。
  • 医学领域:逻辑回归可以用于疾病诊断、患者预后评估、药物反应预测等医学决策支持任务。

  • 市场营销:逻辑回归可用于客户分类、用户行为分析、广告点击率预测等市场营销领域的任务。

  • 自然语言处理:逻辑回归可用于文本分类、情感分析、垃圾邮件过滤等自然语言处理任务。

  • 图像识别:逻辑回归可以应用于图像分类、目标检测中的二分类问题。

        逻辑回归的简单性和可解释性使其在许多实际应用中得到广泛应用。然而,对于复杂的非线性问题,逻辑回归可能不适用,此时可以考虑使用其他更复杂的模型或者结合特征工程技术来改进性能。

 3 基于pytorch实现银行欺诈人员的二分类判别

(1)数据集

在一个银行欺诈数据集上,通过15个特征,得到二分类的判别结果:是否为欺诈失信人员。建的模型依旧是线性模型。输出的值通过sigmoid进行转换,变成0~1的概率。一般认为大于0.5就是1,小于0.5就是0。

0

56.75

12.25

0

0

6

0

1.25

0

0

4

0

0

200

0

-1

0

31.67

16.165

0

0

1

0

3

0

0

9

1

0

250

730

-1

1

23.42

0.79

1

1

8

0

1.5

0

0

2

0

0

80

400

-1

1

20.42

0.835

0

0

8

0

1.585

0

0

1

1

0

0

0

-1

0

26.67

4.25

0

0

2

0

4.29

0

0

1

0

0

120

0

-1

0

34.17

1.54

0

0

2

0

1.54

0

0

1

0

0

520

50000

-1

1

36

1

0

0

0

0

2

0

0

11

1

0

0

456

-1

0

25.5

0.375

0

0

6

0

0.25

0

0

3

1

0

260

15108

-1

0

19.42

6.5

0

0

9

1

1.46

0

0

7

1

0

80

2954

-1

0

35.17

25.125

0

0

10

1

1.625

0

0

1

0

0

515

500

-1

0

32.33

7.5

0

0

11

2

1.585

0

1

0

0

2

420

0

1

1

38.58

5

0

0

2

0

13.5

0

1

0

0

0

980

0

1

最后一列为-1是失信欺诈人员,为1不是失信欺诈人员

(2)pytorch完整代码

import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from torch import nn
from torch.utils.data import TensorDataset, DataLoader
from sklearn.model_selection import train_test_split


def accuracy(y_pred,y_true):
    y_pred = (y_pred>0.5).type(torch.int32)
    acc = (y_pred == y_true).float().mean()
    return acc

loss_fn = nn.BCELoss()
epochs = 1000
batch = 16
lr = 0.0001

data = pd.read_csv("credit.csv",header=None)
X = data.iloc[:,:-1]
Y = data.iloc[:,-1].replace(-1,0)


X = torch.from_numpy(X.values).type(torch.float32)
Y = torch.from_numpy(Y.values).type(torch.float32)

train_x,test_x,train_y,test_y = train_test_split(X,Y)

train_ds = TensorDataset(train_x,train_y)
train_dl = DataLoader(train_ds,batch_size=batch,shuffle=True)

test_ds = TensorDataset(test_x,test_y)
test_dl = DataLoader(test_ds,batch_size=batch)

model = nn.Sequential(
                nn.Linear(15,1),
                nn.Sigmoid()
)
optim = torch.optim.Adam(model.parameters(),lr=lr)

accuracy_rate = []

for epoch in range(epochs):
    for x,y in train_dl:
        y_pred = model(x)
        y_pred = y_pred.squeeze()
        loss = loss_fn(y_pred,y)
        optim.zero_grad()
        loss.backward()
        optim.step()

    with torch.no_grad():
        # 训练集的准确率和loss
        y_pred = model(train_x)
        y_pred = y_pred.squeeze()
        epoch_accuracy  = accuracy(y_pred,train_y)
        epoch_loss  = loss_fn(y_pred,train_y).data

        accuracy_rate.append(epoch_accuracy*100)

        # 测试集的准确率和loss
        y_pred = model(test_x)
        y_pred = y_pred.squeeze()

        epoch_test_accuracy  = accuracy(y_pred,test_y)
        epoch_test_loss  = loss_fn(y_pred,test_y).data


        print('epoch:',epoch,
              'train_loss:',round(epoch_loss.item(),3),
              "train_accuracy",round(epoch_accuracy.item(),3),
              'test_loss:',round(epoch_test_loss.item(),3),
              "test_accuracy",round(epoch_test_accuracy.item(),3)
             )


accuracy_rate = np.array(accuracy_rate)
times = np.linspace(1, epochs, epochs)
plt.xlabel('epochs')
plt.ylabel('accuracy rate')
plt.plot(times, accuracy_rate)
plt.show()

(3)输出结果

epoch: 951 train_loss: 0.334 train_accuracy 0.869 test_loss: 0.346 test_accuracy 0.866
epoch: 952 train_loss: 0.334 train_accuracy 0.863 test_loss: 0.348 test_accuracy 0.866
epoch: 953 train_loss: 0.337 train_accuracy 0.867 test_loss: 0.358 test_accuracy 0.86
epoch: 954 train_loss: 0.334 train_accuracy 0.867 test_loss: 0.35 test_accuracy 0.866
epoch: 955 train_loss: 0.334 train_accuracy 0.871 test_loss: 0.346 test_accuracy 0.866
epoch: 956 train_loss: 0.333 train_accuracy 0.865 test_loss: 0.348 test_accuracy 0.872
epoch: 957 train_loss: 0.333 train_accuracy 0.871 test_loss: 0.349 test_accuracy 0.866
epoch: 958 train_loss: 0.333 train_accuracy 0.867 test_loss: 0.347 test_accuracy 0.866
epoch: 959 train_loss: 0.334 train_accuracy 0.863 test_loss: 0.352 test_accuracy 0.866
epoch: 960 train_loss: 0.333 train_accuracy 0.867 test_loss: 0.35 test_accuracy 0.878
epoch: 961 train_loss: 0.334 train_accuracy 0.873 test_loss: 0.346 test_accuracy 0.866
epoch: 962 train_loss: 0.334 train_accuracy 0.865 test_loss: 0.353 test_accuracy 0.866
epoch: 963 train_loss: 0.333 train_accuracy 0.873 test_loss: 0.35 test_accuracy 0.866
epoch: 964 train_loss: 0.334 train_accuracy 0.863 test_loss: 0.345 test_accuracy 0.872
epoch: 965 train_loss: 0.333 train_accuracy 0.861 test_loss: 0.351 test_accuracy 0.866
epoch: 966 train_loss: 0.333 train_accuracy 0.873 test_loss: 0.348 test_accuracy 0.866
epoch: 967 train_loss: 0.333 train_accuracy 0.863 test_loss: 0.348 test_accuracy 0.866
epoch: 968 train_loss: 0.333 train_accuracy 0.867 test_loss: 0.351 test_accuracy 0.866
epoch: 969 train_loss: 0.334 train_accuracy 0.869 test_loss: 0.345 test_accuracy 0.878
epoch: 970 train_loss: 0.333 train_accuracy 0.869 test_loss: 0.348 test_accuracy 0.872
epoch: 971 train_loss: 0.335 train_accuracy 0.865 test_loss: 0.344 test_accuracy 0.86
epoch: 972 train_loss: 0.333 train_accuracy 0.867 test_loss: 0.35 test_accuracy 0.86
epoch: 973 train_loss: 0.334 train_accuracy 0.871 test_loss: 0.345 test_accuracy 0.872
epoch: 974 train_loss: 0.333 train_accuracy 0.865 test_loss: 0.351 test_accuracy 0.866
epoch: 975 train_loss: 0.333 train_accuracy 0.873 test_loss: 0.351 test_accuracy 0.86
epoch: 976 train_loss: 0.333 train_accuracy 0.869 test_loss: 0.346 test_accuracy 0.878
epoch: 977 train_loss: 0.333 train_accuracy 0.863 test_loss: 0.351 test_accuracy 0.866
epoch: 978 train_loss: 0.332 train_accuracy 0.865 test_loss: 0.351 test_accuracy 0.866
epoch: 979 train_loss: 0.332 train_accuracy 0.871 test_loss: 0.349 test_accuracy 0.866
epoch: 980 train_loss: 0.333 train_accuracy 0.865 test_loss: 0.345 test_accuracy 0.872
epoch: 981 train_loss: 0.332 train_accuracy 0.867 test_loss: 0.348 test_accuracy 0.872
epoch: 982 train_loss: 0.332 train_accuracy 0.863 test_loss: 0.349 test_accuracy 0.872
epoch: 983 train_loss: 0.333 train_accuracy 0.865 test_loss: 0.353 test_accuracy 0.866
epoch: 984 train_loss: 0.332 train_accuracy 0.865 test_loss: 0.35 test_accuracy 0.872
epoch: 985 train_loss: 0.333 train_accuracy 0.867 test_loss: 0.353 test_accuracy 0.86
epoch: 986 train_loss: 0.333 train_accuracy 0.871 test_loss: 0.345 test_accuracy 0.866
epoch: 987 train_loss: 0.331 train_accuracy 0.865 test_loss: 0.349 test_accuracy 0.872
epoch: 988 train_loss: 0.332 train_accuracy 0.869 test_loss: 0.345 test_accuracy 0.872
epoch: 989 train_loss: 0.332 train_accuracy 0.865 test_loss: 0.353 test_accuracy 0.866
epoch: 990 train_loss: 0.331 train_accuracy 0.865 test_loss: 0.348 test_accuracy 0.872
epoch: 991 train_loss: 0.333 train_accuracy 0.875 test_loss: 0.344 test_accuracy 0.86
epoch: 992 train_loss: 0.332 train_accuracy 0.865 test_loss: 0.351 test_accuracy 0.866
epoch: 993 train_loss: 0.331 train_accuracy 0.869 test_loss: 0.348 test_accuracy 0.872
epoch: 994 train_loss: 0.331 train_accuracy 0.871 test_loss: 0.348 test_accuracy 0.872
epoch: 995 train_loss: 0.331 train_accuracy 0.865 test_loss: 0.347 test_accuracy 0.872
epoch: 996 train_loss: 0.331 train_accuracy 0.865 test_loss: 0.347 test_accuracy 0.872
epoch: 997 train_loss: 0.331 train_accuracy 0.867 test_loss: 0.35 test_accuracy 0.872
epoch: 998 train_loss: 0.331 train_accuracy 0.867 test_loss: 0.349 test_accuracy 0.872
epoch: 999 train_loss: 0.331 train_accuracy 0.865 test_loss: 0.348 test_accuracy 0.872

bb1e0726dc7943cea90943a70ff470cd.png

 4 完整数据集及代码下载

完整代码及数据集:代码和数据集

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习之逻辑回归模型 的相关文章

随机推荐

  • 电网电压的三相静止对称坐标系和三相电网电压的相量表示法

    电网电压的空间电压矢量和电网电压的相量表示这两个概念需要区分清楚 分别参考邱关源的 电路 和张兴的 PWM整流 相关章节 图2 三相电网电压的相量表示法 电网电压的相量表示 三相相差120度 整体逆时针50HZ旋转 这里的120度是指三分之
  • ceph -s分析

    1 源码跟踪 1 1 get cluster status https github com ceph ceph blob 2a724a2ff313701fd7f6278ce8ed7f440bb355e0 src mon Monitor c
  • Jenkins pipeline拉取代码超时

    拉取代码报错 using GIT ASKPASS to set credentials gt git fetch tags progress http 192 168 1 8 1234 bi web xxxxxx git refs head
  • Linux学习笔记:win10安装虚拟机

    第一步 打开win10自带的虚拟机 第一步 打开win10自带的虚拟机Hyper V 需要 win10系统 1 点击windows键 e键打开文件资源管理器 右击此电脑 gt 选择属性 gt 打开控制面板 2 选择控制面板主页 gt 选择程
  • 机器人识别抓取笔记(基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计:综述)

    Real Time Deep Learning Approach to Visual Servo Control and Grasp Detection for Autonomous Robotic Manipulation 基于视觉的机器
  • el-upload的多文件上传

    el upload实现多文件上传的方法
  • 【C++】第一章:多数据输入时的分隔问题

    在键盘输入多数据时 必须用空格键 Tab键或enter键隔开 不同数据类型的输入 按数据类型读取数据 当用enter键分隔数据时 当用空格键分隔时结果是一样的 多数据错误输入情况 当有与数据类型不匹配的数据时 用空格键分隔 按变量数据类型依
  • vue.js使用props在父子组件之间传参

    prop 组件实例的作用域是孤立的 这意味着不能 也不应该 在子组件的模板内直接引用父组件的数据 要让子组件使用父组件的数据 我们需要通过子组件的 props 选项 子组件要使用 props选项声明它期待获得的数据 官方的解释非常清晰了 两
  • vue进阶04-vue文档生成工具vuepress2

    介绍 VuePress 是一个以 Markdown 为中心的静态网站生成器 你可以使用 Markdown 来书写内容 如文档 博客等 然后 VuePress 会帮助你生成一个静态网站来展示它们 VuePress 诞生的初衷是为了支持 Vue
  • Java中的substring截取字符串方法

    1 问题描述 在处理字符串的过程中有很多情况下会遇到需要截取字符串的情况 这个时候使用Java中提供的substring方法来截取就非常方便了 2 其中比较经常使用到的方法有两个 public String substring int be
  • 安全通用要求之安全通信网络

    安全通信网络 网络架构 业务高峰期 安全要求 需要保证网络设备的业务处理能力满足高峰期的需要 要求解读 了解业务高峰的时间段 核查该时间段内设备的处理能力是否满足 测评方法 确定业务高峰期的时间段 访谈查看网管平台的统计数据 业务高峰期时间
  • 浅谈Android环境开发配置

    经过两个月的java基础学习 个人觉得在搭建开发环境配置方面 Android环境开发比Java环境开发麻烦多了 Java环境配置前面我谈过了 这里就只写写Android的环境开发 Android环境开发需要Android SDK开发包 根据
  • Midjourney V5横空出世:画出完美中国情侣 逼真得令人毛骨悚然

    雷递网 雷建平 3月20日 2023年 AI技术正在加速对人类世界的改变 在ChatGPT的升级版GPT 4横空出世 能玩梗图还能做网页之际 Midjourney V5已正式发布 该服务可以生成逼真的图像 其质量水平被一些AI艺术爱好者称为
  • es7合并数组相关 报错Uncaught (in promise) TypeError: Invalid attempt to spread non-iterable instance. In ...

    方法一 let o1 a 1 b 2 c 3 let o2 o1 d 4 o2 a 1 b 2 c 3 d let arr1 0 1 2 let arr2 arr1 3 arr2 0 1 2 3 方法二 let o1 a 1 b 2 c 3
  • Java的Iterator(迭代器)

    Java迭代器 Iterator 是 Java 集合框架中的一种机制 它提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法 Java Iterator 迭代器 不是一个集合 它是一种用于访问集合的方法 可用于迭代 ArrayList
  • 快速理解ES6的模板字面量?

    let abc 天空 hhh 大地 我们要将字符串和上述的两个变量拼接 并在后续的程序中 输出一个拼接后的字符串 传统实现方式 let testString 我们需要仰望 abc 的理想者 同样也需要脚踏 hhh 的实干派 console
  • 让合作伙伴拥有自己专属的刷脸支付品牌

    刷脸支付OEM合作模式即刷脸支付品牌定制 是行业内专业从事支付系统产品研发 在刷脸支付领域 具备强大的技术开发能力以及服务运营能力的公司 将目前成熟的产品系统框架进行品牌更换 让合作伙伴快速拥有自己专属的刷脸支付品牌 快速拓展市场 做刷脸支
  • Vue 解决路由重复 Uncaught (in promise)错误

    Holle 我是Boy 今天给大家分享一下关于 Vue 解决路由重复 Uncaught in promise 错误 的问题 话不多说直接来看 在脚手架router文件夹的index js写入 1 第一种方法 const routerPush
  • kubelet启动失败

    原因之一 是kubelet cgroup驱动程序 cgroupfs 与docker cgroup驱动程序不同 公司的k8s 新增了一个节点 但kubelet启动一直报错 无法启动 网上找了半天 发现是kubelet cgroup驱动程序 c
  • 机器学习之逻辑回归模型

    1 逻辑回归模型介绍 逻辑回归 Logistic Regression LR 又称为逻辑回归分析 是一种机器学习算法 属于分类和预测算法中的一种 主要用于解决二分类问题 逻辑回归通过历史数据的表现对未来结果发生的概率进行预测 例如 我们可以