logistic回归

author author     2022-09-18     743

关键词:

利用Logistic回归进行分类的思想就是:根据现有数据对分类边界线建立回归公式,以此进行分类。该算法最重要的就是要找到最佳拟合参数集。

本文介绍二值型输出分类器的数学原理。

针对这类问题:接收输入,输出为两个类别,这里假设为0和1,具有这样性质,且数学上容易处理的函数,有Sigmoid函数(S形函数)。

首先加载数据集:

def loadDataSet():
    dataMat = []
    labelMat = []
    fr = open(‘/Users/Desktop/testSet.txt‘)
    for line in fr.readlines():
        lineArr = line.strip().split()
        dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])  # 1.0 为常数项
        labelMat.append(int(lineArr[2]))
    return dataMat,labelMat

 S形函数,输入为inX,输出为计算后的值,属于区间(0,1)

def sigmoid(inX):
    return 1.0 / (1 + np.exp(-inX))

 梯度下降(批处理)用python代码实现

def gradAscent(dataMatIn, classLabels):
    dataMatrix = np.mat(dataMatIn)   # 转化为Numpy矩阵,方便计算
    labelMatix = np.mat(classLabels).transpose()
    m,n = np.shape(dataMatrix)  # mxn
    alpha = 0.001   # 设置步长
    maxCycles = 500  # 迭代次数
    weights = np.ones((n,1))  # 参数初始化为1(列向量 n)
    for k in range(maxCycles):
        h = sigmoid(dataMatrix * weights)  # mx1
        error = (labelMatix - h) # mx1
        weights = weights + alpha * dataMatrix.transpose() * error
    return  weights

 下面用python的matplotlib画出决策边界,确定不同类别数据之间的分隔线:

