目录

1. 基本概念

2. 数学原理

3.  代码实现

3.1 代码分析

3.2 数据集分类实现

4. 总结


1. 基本概念

Logistic回归也是一种分类方法,用于两分类问题。其基本思想为:(1)寻找合适的假设函数,即分类函数,用以预测输入数据的判断结果;(2)构造代价函数,即损失函数,用以表示预测的输出结果与训练数据的实际类别之间的偏差;(3)最小化代价函数,从而获取最优的模型参数。

Logistics回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法来完成。在最优化算法中,最常用的就是梯度上升算法,而梯度上升算法又可以简化为随机梯度上升算法。

随机梯度上升算法与梯度上升算法的效果相当,但占用更少的计算资源。此外,随机梯度上升是一个在线算法,它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批处理运算。

2. 数学原理

基本的线性回归函数的形式为:

线性回归模型产生的预测值是一系列实值。为了使输出的预测结果变为分类所需的0和1,我们最理想的函数是单位跃迁函数,图像如下:

这个函数的缺点也很明显:不连续。所以我们使用逻辑斯蒂函数(logistic/sigmoid function)来代替这个函数:

他的优点则是单调可微,任意阶可导。

我们可以使用极大似然法求解0和1概率。

但是使用这个方法我们求解出的w和b仍然无法得到我们想要的最小概率。在这里我们可以使用梯度下降法/牛顿法来进一步求解,得到我们所需的最小值,然后实现分类。

根据这个方法,我们即可实现使用逻辑斯蒂回归对数据进行分类。

3.  代码实现

3.1 代码分析

下面这段代码是梯度上升算法的具体实现。loadDataSet()的主要功能是打开文本文件testSet.txt并逐行读取。每行前两个值分别为X1和X2,第三个值是数据对应的类别标签。此外,为了方便计算,该函数还将X0的值设置为1.0。接下来是sigmoid()函数。梯度上升算法的实际工作是在函数gradAscent()里完成的。该函数有两个参数。第一个参数是dataMathIn,这是一个二维NumPy数组,每列分别代表了每个不同的特征,每行则代表每个训练样本。第二个参数是类别标签,它是一个1×100的2行向量。

def loadDataSet():dataMat = []; labelMat = []fr = open('C:/Users/Kano/Desktop/Study/vscode python/Test3/testSet.txt')for line in fr.readlines():lineArr = line.strip().split()dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])labelMat.append(int(lineArr[2]))return dataMat,labelMatdef sigmoid(inX):return 1.0/(1+exp(-inX))def stocGradAscent1(dataMatrix, classLabels, numIter=150):m,n = shape(dataMatrix)weights = ones(n)   #initialize to all onesfor j in range(numIter):dataIndex = list(range(m))for i in range(m):alpha = 4/(1.0+j+i)+0.0001    #apha decreases with iteration, does not randIndex = int(random.uniform(0,len(dataIndex)))#go to 0 because of the constanth = sigmoid(sum(dataMatrix[randIndex]*weights))error = classLabels[randIndex] - hweights = weights + alpha * error * dataMatrix[randIndex]del(dataIndex[randIndex])return weights

下面这一段第一个函数为classifyVector(),它以回归系数和特征向量作为输入来计算对应的Sigmoid值。如果Sigmoid值大于0.5函数返回1,否则返回0。接下来是函数colicTest()。用于打开测试集和训练集,并对数据进行格式化处理的函数。嘎斯函数首先导入训练集,数据的最后一列为类别标签。数据导入之后,使用函数stocGradAscent1()来计算回归系数向量。最后一个函数为multiTest(),其功能是调用函数colicTest()10次并求结果的平均值。

def classifyVector(inX, weights):prob = sigmoid(sum(inX*weights))if prob > 0.5: return 1.0else: return 0.0def colicTest():frTrain = open('C:/Users/Kano/Desktop/Study/vscode python/Test3/divorceTraining.txt'); frTest = open('C:/Users/Kano/Desktop/Study/vscode python/Test3/divorceTest.txt')trainingSet = []; trainingLabels = []for line in frTrain.readlines():currLine = line.strip().split(';')lineArr =[]for i in range(54):lineArr.append(float(currLine[i]))trainingSet.append(lineArr)trainingLabels.append(float(currLine[54]))trainWeights = stocGradAscent1(array(trainingSet), trainingLabels, 1000)errorCount = 0; numTestVec = 0.0for line in frTest.readlines():numTestVec += 1.0currLine = line.strip().split(';')lineArr =[]for i in range(54):lineArr.append(float(currLine[i]))if int(classifyVector(array(lineArr), trainWeights))!= int(currLine[54]):errorCount += 1errorRate = (float(errorCount)/numTestVec)print ("the error rate of this test is: %f" % errorRate)return errorRatedef multiTest():numTests = 10; errorSum=0.0for k in range(numTests):errorSum += colicTest()print ("after %d iterations the average error rate is: %f" % (numTests, errorSum/float(numTests)))

3.2 数据集分类实现

我们使用了一个很有趣的数据集,离婚数据。他有54个属性,分别是对于伴侣的行为情况进行打分,最后根据这些分类结果给出是否离婚的情况。下面我们大概看一下这些属性信息。

1. 如果我们中的一个人在讨论恶化时道歉,讨论就结束了。
2. 我知道我们可以忽略我们的分歧, 即使事情有时变得艰难。
3. 当我们需要它时,我们可以从一开始就与我的配偶进行讨论并纠正它。
4. 当我与我的配偶讨论时,联系他最终会起作用。
5. 我和妻子在一起的时间对我们来说很特别。

...

下面是部分数据集的截图:

之后我们在命令提示符下测试这个分类情况,得到了还不错的效果:

4. 总结

