二元逻辑回归(logistic regression)

这篇具有很好参考价值的文章主要介绍了二元逻辑回归(logistic regression)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一,原理

二,python代码

2.1 数据集的格式

2.2 代码

三,适用条件

一,原理

回归

        假设存在一些数据点,用一条直线或者曲线或折现去拟合这些点就叫做回归。也就是找出平面点上两个轴变量之间的函数关系,或者其他坐标系下的变量间关系。一句话就是:回归就是依靠已有数据点去拟合函数关系。

        常见的回归有:线性回归,非线性回归,局部加权回归……

逻辑回归回归的目标是一个二值结果(0和1),是一种常见的二元分类模型。本质就是线性回归与激活函数sigmoid的结合,与大脑神经元工作方式类似,是入门机器学习的基础。

应用:对于一个具体的实际问题,我们可以得到他既有的一些数据,那么就可以使用逻辑回归对这些数据进行特征处理学习,让计算机去寻找处数据之间的函数关系。当我们得到新的数据,就可以应用计算机得到的函数关系去预测某些数据所产生的结果。

理论来源

二元逻辑回归(logistic regression)

数学实现:

        线性回归指的是多个y=ax+b这种的一元函数进行累加,如下面所说的数据综合体。由于需要进行分类,使用sigmoid函数将连续的线性结果人为分为0和1两种状态。

二元逻辑回归(logistic regression)

sigmoid函数:

二元逻辑回归(logistic regression)

         以0.5为界限。

使用数学来实现神经元处理信息的过程:

前提:最终结果是0和1,表示两种分类结果。w(数据权重)成了模型的参数。

第一步:定义损失函数

二元逻辑回归(logistic regression)

第二步:

求解L(w)的某一个w使其函数值最小,那么与实际结果数据就越吻合。

二元逻辑回归(logistic regression)

 第三步:

二元逻辑回归(logistic regression)

        看这些符号已经头昏眼花。

第四步:程序实现

二元逻辑回归(logistic regression)

二,python代码

2.1 数据集的格式

        命名为testset.txt,是一个N×3的形式。-0.017612与14.053064之间是一个tab的距离。

二元逻辑回归(logistic regression)

2.2 代码

import numpy as np
import matplotlib.pyplot as plt


# 定义激活函数sigmoid
def sigmoid(z):
    return 1.0 / (1 + np.exp(-z))


# datas NxD
# labs Nx1
# w    Dx1

# 权重更新
def weight_update(datas, labs, w, alpha=0.01):
    z = np.dot(datas, w)  # Nx1,神经元接受的数据综合体,有N个数据
    h = sigmoid(z)  # Nx1,激活函数的值,0-1之间,相对于预测值
    Error = labs - h  # Nx1,预测值与实际值的误差,Y-h
    w = w + alpha * np.dot(datas.T, Error)
    return w


#进行训练,求解参数,非随机梯度下降
def train_LR(datas, labs, n_epoch=2, alpha=0.005):
    N, D = np.shape(datas)# datas NxD
    w = np.ones([D, 1])  # Dx1,给权重赋初始值,都是1
    # 进行n_epoch轮迭代
    for i in range(n_epoch):
        w = weight_update(datas, labs, w, alpha)
        error_rate = test_accuracy(datas, labs, w)#计算误差率
        print("epoch %d error %.3f%%" % (i, error_rate * 100))
    return w


# 随机梯度下降,带batchsize的,可以使更快的找到导数为0的点,而不会在此左右徘徊,alpha也不能取太大,导致在导数为0的点处左右徘徊
def train_LR_batch(datas, labs, batchsize, n_epoch=2, alpha=0.005):
    N, D = np.shape(datas)
    # weight 初始化
    w = np.ones([D, 1])  # Dx1
    N_batch = N // batchsize
    for i in range(n_epoch):
        # 数据打乱
        rand_index = np.random.permutation(N).tolist()
        # 每个batch 更新一下weight
        for j in range(N_batch):
            # alpha = 4.0/(i+j+1) +0.01
            index = rand_index[j * batchsize:(j + 1) * batchsize]
            batch_datas = datas[index]
            batch_labs = labs[index]
            w = weight_update(batch_datas, batch_labs, w, alpha)

        error = test_accuracy(datas, labs, w)
        print("epoch %d  误差率  %.2f%%" % (i, error * 100))
    return w


# 测试精确性,与模型无关,用于提醒展示效果,作用是计算误差率
def test_accuracy(datas, labs, w):
    N, D = np.shape(datas)
    z = np.dot(datas, w)  # Nx1
    h = sigmoid(z)  # Nx1
    lab_det = (h > 0.5).astype(np.float)
    error_rate = np.sum(np.abs(labs - lab_det)) / N
    return error_rate


# 画图,直观地表示出结果
def draw_desion_line(datas, labs, w, name="0.jpg"):
    dic_colors = {0: (.8, 0, 0), 1: (0, .8, 0)}

    # 画数据点
    for i in range(2):
        index = np.where(labs == i)[0]
        sub_datas = datas[index]
        plt.scatter(sub_datas[:, 1], sub_datas[:, 2], s=16., color=dic_colors[i])

    # 画判决线
    min_x = np.min(datas[:, 1])
    max_x = np.max(datas[:, 1])
    w = w[:, 0]
    x = np.arange(min_x, max_x, 0.01)
    y = -(x * w[1] + w[0]) / w[2]
    plt.plot(x, y)

    plt.savefig(name)

