Logistic回归

7.常用统计分析方法——Logistic回归 logistic回归 阅读详情

目录

一、Logistic回归和Sigmoid函数

        1.1logistic回归概念

        1.2logistic回归一般过程

        1.3sigmoid函数特点

二、初步了解优化算法

        2.1梯度上升法

        2.3训练算法:使用梯度上升找到最佳参数

        2.3随机梯度上升

        2.4改进的随机梯度上升算法

三、实例:从疝气病症预测病马的死亡率

        3.1准备数据

        3.2测试算法


一、Logistic回归和Sigmoid函数

        1.1logistic回归概念

        在介绍logistic回归之前,我们需要先大致了解一下回归的概念,假设我们现在有一些数据点,我们用一条线(直线或者曲线都行)对这些点进行拟合,将这些点的分布大致符合这条线的轨迹,这个拟合的过程就称为回归。而我们今天聊的Logistic回归的主要思想就是:根据现有的数据点,对分类边界线建立回归公式(注意是对分类边界线建立回归公式,既拟合出一条最适合分类数据点的线来)。

        1.2logistic回归一般过程

        logistic回归一般过程就是:(1)收集数据       

                                                (2)准备数据         

                                                (3)分析数据         

                                                (4)训练算法       

                                                (5)测试算法        

                                                (6)使用算法

        1.3sigmoid函数特点

        对于logistic回归,我们需要一个函数,接受所有的输入然后预测出类别。例如,在数据只有两个类别的情况下,上述函数应该要输出0或1。《机器学习实战》一书中提到过海维塞德阶跃函数,又称单位阶跃函数,如下图:

        这个函数虽然可以很醒目的将0和1分类,但是在从0到1的过程是瞬间跃迁的,这个过程很难处理,我们需要一种更平滑的曲线来过度从0到1的过程,于是,我们便选择了sigmoid函数:

\sigma (z) = \frac{1}{1+e^{-z}}

         在图像中,当x=0时,sigmoid函数值为0.5,随着x的增大,sigmoid的值逼近于1;而随着x的减小,sigmoid的值逼近于0。将坐标轴无限放大,也类似一种阶跃函数。这就实现了0和1的分类,并且0到1的过程中是平滑的。

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

 

二、初步了解优化算法

        在确定选择sigmoid函数作为分类函数之后,现在需要确定最佳回归系数的大小。

        2.1梯度上升法

        梯度上升的思想是:要找到某个函数的最大值,最好的方法是沿着该函数的梯度方向探寻,将梯度记为\bigtriangledown,则f(x,y)的梯度表示为:

\bigtriangledown f(x,y) = \begin{pmatrix} \frac{\partial f(x,y)}{\partial x}\\ \\ \frac{\partial f(x,y)}{\partial y} \end{pmatrix}

即意味着要沿x的方向移动\frac{\partial f(x,y)}{\partial x},沿y的方向移动\frac{\partial f(x,y)}{\partial y}。其中,函数f(x,y)必须要在待计算的点上有定义并且可微。

        2.3训练算法:使用梯度上升找到最佳参数

        在《机器学习实战》书中附上的资源中,下载数据集testSet:

         梯度上升算法代码:

def gradAscent(dataMatIn, classLabels):
    dataMatrix = np.mat(dataMatIn)             
    labelMat = np.mat(classLabels).transpose() 
    m, n = np.shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = np.ones((n, 1))
    for k in range(maxCycles):              
        h = sigmoid(dataMatrix*weights)     
        error = (labelMat - h)             
        weights = weights + alpha * dataMatrix.transpose()* error 
    return weights

       使用matplotlib画出分界线:

def plotBestFit(weights):
    import matplotlib.pyplot as plt
    dataMat, labelMat = loadDataSet()
    dataArr = np.array(dataMat)
    n = np.shape(dataArr)[0]
    xcord1 = []; ycord1 = []
    xcord2 = []; ycord2 = []
    for i in range(n):
        if int(labelMat[i]) == 1:
            xcord1.append(dataArr[i, 1]); ycord1.append(dataArr[i, 2])
        else:
            xcord2.append(dataArr[i, 1]); ycord2.append(dataArr[i, 2])
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
    ax.scatter(xcord2, ycord2, s=30, c='green')
    x = np.arange(-3.0, 3.0, 0.1)
    y = (-weights[0]-weights[1]*x)/weights[2]
    ax.plot(x, y)
    plt.xlabel('X1'); plt.ylabel('X2')
    plt.show()

        2.3随机梯度上升

        在上文中,梯度上升算法在每次更新回归系数时都需要遍历整个数据集,如果样本数量过多,那么该方法的计算复杂度就太高了,于是我们将其改进为随机梯度上升,即以此用一个样本点来更新回归系数。

        代码如下:

def stocGradAscent0(dataMatrix, classLabels):
    m, n = np.shape(dataMatrix)
    alpha = 0.01
    weights = np.ones(n)   
    for i in range(m):
        h = sigmoid(sum(dataMatrix[i]*weights))
        error = classLabels[i] - h
        weights = weights + alpha * error * dataMatrix[i]
    return weights

       

        可以看出,使用随机梯度上升之后的分界线反而不准确了,但是这样判断是不准确的,因为判断优化算法的优劣的可靠方法是看它是否收敛,即参数是否到达了稳定值,之后我们还会提供更加优化的方法来改进这个算法。

        2.4改进的随机梯度上升算法

def stocGradAscent1(dataMatrix, classLabels, numIter=150):
    m, n = np.shape(dataMatrix)
    weights = np.ones(n)   
    for j in range(numIter):
        dataIndex = list(range(m))
        for i in range(m):
            alpha = 4/(1.0+j+i)+0.0001   
            randIndex = int(np.random.uniform(0, len(dataIndex)))
            h = sigmoid(sum(dataMatrix[randIndex]*weights))
            error = classLabels[randIndex] - h
            weights = weights + alpha * error * dataMatrix[randIndex]
            del(dataIndex[randIndex])
    return weights

        改进的算法通过随机选取样本来更新回归系数,这种方法会减少周期性的波动,此外算法海增加了一个迭代次数作为第三个参数,默认为150,如果给定,那么算法将按照新的参数值进行迭代。

        上述是迭代了500次的结果,可以看出,最终分割线还是挺准确的

三、实例:从疝气病症预测病马的死亡率

        3.1准备数据

        《机器学习实战》书中提供的资源中,本例的数据是缺失的,所有的缺失值必须要用一个实数值来替换,因为我们使用的Numpy数据类型不允许包含缺失值。这里选择实数0来替换所有的缺失值,恰好能适用于Logistic回归。这样做的直觉是我们需要的是一个在更新时不会影响系数的值。另外,由于sigmoid(0)=5,即它对结果的预测不具有任何倾向性,因此上述做法也不会对误差造成任何影响。
        同时,如果测试集中一条数据的类别标签已经缺失,那么我们将该类别数据丢弃,因为类别标签与特征不同,很难确定采用某个合适的值来替换。

        3.2测试算法

def classifyVector(inX, weights):
    prob = sigmoid(sum(inX*weights))
    if prob > 0.5: return 1.0
    else: return 0.0

def colicTest():
    frTrain = open('D:/machinelearndata/horseColicTraining.txt'); frTest = open('D:/machinelearndata/horseColicTest.txt')
    trainingSet = []; trainingLabels = []
    for line in frTrain.readlines():
        currLine = line.strip().split('\t')
        lineArr = []
        for i in range(21):
            lineArr.append(float(currLine[i]))
        trainingSet.append(lineArr)
        trainingLabels.append(float(currLine[21]))
    trainWeights = stocGradAscent1(np.array(trainingSet), trainingLabels, 1000)
    errorCount = 0; numTestVec = 0.0
    for line in frTest.readlines():
        numTestVec += 1.0
        currLine = line.strip().split('\t')
        lineArr = []
        for i in range(21):
            lineArr.append(float(currLine[i]))
        if int(classifyVector(np.array(lineArr), trainWeights)) != int(currLine[21]):
            errorCount += 1
    errorRate = (float(errorCount)/numTestVec)
    print("the error rate of this test is: %f" % errorRate)
    return errorRate

def multiTest():
    numTests = 10; errorSum = 0.0
    for k in range(numTests):
        errorSum += colicTest()
    print("after %d iterations the average error rate is: %f" % (numTests, errorSum/float(numTests)))

        最后结果如上,10次迭代之后的平均错误率为35%,看上去错误率并不是很低,但是由于本身数据就是缺失的,对错误率还是有一定影响。

实验总结:

        logistic优点:计算代价不高,易于理解和实现。

        logistic缺点:容易欠拟合,分类精度可能不高

        使用数据类型:数值型和标称型数据

 