def plotBestFit(weights):
    dataMat, labelMat = loadDataSet()
    dataArr = np.array(dataMat)
    n = np.shape(dataArr)[0]  # 数据集中数据的数量
    xcord1 = []; ycord1 = []
    xcord0 = []; ycord0 = []
    for i in range(n):
        if int(labelMat[i]) == 1:
            xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2])
        else:
            xcord0.append(dataArr[i,1]); ycord0.append(dataArr[i,2])
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(xcord1,ycord1,s = 30,c = ‘red‘, marker=‘s‘)
    ax.scatter(xcord0,ycord0,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()

 输出的图片如下:

技术分享

 从上图可以看出分类的效果相当不错,但每次更新回归系数时都需要遍历整个数据集,当数据集相当庞大的时候计算量将不可想象。改进的方法是一次仅用一个样本点来更新回归系数,这种方法称为随机梯度上升算法,代码如下:

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

 技术分享

可以看出拟合的效果明显没有之前那么好,进而对随机梯度上升算法进一步做了如下优化:

# 改进的随机梯度上升算法
def stocGradAscent1(dataMatrix, classLabels, numIter = 150):  # numIter为指定的迭代次数(针对整个数据集而言)
    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 + i + j) + 0.01  # 每次迭代调整alpha
            randIndex = int(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

 主要做了两处调整:

1> 每次迭代都会对步长alpha进行调整,虽然alpha会随着迭代次数增加不断变小,但永远不会减小到0,因为有一个常数项0.01,这是为了保证在多次迭代后新数据仍然具有一定的影响。

2> 为了减少周期性波动,随机选取样本来更新回归系数。 下面是改进后输出的图片,从图中可以看出分隔线达到了与批处理梯度下降差不多的效果,但所使用的计算量更少。

技术分享

 

logistic回归

Logistic回归是目前最常用的一种分类算法。之前讨论了线性回归 http://www.cnblogs.com/futurehau/p/6105011.html,采用线性回归是不能解决或者说不能很好解决分类问题的,很直观的一个解释如下图所示,这里介绍Logistic回归。一、Logist... 查看详情

机器学习之logistic回归(逻辑回归)(代码片段)

目录Logistic回归博客园地址:https://www.cnblogs.com/chenyoude/git地址:https://github.com/nickcyd/machine_learning微信:a1171958281Logistic回归本章内容回归算法Logistic回归的一般过程Logistic的优缺点基于Logistic回归和Sigmoid函数的分类Sigmoid函数Logistic... 查看详情

[机器学习实战-logistic回归]使用logistic回归预测各种实例(代码片段)

[机器学习实战-Logistic回归]使用Logistic回归预测各种实例目录[机器学习实战-Logistic回归]使用Logistic回归预测各种实例本实验代码已经传到gitee上,请点击查收!一、实验目的二、实验内容与设计思想实验内容设计思想三、实验使... 查看详情

tensorflow训练logistic回归

Logistic回归在用线性模型进行回归训练时,有时需要根据这个线性模型进行分类,则要找到一个单调可微的用于分类的函数将线性回归模型的预测值关联起来。这时就要用到逻辑回归,之前看吴军博士的《数学之美》中说腾讯和... 查看详情

对线性回归,logistic回归的认识

...http://www.cnblogs.com/jerrylead/archive/2011/03/05/1971867.html1分类和logistic回归    一般来说,回归不用在分类问题上,因为回归是连续型模型,而且受噪声影响比较大。如果非要使用回归算法,可以使用logistic回归。  ... 查看详情

logistic回归与手写识别例子的实现

本文主要介绍logistic回归相关知识点和一个手写识别的例子实现一、logistic回归介绍:logistic回归算法很简单,这里简单介绍一下:1、和线性回归做一个简单的对比下图就是一个简单的线性回归实例,简单一点就是一个线性方程... 查看详情

r构建logistic回归实战(logisticregression)

R构建Logistic回归实战(LogisticRegression)目录R构建Logistic回归实战(LogisticRegression)逻辑回归(LogisticRegression)加载数据 查看详情

逻辑回归(logistic回归)

...之处,还请多多包涵~  逻辑回归一、为什么使用logistic回归  一般来说,回归不用在分类问题上,因为回归是连续型模型,而且受噪声影响比较大。     Why? 为什么回归一般不用在分类上? 查看详情

机器学习实战第5章logistic回归

第5章Logistic回归Logistic回归概述Logistic回归虽然名字叫回归,但是它是用来做分类的。其主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。须知概念Sigmoid函数回归概念假设现在有一些数据点,我们用一条直线... 查看详情

logistic回归模型的参数呈现线性关系

是的,他是一种广义的线性回归分析模型当logistic回归模型能够较好地拟合数据时,我们便可以对模型的系数进行解释了,类似于线性回归系数。Logistic回归系数也可以被解释为对应自变量一个单位的变化所导致的因变量上的变... 查看详情

softmax回归(与logistic回归的联系与区别)

SoftMax回归(与Logistic回归的联系与区别)SoftMax试图解决的问题SoftMax回归模型是Logistic回归模型在多分类问题上的推广,即在多分类问题中,类标签y可以取两个以上的值对于Logistic回归的假设函数(h_ heta(x)=frac11+exp(-x)),它的输出结果将被... 查看详情

5.logistic回归

一、介绍    Logistic回归是广泛应用的机器学习算法,虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)。面对一个回归或者分类问题,建立代价... 查看详情

logistic回归

Logistic回归一般过程:  1)收集数据  2)准备数据:数据类型为数值型(需要进行距离计算),最好为结构化数据格式  3)分析数据  4)训练算法:目的是为了找出最佳的分类回归系数  5)测试算法:训练结束后... 查看详情

spss中,进行logistics回归分析

   logistic回归为概率型非线性回归模型,是研究分类观察结果(y)与一些影响因素(x)之间关系的一种多变量分析方法。一、准备数据,因变量为二分类数据,自变量为定比数据;分析-回归-二元logistic回归;二、输出结果... 查看详情

ng机器学习视频笔记——logistic回归

ng机器学习视频笔记(四)——logistic回归 (转载请附上本文链接——linhxx) 一、概述1、基本概念        logistic回归(logisticregression),是一个分类(classification)算法(注意不是回归算法,... 查看详情

machinelearning之logistic回归

...称为最佳拟合直线),这个拟合过程就称为回归; 利用Logistic回归进行分类的主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类。这里的“回归”一词源于最佳拟合,表示要找到最佳拟合参数集,其背后... 查看详情

机器学习实战笔记logistic回归

参考链接http://blog.csdn.net/lu597203933/article/details/38468303Logistic代码#Logistic回归分类使用梯度上升找最佳参数importnumpyasnpdefloadDataSet():datMat=[];labelMat=[]fr=open(‘testSet.txt‘)forlineinfr.readlines():lineAr 查看详情

r语言等级多分类logistic回归模型实战

R语言等级多分类Logistic回归模型实战目录R语言有序多分类Logistic回归模型实战#导入包#数据加载 查看详情