#加载数据集进行训练或者加载测试数据对模型进行检验
def load_dataset(file):
    with open(file, "r", encoding="utf-8") as f:
        lines = f.read().splitlines()

    # 取 lab 维度为 N x 1
    labs = [line.split("\t")[-1] for line in lines]
    labs = np.array(labs).astype(np.float32)
    labs = np.expand_dims(labs, axis=-1)  # Nx1

    # 取数据 增加 一维全是1的特征
    datas = [line.split("\t")[:-1] for line in lines]
    datas = np.array(datas).astype(np.float32)
    N, D = np.shape(datas)
    # 增加一个维度
    datas = np.c_[np.ones([N, 1]), datas]
    return datas, labs


if __name__ == "__main__":
    # 加载数据
    file = "1.txt"
    datas, labs = load_dataset(file)

    weights = train_LR_batch(datas, labs,batchsize=2, alpha=0.001, n_epoch=800)
    print('w1是{},w2是{},b是{}'.format(weights[0][0],weights[1][0],weights[2][0]))
    #回归直线就是w1x+w2y+b=0 
    draw_desion_line(datas, labs, weights, name="test_1.jpg")#将结果保存为jpg文件

三,适用条件

        多用于二维平面点集的分类,当数据集维度过大,逻辑回归的效果并不好,无法使交叉熵趋于0。

二元逻辑回归(logistic regression)文章来源地址https://www.toymoban.com/news/detail-462391.html

到了这里,关于二元逻辑回归(logistic regression)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习:逻辑回归(Logistic Regression)

    Logistic Regression. 本文目录: 逻辑回归模型 Logistic函数 交叉熵损失 梯度下降法 核逻辑回归 逻辑回归(logistic regression) 是一种二分类模型,其思想是通过引入一个函数将线性回归的输出限制在 [ 0 , 1 ] [0,1] [ 0 , 1

    2024年02月09日
    浏览(51)
  • 逻辑回归(Logistic Regression)和正则化

    案例: 在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。 二元分类问题: 将因

    2024年01月24日
    浏览(45)
  • 机器学习11:逻辑回归-Logistic Regression

    目录 1.计算概率 2.损失和正则化 2.1 逻辑回归的损失函数 2.2 逻辑回归中的正则化 3.参考文献

    2024年02月11日
    浏览(59)
  • sklearn实现逻辑回归(Logistic Regression)

    💥 项目专栏:sklearn实现经典机器学习算法(附代码+原理介绍) 🌟 哈喽,亲爱的小伙伴们,你们知道吗?最近我们的粉丝群里有好多小可爱私信问我一些关于决策树、逻辑回归等机器学习的超级有趣的问题呢!🌈 为了让大家更轻松地理解,我决定开一个超可爱的专栏,叫做

    2024年02月21日
    浏览(49)
  • Python实现逻辑回归(Logistic Regression)

    💥 项目专栏:【Python实现经典机器学习算法】附代码+原理介绍 👑 最近粉丝群中很多朋友私信咨询一些决策树、逻辑回归等机器学习相关的编程问题,为了能更清晰的说明,所以建立了本专栏 专门记录基于原生Python实现一些入门必学的机器学习算法 ,帮助广大零基础用户

    2024年02月01日
    浏览(35)
  • pytorch深度学习逻辑回归 logistic regression

    结果  

    2024年02月16日
    浏览(56)
  • 机器学习:基于逻辑回归(Logistic Regression)对股票客户流失预测分析

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 专栏案例:

    2023年04月26日
    浏览(50)
  • 多元回归预测 | Matlab基于逻辑回归(Logistic Regression)的数据回归预测,多输入单输出模型

    效果一览 文章概述 多元回归预测 | Matlab基于逻辑回归(Logistic Regression)的数据回归预测,多输入单输出模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

    2024年02月13日
    浏览(54)
  • 吴恩达老师《机器学习》课后习题2之逻辑回归(logistic_regression)

    用于解决输出标签y为0或1的二元分类问题 判断邮件是否属于垃圾邮件? 银行卡交易是否属于诈骗? 肿瘤是否为良性? 等等。 案例:根据学生的两门学生成绩,建立一个逻辑回归模型,预测该学生是否会被大学录取 数据集:ex2data1.txt python实现逻辑回归, 目标:建立分类器(求

    2024年02月09日
    浏览(46)
  • 逻辑回归(Logistic回归又名对数几率回归)原理及python代码实现

            为了实现Logistic回归分类器,我们可以在每个特征上都乘以一个回归系数,然后把所有的结果值相加,将这个总和代人Sigmoid函数中,进而得到一个范围在0~1之间的数值。任何大于0.5的数据被分人1类 ,小于0.5即被归人0类 ,所以Logistic回归也可以被看成是一种概率估

    2024年01月18日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包