机器学习——Logistic回归 一:Logistic回归简介 Logistic回归是统计学习中的经典分类方法,属于对数线性模型,所以也被称为对数几率回归。该模型是一种分类算法,Logistic回归是一种线性分类器,针对的是线性可分问题。我们要了解Logistic回归进行分类的主要思想是:根据现有的数据对分类边界线建立回归方程,然后以此进行分类。这里回归一词源于最佳拟合参数,表示要找到最佳拟合参数集。 Logistic回归的优点在于计算代价不高,易于理解和实现。缺点是容易发生欠拟合现象,分类的精度不高。适... 阅读详情

相关推荐

第13章Stata Logistic回归分析

前面我们讲述得回归分析方法都要求因变量是连续变量,但很多情况下因变量是离散得而非连续得。例如,公司招聘人才时根据对应聘人员得特征做出录用或者不录用得评价、毕业学生对职业得选择等。这时就需要用到Logistic回归分析。根据因变量得离散特征:常用得Logistic回归分析方法有3终,包括二元Logistic回归分析、多元Logistic回归分析以及有序Logistic回归分析等。 13.1二元Logistic回归分析 我们经常会遇到因变量只有两种取值的情况,例如是否患病、是...

qq_45112156的博客 4万+

逻辑回归(Logistic Regression)详解

逻辑回归也称作logistic回归分析,是一种广义的线性回归分析模型,属于机器学习中的监督学习。其推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题(也可以解决多分类问题)。通过给定的n组数据(训练集)来训练模型,并在训练结束后对给定的一组或多组数据(测试集)进行分类。其中每一组数据都是由p 个指标构成。 (1)逻辑回归所处理的数据 逻辑回归是用来进行分类的。例如,我们给出一个人的 [身高,体重] 这两个指标,然后判断这个人是属于”胖“还是”瘦“这一类。对于这个问题,我们可以先测量n个

weixin_60737527的博客 29万+

logistic回归_stata速学|logistic回归分析

NO.07ZEYI06.2020正文共:2010字 28图预计阅读时间:6分钟嘿喽,我是则已。这是stata的第七期学习。前面学习了最小二乘回归分析,非线性回归分析都要求因变量是连续变量,但很多时候因变量是离散的,即1就是1,2就是2,没有1-2之间的取值。这时候需要用到logistic回归分析。划线部分是自己要研究的变量。logistic回归 分析常用来进行logistic回归分析...

weixin_39764603的博客 2万+

逻辑回归(Logistic Regression)

逻辑回归是线性分类器(线性模型)—— 主要用于二分类问题【拓:如何判别一个模型是否为线性模型理论上分辨:线性模型是可以用曲线来拟合样本的,但是分类的决策边界一定是直线的数学表达上分辨:表达式中的系数w乘上自变量x(一个w系数影响一个自变量维度x)】(1)penalty:表示惩罚项(正则化类型)。字符串类型,取值为’l1’ 或者 ‘l2’,默认为’l2’。l1:向量中各元素绝对值的和,作用是产生少量的特征,而其他特征都是0,常用于特征选择;

tt丫的博客 9万+

logistic回归简介

logistic回归 一、名词解释: logistic回归又称罗杰斯蒂克回归分析,或逻辑回归分析。 Logistic回归为概率型非线性回归模型,是研究分类观察结果y与一些影响因素x(单变量,多变量都可以)之间关系的一种多变量的分析方法 。   二、与线性回归的关系 logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为

whiteinblue的专栏 1万+

logistic回归_条件logistic回归分析

Logistic回归应该说是我们日常生活中应用最多的分析方法啦,只要是多因素分析方法,很多情况都会使用logistic回归,logistic回归分为条件logistic和非条件logistic,我们日常生活中应用较多的应该是非条件logistic回归分析,而对于条件logistic回归应用较少,小编也很少遇到条件logistic回归分析,要不是前一阵子一个小伙伴咨询我,我对条件logis...

weixin_39536427的博客 1万+

多元有序logistic回归_SPSS有话说:二元logistic回归

导 语线性回归的因变量Y必须为连续变量,但当我们研究的因变量为分类变量时,因为不再是随机变量,不符合正态分布,因此不能采用线性回归,此时应该使用Logistic回归。SPSS有话说概述Logistic回归分析也用于研究变量之间的影响关系,即X对Y的影响情况,此处涉及的Y是分类数据。结合Y的具体情况,Logistic回归分析可以分为三种,分别是二元Logistic回归、多元无序Logi...

weixin_27028301的博客 7114

二元Logistic回归分析

