机器学习(五)logistic回归

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

目录

1.Logistic回归概述

1.1 Sigmoid函数

1.2 基于最优化方法的最佳回归系数确定

1.2.1 极大似然估计

1.2.2 梯度上升法

1.2.3 梯度下降算法

 2.Logistic实例分析

2.1准备数据

2.2使用梯度上升算法进行分类

3.实验总结 

Logistics回归模型通常被用于处理二分类问题,它是一种用于分析各个影响因素(x1,x2,...xn)与分类结果y之间关系的有监督学习方法。虽然它的名字是“回归”,但实际却是一种分类学习方法。这里的“回归”一词源于最佳拟合,表示要找到最佳拟合参数集,因此,logistic训练分类器时的做法就是寻找最佳拟合参数,使用的是最优化方法。

1.Logistic回归概述

我们都知道使用线性模型可以进行回归学习,但若要做的是分类任务改如何处理?只需要找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来。

考虑二分类任务,其输出标记y的取值为0和1,而线性回归模型产生的预测值logistics回归模型分析,回归,人工智能是实值,于是需将实值z转换为0/1值。通过Sigmoid函数引入非线性因素,可以实现实值z转换为0/1值,处理二分类问题。

1.1 Sigmoid函数

首先我们介绍一下Sigmoid函数,也称为逻辑函数:

                logistics回归模型分析,回归,人工智能

其函数曲线如下:

                logistics回归模型分析,回归,人工智能

从上图可以看出sigmoid函数是一个s形的曲线,它的取值是[0,1]之间,在远离0的地方函数的值会很快接近0或者1。它的这个特性对于解决二分类问题十分重要。

逻辑回归的假设函数形式如下:

        logistics回归模型分析,回归,人工智能           logistics回归模型分析,回归,人工智能

所以:

                        logistics回归模型分析,回归,人工智能

其中x是我们的输入,w和b为我们要求取的参数

若将y视为样本x作为正例的可能性,则1-y是其反例可能性,两者的比值为称为“几率”,反映了x作为正例的相对可能性

样本作为正例的相对可能性的对数

               logistics回归模型分析,回归,人工智能 logistics回归模型分析,回归,人工智能

因此有: 

                                       logistics回归模型分析,回归,人工智能

 上面两个式子分别表示y=1和y=0的概率。上述过程我们通过sigmoid函数将z值映射到0到1之间,获得数值之后就可以进行分类。如定义阈值为0.5,y*为分类结果,则,实际应用时特定的情况可以选择不同的阈值。接下来我们要解决的问题就是获得最佳回归系数,即求解w和b得值。

1.2 基于最优化方法的最佳回归系数确定

1.2.1 极大似然估计

极大似然估计的方法步骤:

  • 确定待求解的未知参数logistics回归模型分析,回归,人工智能,如均值、方差或特定分布函数的参数等;
  • 计算每个样本logistics回归模型分析,回归,人工智能的概率密度为logistics回归模型分析,回归,人工智能
  • 根据样本的概率密度累乘构造似然函数:logistics回归模型分析,回归,人工智能
  • 通过似然函数最大化(求导为0),求解未知参数θ,为了降低计算难度,可采用对数加法替换概率乘法,通过导数为0/极大值来求解未知参数。

我们可通过“极大似然法”来估计w和b,给定数据集,最大化样本属于其真实标记的概率,等同于最大化对数似然函数:

                                        logistics回归模型分析,回归,人工智能

为便于讨论,令则logistics回归模型分析,回归,人工智能可简化为

令,则上述式中的似然项可重写为    

                       logistics回归模型分析,回归,人工智能

根据sigmoid函数,似然函数可重写为:

                             logistics回归模型分析,回归,人工智能

最大化对数似然函数等价于最小化,是关于的高阶可导连续凸函数,经典的数值优化算法如梯度下降法可求得其最优解

1.2.2 梯度上升法

 梯度上升法基本的思想是:要找到某函数的 最大值,最好的方法是沿着该函数的梯度方向探寻。如果梯度记为∇,则函数f(x,y)的梯度由 下式表示:

                                logistics回归模型分析,回归,人工智能