通过这次实验了解了如何使用逻辑斯蒂回归对数据集进行训练和分类。也知道了逻辑斯蒂回归的数学原理:它在线性回归的基础上,在特征到结果的映射中加入了一层Sigmoid函数(非线性)映射,即先把特征线性求和,然后使用Sigmoid函数来预测。而Sigmoid函数用于机器学习分类的效果很好。最后带入数据集之后效果还不错,原因应该为:(1)数据集的属性特征值为0~4的数据,比较简单且易于分类,当我使用差异较大或者小数较多的数据集时效果并没有这个好;(2)属性较多,且结果仅有离婚与不离婚两种,更适合Sigmoid函数。相信在之后的学习中会有更多方法来适应不同类的数据集,给出更好的分类效果。

机器学习Python学习——逻辑斯蒂回归(Logistic Regression)相关推荐

  1. Lecture6 逻辑斯蒂回归(Logistic Regression)

    目录 1 常用数据集 1.1 MNIST数据集 1.2 CIFAR-10数据集 2 课堂内容 2.1 回归任务和分类任务的区别 2.2 为什么使用逻辑斯蒂回归 2.3 什么是逻辑斯蒂回归 2.4 Si ...

  2. PyTorch深度学习实践(b站刘二大人)P6讲 逻辑斯蒂回归 Logistic Regression

    1.分类任务的数据集 ① The MNIST Dataset:handwritten digits Training set: 60,000 examples, Test set: 10,000 ex ...

  3. 机器学习笔记——逻辑斯蒂回归(Logistic)

    1.线性回归 1.1线性回归概念   如果特征值之间存在线性关系就可以使用线性回归建模对其预测结果. 1.2最小二乘法求解   何为最小二乘法,我们有很多的给定点,这时候我们需要找出一条线去拟合它,那 ...

  4. 逻辑斯蒂回归(Logistics Regression)

    Author: 吕雪杰,xiaoran; Datawhale Logistics Regression简介 逻辑回归是在数据服从伯努利分布的假设下,通过极大似然的方法,运用梯度下降法来求解参数,从而达 ...

  5. 逻辑斯蒂回归(logisic regression)和SVM的异同

    逻辑斯蒂回归主要用于二分类,推广到多分类的话是类似于softmax分类.求 上述问题可以通过最大化似然函数求解. 上述问题可以采用最小化logloss进行求解. 一般地,我们还需要给目标函数加上正则项 ...

  6. 机器学习复习之逻辑斯蒂回归以及决策树

    1. 逻辑回归 要点:逻辑回归是分类模型还是回归模型,逻辑回归的概率分布如何表示,逻辑回归的模型是什么样的,逻辑回归如何进行参数估计,与线性回归的区别. 1.1 逻辑回归模型 逻辑回归模型是一类分类模 ...

  7. 逻辑斯蒂回归java_机器学习 (五)逻辑斯蒂回归

    一.概念 逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型.logistic回归的因变量可以是二分类的,也可以是多分类的.logistic回归的因变量 ...

  8. Logistic Regression 逻辑斯蒂回归

    文章目录 5.Logistic Regression 逻辑斯蒂回归 5.1 回归任务 5.1.1 MNIST Dataset 5.1.2 CIFAR-10 Dataset 5.2 Regression ...

  9. python做逻辑斯蒂二分类_Python实现逻辑斯蒂回归

    Python实现逻辑斯蒂回归 本实验室根据两次考试成绩与是否通过的数据,通过logistic回归,最后获得一个分类器. 逻辑斯蒂回归 导入数据 import numpy as np def loadd ...

最新文章

  1. 机器学习的优化目标、期望最大化(Expectation-Maximum, EM)算法、期望最大化(EM)和梯度下降对比
  2. vue 目录名称详解_使用脚手架创建vue项目目录详解
  3. 光电转换模块_光纤模块和光纤收发器连接时要注意什么?
  4. div+css+theme
  5. Vue2.0 入门 安装Vue-cli
  6. 如何黑掉一台根本不联网的电脑
  7. HDU 3068 最长回文
  8. 猎豹浏览器怎么设置允许弹出窗口 允许弹窗设置方法详解
  9. 作者:唐华(1973-),男,华南师范大学软件学院院长助理、副教授。
  10. Thread函数的参数传递和线程所有权转移(2.2)--std::move()
  11. 现代通信原理思维导图--第四章 信道
  12. python之父北京尚学堂怎么样_尚学堂百战程序员:Python的元类
  13. HTML5期末大作业:在线电影app网页设计——电影票务购票系统WebApp手机模板(12页) HTML+CSS+JavaScript 计算机毕设网页设计源码
  14. Android OrangePi 4G IOT(五) - MTK电源管理驱动(一)
  15. 如何制作win7 U盘安装盘
  16. Nouveau源码分析(三):NVIDIA设备初始化之nouveau_drm_probe
  17. 星巴克——starbuck
  18. 再论关于如何学习网络编程
  19. 契约锁android代码,契约锁怎么签合同
  20. 小提琴和钢琴一起学行吗_选学钢琴、小提琴的5大误区,家长一定要知道!

热门文章

  1. 计算机视觉(十六):目标检测概述
  2. 1367:查找二叉树(tree_a)
  3. python怎么把一个文件夹内的文件复制到另外一个文件夹(进阶重命名复制)
  4. EndNote使用指南
  5. 正则表达式匹配行首和行尾
  6. Deep Biaffine Attention for Dependency Parsing
  7. 网络对抗 Exp7 网络欺诈防范 20154311 王卓然
  8. tar 慢 加快_加快慢的Outlook 2007
  9. Oracle入门到精通最详细带例子(新手必看)
  10. fpu测试_解毒盖世G600散热器,3900X超频测试能不能压住?