被调查者的性别(女:0,男:1)、年龄(岁)、鼻咽癌家族史(否:0,是:1)、慢性鼻炎史(否:0,是:1)、职业接触有害物质(否:0,是:1)、吸烟(否:0,是:1)、饮茶(否:0,是:1)、长期锻炼(否:0,是:1)、生活工作压力(否:0,是:1)、鼻咽癌是否发生(否:0,是:1)。肿瘤家族史(无:0,是:1),前面设置协变量的参考类别为“第一个”,即“0”,方程中给出的exp(B)也是相对于“0”。(五)单击“选项”,勾选“Hosmer-Lemeshow拟合度”和“exp”(OR值),继续。

m0_72494332的博客 3955

【R语言】logistic回归(二)多因素logistic回归

logistic回归分析是医学统计分析过程中常用的一种影响因素分析的方法,最常用的是二元logistic回归分析,即以二分类数据为因变量的logistic回归分析。上次已经和大家分享了批量进行logistic回归分析的代码,接下来将分享多因素logistic回归分析的代码。多因素logistic回归分析一般的分析思路其实就是把单因素分析过程中发现的有意义的变量同时纳入logistic回归模型,除了纳入有意义的变量之外,还可以通过强制纳入其他变量构建不同的模型。...

qq_42696043的博客 3万+

QT触摸屏开发:如何通过重写事件处理实现精准按键长按检测

本文针对QT触摸屏开发中按键长按检测不精准的常见问题,深入剖析了传统信号机制失效的原因,并提供了通过重写事件处理函数(event)的解决方案。文章详细介绍了创建自定义TouchButton类、直接处理QTouchEvent以实现可靠长按检测的完整步骤与代码示例,并分享了进阶优化与避坑指南,帮助开发者实现跨平台一致的精准交互。

weixin_29207149的博客 95

EPLAN二次开发实战:从API接口到定制化功能的完整指南

本文为电气工程师和自动化设计师提供了一份EPLAN二次开发的完整实战指南。文章详细介绍了从脚本、插件到独立程序三种开发模式,重点讲解了如何使用C#或VB.NET通过API接口操作EPLAN数据模型,实现定制化功能以提升设计效率,并分享了开发环境搭建、调试及项目打包分发的避坑经验。

c6d7e8f9g的博客 1120

logistic回归_二元logistic回归分析

SPSS学习乐园点击上方 蓝色 字体可关注logistic回归前面介绍过多重线性回归分析,该分析方法是研究一个因变量(服从正态分布)与多个自变量的数量关系,多重线性回归分析。 在医学研究中,常常需要研究的结局变量不是连续型变量,而是二分类变量或多分类变量,logistic回归分析就能解决这问题。依据因变量的分类情况,可分为二分类logistic回归和多分类logis...

weixin_39806808的博客 2万+

clang-tidy 使用指南

clang-tidy 需要一个编译数据库来了解如何编译你的代码。编译数据库通常是一个名为 compile_commands.json 的文件。在这个示例中,clang-tidy 会对 test.cpp 文件进行分析,并报告任何潜在的问题。例如,它可能会警告 test 函数中的未使用变量 x。clang-tidy 是一个用于 C++ 代码的静态分析工具,可以帮助你发现代码中的潜在问题和改进点。这将在 build 目录中生成一个 compile_commands.json 文件。

weixin_42244181的博客 2362

多元有序logistic回归_如何利用SPSS进行Logistic回归分析

点击蓝字SPSS关注我今天的这篇方法与经验贴同样是以下文章的作者所写,他擅长SPSS和SAS的各种数据分析操作:风月浊酒,公众号:全哥的学习生涯如何利用SPSS实现多元线性回归(哑变量设置与分析)以下是原文:今天给大家介绍一下logistic回归的SPSS操作。Logistic回归可以得出OR值,在流行病学研究中应用较为广泛,可以用于横断面研究,病例对照研究等。Logistic回归是一种...

weixin_30458447的博客 2万+

DS18B20温度传感器项目实战:从驱动编写到LCD显示,打造你的第一个温控系统

本文详细介绍了如何使用DS18B20温度传感器和LCD1602显示屏构建一个完整的温控系统。从硬件连接、OneWire协议实现到温度数据采集与LCD显示,全面解析了系统整合与工程化实现的关键步骤,帮助开发者快速掌握嵌入式温度监测系统的开发技巧。

weixin_42525328的博客 349

小白 虚拟机 kali_Linux安装 详细教程

安装版本:VMmare workstation pro kali_Linux 安装环境:Window10 首先我们先了解一下什么是kali_linux: Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行