这个梯度意味着要沿x的方向移动 logistics回归模型分析,回归,人工智能,沿y的方向移动logistics回归模型分析,回归,人工智能 。其中,函数f(x,y) 必须要在待计算的点上有定义并且可微。如下图:

                        logistics回归模型分析,回归,人工智能

 梯度上升算法到达每个点后都会重新估计移动的方向。从P0开始,计算完该点的梯度,函数就根据梯度移动到下一点P1。在P1点,梯度再次被重新计算,并沿新的梯度方向移动到P2。如此循环迭代,直到满足停止条件。迭代的过程中,梯度算子总是保证我们能选取到最佳的移动方向。我们知道了移动的反向,那移动量的大小是多少。该量值称为步长,记做α。用向量来表示的话,梯度上升算法的迭代公式如下:

                                logistics回归模型分析,回归,人工智能

该公式将一直被迭代执行,直至达到某个停止条件为止,比如迭代次数达到某个指定值或算法达到某个可以允许的误差范围。

1.2.3 梯度下降算法

梯度下降算法,它与上述的梯度上升算法是一样的,只是公式中的加法需要变成减法。因此,对应的公式可以写成:

                                logistics回归模型分析,回归,人工智能

梯度上升算法用来求函数的最大值,而梯度下降算法用来求函数的最小值。

 2.Logistic实例分析

利用Logistic回归模型根据身高、体重和肺活量预测性别

2.1准备数据

数据部分截图:

                logistics回归模型分析,回归,人工智能

2.2使用梯度上升算法进行分类

logistics回归模型分析,回归,人工智能

sigmoid函数:

# sigmoid函数
def sigmoid(inX):
    return 1.0 / (1 + exp(-inX))

梯度上升算法:

# 梯度上升算法
def gradAscent(dataMatIn, classLabels):                            # dataMatIn数据集、classLabels数据标签
    dataMatrix = mat(dataMatIn)                                    # 转换为NumPy矩阵
    labelMat = mat(classLabels).transpose()                        # 转换为NumPy矩阵,并且矩阵转置
    m, n = shape(dataMatrix)                                       # 获取数据集矩阵的大小,m为行数,n为列数
    alpha = 0.001                                                  # 目标移动的步长
    maxCycles = 500                                                # 迭代次数
    weights = ones((n, 1))                                         # 权重初始化为1
    for k in range(maxCycles):                                     # 重复矩阵运算
        h = sigmoid(dataMatrix * weights)                          # 矩阵相乘,计算sigmoid函数
        error = (labelMat - h)                                     # 计算误差
        weights = weights + alpha * dataMatrix.transpose() * error # 矩阵相乘,更新权重
    return weights

使用Logistic 回归方法进行分类并不需要做很多工作,所需做的只是把测试集上每个特征向量乘以最优化方法得来的回归系数,再将该乘积结果求和,最后输入到Sigmoid函数中即可。如果对应的Sigmoid值大于0.5就预测类别标签为1,否则为0。 

# 分类函数
def classifyVector(inX, weights):
    prob = sigmoid(sum(inX * weights))   # 计算sigmoid值
    if prob > 0.5:                       # 概率大于0.5,返回分类结果1.0
        return 1.0
    else:                                # 概率小于等于0.5,返回分类结果0.0
        return 0.0
def colicTest1():
    # 读取测试集和训练集,并对数据进行格式化处理
    frTrain = open("D:\syy\MachineLearning\data\dataTrain.txt")     # 读取训练集文件
    frTest = open('D:\syy\MachineLearning\data\dataTest.txt')           # 读取测试集文件
    trainingSet = []                              # 创建数据列表
    trainingLabels = []                           # 创建标签列表
    for line in frTrain.readlines():              # 按行读取
        currLine = line.strip().split('\t')       # 分隔
        lineArr = []
        for i in range(3):
            lineArr.append(float(currLine[i]))
        trainingSet.append(lineArr)
        trainingLabels.append(float(currLine[3]))
 
    # 使用改进的随即上升梯度训练
    trainWeights =  gradAscent(array(trainingSet), trainingLabels)
    errorCount = 0                                # 错误数
    numTestVec = 0.0
    for line in frTest.readlines():               # 遍历每行数据
        numTestVec += 1.0                         # 测试集数量加1
        currLine = line.strip().split('\t')
        lineArr = []
        for i in range(3):
            lineArr.append(float(currLine[i]))
        if int(classifyVector(array(lineArr), trainWeights)) != int(currLine[3]):
            errorCount += 1                        # 预测结果与真值不一致,错误数加1
    errorRate = (float(errorCount) / numTestVec)   # 计算错误率
    print("测试的错误率为: %f" % errorRate)
    return errorRate