m0_50917178的博客 9万+

一文掌握有序logistic回归分析

Logistic回归分析(logit回归)一般可分为3类,分别是二元logistic回归分析、多分类Logistic回归分析和有序Logistic回归分析。logistic回归分析类型如下所示。 Logistic回归分析用于研究X对Y的影响,并且对X的数据类型没有要求,X可以为定类数据,也可以为定量数据,但要求Y必须为定类数据,并且根据Y的选项数,使用相应的数据分析方法。 如果Y有两个选项,如愿意和不愿意、是和否,那么应该使用有序logistic回归分析(SPSSAU进阶方法->二..

m0_37228052的博客 2万+

生成式AI;语义通信技术;生成式AI辅助的云边协同算法及其可解释性

生成式AI 语义通信技术 生成式AI辅助的云边协同算法及其可解释性 一、端到端设计的物理层内生智能 二、生成式语义通信 三、生成式数字孪生网络 四、生成式AI辅助的云边协同算法及其可解释性 五、未来可能的研究方向

ZhangJiqun&191cm&85kg 428

SAS Logistic回归:一个完整例子

 SAS Logistic回归:代码及输出报告详解这篇将作为五一后一个讲稿的阅读材料之一,先整出来就搁这。如果没有耐心读下去,你可以立即转到以下的参考资料,该篇所有的知识都来自它们:Cody, R.F. and Smith, J.K. Applied Statistics and the SAS ProgrammingLanguage,4th ed..NJ: Prent

winsonic的专栏 2万+

日常工作记录---在虚拟机中进行slam建图

   今天是10月24号,首先祝各位程序员们节日快乐!!!    最近一周由于实习的原因,对ROS的探索学习,停滞了一段时间,所以今天也就没什么大的进展,本篇文章仅仅记录一下,我在虚拟机中进行slam建图可行性验证的过程,本篇文章同样使用古月学院《如何在Gazebo中实现阿克曼转向车的仿真》的课程资料来进行验证    下面各条之间并没有严格的顺序关系,每一条都是独立的,都是我在验证过程中的经验或者记录:    1、在运行roslaunch bringup racecar_gazebo_rviz.lau

慕羽★的博客 4828

如何在 SAPGUI 里显示上传到 ABAP 服务器的 PDF 文件

在 SAPGUI 里显示 PDF 文件是实际项目中一个很有用的需求。因为在 SAP 实际业务场景中,有大量的流程会生成 PDF 格式的数据。把这种类型的数据输出显示在 SAPGUI 里,方便最终用户查看。本教程后续步骤,还会向大家介绍如何使用 ABAP 代码生成 PDF 格式的数据。本步骤只是简单的将本地 PDF 文件,上传到 ABAP 系统并显示在 SAPGUI 里。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2687

logistic回归_R语言实现logistic回归

引言:前面我们已经掌握了logistic回归的知识点,今天就来看看如何用R语言实现logistic回归。今天用到的数据来源于机器学习仓库,基于患者的一些信息以判定该患者是否患有心脏病(heart disease, hd),链接如下:http://archive.ics.uci.edu/ml/datasets/Heart+Disease1. 数据读取###1读取UCI机器学习中的数据u...

weixin_39721953的博客 9607

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

多元有序logistic回归_有序多分类logistic回归

一、模型简介有序多分类logistic回归用于因变量为有序多分类的情况,如患者对药物的反应y共有三种情况:疗效差、一般和好。定义y=1(疗效差)、y=2(疗效一般)、y=3(疗效好)。对于有序多分类logistic回归,模型将因变量的多个分类依次分割为多个二元logistic回归。如3种不同疗效的患者,分析时拆分为2个二元logistic回归,分别为 (1vs 2 3) 、(1 2 vs...

weixin_36173034的博客 3万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

logistic回归 简介_有序多分类logistic回归

一、模型简介有序多分类logistic回归用于因变量为有序多分类的情况,如患者对药物的反应y共有三种情况:疗效差、一般和好。定义y=1(疗效差)、y=2(疗效一般)、y=3(疗效好)。对于有序多分类logistic回归,模型将因变量的多个分类依次分割为多个二元logistic回归。如3种不同疗效的患者,分析时拆分为2个二元logistic回归,分别为 (1vs 2 3) 、(1 2 vs...

weixin_39774556的博客 7500

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 垃圾邮件分类-朴素贝叶斯算法
只会print就要多学
博客等级 码龄5年 9粉丝 8原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值