# 求结果的平均值
def multiTest():
    numTests = 10
    errorSum = 0.0
    for k in range(numTests):
        errorSum += colicTest1()
    print("在 %d 迭代之后, 平均错误率为: %f" % (numTests, errorSum / float(numTests)))

运行结果如图:

logistics回归模型分析,回归,人工智能

从上述实验结果来看,使用逻辑回归进行性别分类的错误率较高文章来源地址https://www.toymoban.com/news/detail-752720.html

3.实验总结 

  • 逻辑回归的优点:直接对分类的可能性建模,无需事先假设数据分布,避免了假设分布不准确带来的问题,不仅预测出类别,还可得到近似概率预测
  • 缺点:容易欠拟合,分类精度不高,数据特征有缺失或特征空间很大时效果不好

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

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

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

相关文章

  • 机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

    1.1 Logistic回归的介绍 逻辑回归( Logistic regression ,简称 LR )是一种经典的二分类算法,它将输入特征与一个sigmoid函数进行线性组合,从而预测输出标签的概率。该算法常被用于预测离散的二元结果,例如是/否、真/假等。 优点: 实现简单。Logistic回归的参数可以用极大似然

    2024年02月08日
    浏览(42)
  • 【机器学习界的“Hello World“ 】Logistic 分类回归算法 (二元分类 & 多元分类)

    🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 该文章收录专栏 ✨— 机器学习 —✨ l o g i s t i c logistic l o g i s t i c (数理逻辑)回归算法(预测 离散值 y y y 的 非常常用的学习算法 假设有如下的八个点( y = 1 或 0 ) y=1 或 0) y

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

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

    2024年02月09日
    浏览(47)
  • Logistic回归模型

    Logistic 回归由统计学家David Cox(1958)提出,其实质是将数据拟合成到Logistic 模型中,从而预测事件发生的可能性。由于因变量是二分类的(也可以是多分类),因此可以代表指定某种事件发生与不发生的概率。 设因变量 y y y 的取值为 { 0 , 1 } {0,1} { 0 , 1 } , x 1 , x 2 , … x

    2024年02月15日
    浏览(37)
  • Logistic回归(逻辑回归)实战案例分析

    Lgistic回归也叫逻辑回归,是广义线性回归的一种,通常用于解决二分类问题。 表达式如下: 经过logit变换,则可以写成广义线性表达式 通常做回归是用其广义线性表达式,且logistic回归的结果概率表现为S型曲线,一般以小于0.5的样本都分类为0,大于0.5的样本都分类为1。

    2024年04月25日
    浏览(42)
  • 数据分析之Logistic回归分析中的【多元有序逻辑回归】

    多元有序逻辑回归用于分析有序分类因变量与一个或多个自变量之间的关系。有序逻辑回归适用于因变量具有自然排序但没有固定间距的类别,例如疾病严重程度(轻度、中度、重度)或调查问卷中的满意度评分(非常不满意、不满意、一般、满意、非常满意)。 多元有序逻

    2024年04月24日
    浏览(66)
  • 数据分析之Logistic回归分析(二元逻辑回归、多元有序逻辑回归、多元无序逻辑回归)

    在研究X对于Y的影响时: 如果Y为定量数据,那么使用多元线性回归分析; 如果Y为定类数据,那么使用Logistic回归分析。 结合实际情况,可以将Logistic回归分析分为3类: 二元Logistic回归分析 多元有序Logistic回归分析 多元无序Logistic回归分析 Logistic回归分析用于研究X对Y的影响

    2024年03月13日
    浏览(68)
  • 【R模型】R语言二元logistic回归 (保姆级教程)

    💂 个人信息 :酷在前行 👍 版权 : 博文由【酷在前行】原创、需要转载请联系博主 👀 如果博文对您有帮助,欢迎点赞、关注、收藏 + 订阅专栏 🔖 本文收录于【R模型】,该专栏主要介绍R语言各类型机器学习,如线性回归模型、广义线性模型、混合线性模型、随机森林模

    2024年02月04日
    浏览(57)
  • 二分类结局变量Logistic回归临床模型预测—— 外部数据集验证

      1. 介绍 2. 基线特征 3. 单因素多因素logistic回归分析及三线表 4. 构建临床列线图模型 5. 模型评价 6. 外部数据集验证 7. 另一种发文章的办法,分训练集和测试集,分析上述3-6节的内容 外部数据集验证,就是找一个别的数据集,可以是别家医院的,也可是数据库的,但是前提

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

    结果  

    2024年02月16日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包