利用logistic回归进行分类的主要思想:根据现有数据对分类边界建立回归公式,并以此进行分类。

logistic优缺点:

优点:计算代价不高,易于理解和实现。
缺点:容易欠拟合,分类精度可能不高。 .
适用数据类型:数值型和标称型数据。

sigmoid函数:

梯度上升法:

梯度:

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

随机梯度上升法:

梯度上升算法在每次更新回归系数时都需要遍历整个数据集, 该方法在处理100个左右的数
据集时尚可,但如果有数十亿样本和成千上万的特征,那么该方法的计算复杂度就太高了。一种
改进方法是一次仅用一个样本点来更新回归系数,该方法称为随机梯度上升算法。由于可以在新
样本到来时对分类器进行增量式更新,因而随机梯度上升算法是一个在线学习算法。与 “ 在线学
习”相对应,一次处理所有数据被称作是“批处理” 。

梯度下降法:

你最经常听到的应该是梯度下降算法,它与这里的梯度上升算法是一样的,只是公式中的
加法需要变成减法。因此,对应的公式可以写成:

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

logistic预测疝气病预测病马的死亡率代码:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import random# 加载数据集
def loadDataSet():dataMat = []labelMat = []fr = open('./testSet.txt')for line in fr.readlines():lineData = line.strip().split()dataMat.append([1.0, float(lineData[0]), float(lineData[1])])labelMat.append(int(lineData[2]))return dataMat, labelMat# sigmoid 函数
def sigmoid(inX):return 1.0 / (1 + np.exp(-inX))# 梯度上升
def gradAscent(dataMatIn, classLabels, maxCycles):dataMatrix = np.mat(dataMatIn)labelsMatrix = np.mat(classLabels).transpose() # 转置,将行向量转置为列向量m, n = np.shape(dataMatrix)alpha = 0.001W = np.ones((n, 1))for i in range(maxCycles):h = sigmoid(dataMatrix * W) # (100, 1)error = labelsMatrix - h # (100, 1)W = W + alpha * dataMatrix.transpose() * error # (3, 100) * (100, 1)return W #改进版随机梯度上升
def stocGradAscent1(dataMatrixIn, classLabels, numIter=150):dataMatrix = np.array(dataMatrixIn)m,n = np.shape(dataMatrix)weights = np.ones(n)   #initialize to all onesfor j in range(numIter):dataIndex = list(range(m))for i in range(m):alpha = 4.0/(1.0+j+i)+0.01    #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 np.mat(weights.reshape(n, 1))def plotBestFit(weights, dataMat, labelMat):dataArr = np.array(dataMat)n = np.shape(dataArr)[0]xcord1 = []; ycord1 = []xcord2 = []; ycord2 = []for i in range(n):if 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(-4.0, 4.0, 0.1)y = ((np.array((-weights[0] - weights[1] * x) / weights[2]))[0]).transpose()ax.plot(x, y)plt.xlabel('X1')plt.ylabel('X2')plt.show()# 预测
def classifyVector(inX, weights):prob = sigmoid(sum(inX * weights))if prob > 0.5:return 1.0else:return 0.0# 对训练集进行训练,并且对测试集进行测试
def colicTest():trainFile = open('horseColicTraining.txt')testFile = open('horseColicTest.txt')trainingSet = []; trainingLabels = []for line in trainFile.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]))# 开始训练weights = stocGradAscent1(trainingSet, trainingLabels, 400)errorCount = 0.0numTestVec = 0.0for line in testFile.readlines():numTestVec += 1.0currLine = line.strip().split('\t')lineArr = []for i in range(21):lineArr.append(float(currLine[i]))if int(classifyVector(np.array(lineArr), weights)) != int(currLine[21]):errorCount += 1.0errorRate = errorCount / float(numTestVec)print("the error rate is:%f" % errorRate)return errorRate# 多次测试求平均值
def multiTest():testTimes = 10errorRateSum = 0.0for i in range(testTimes):errorRateSum += colicTest()print("the average error rate is:%f" % (errorRateSum / float(testTimes)))multiTest()

转载于:https://www.cnblogs.com/qiang-wei/p/10770285.html

机器学习实战之logistic回归分类相关推荐

  1. logistic回归分析优点_机器学习实战项目-Logistic回归

    Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 Sigmoid 函数 回归 概 ...

  2. 【Python 机器学习实战】Logistic回归

    引言 假设现在有一些数据点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作回归. 利用Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进 ...

  3. 机器学习实战之Logistic回归

    本系列教程特点: 基于<机器学习实战> 尽量避免讲太多数学公式,通过简单直白的方式讲解各算法的原理 对于算法实现的代码进行详细讲解 哪些读者可以食用: 了解机器学习的基本术语 会Pytho ...

  4. 【机器学习算法】Logistic回归分类算法

    文章目录 一.Logistic回归 1. 分类问题 2. Logistic函数 (1) 阶跃函数(不可导) (2)可导的阶跃函数 二.Logistic回归的算法原理 1. 基本思路 2. 数学解析 ( ...

  5. 机器学习实战之Logistic回归(四)从疝气病症状预测病马的死亡率(含数据集)

    Logistic回归(三)从疝气病症状预测病马的死亡率(含数据集) 准备 准备数据:处理数据中的缺失值 训练算法:使用优化算法,找到最佳系数 测试算法:用Logistic回归进行分类 转载请注明作者和 ...

  6. 机器学习实战-57: 人工神经网络分类算法(Artificial Neural Network)

    机器学习实战-57: 人工神经网络分类算法 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 人工神经网络(Artificial Neural Network)分类算法属于监督学习算法 ...

  7. Logistic回归分类算法原理分析与代码实现

    前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...

  8. kmeans python interation flag_机器学习经典算法-logistic回归代码详解

    一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...

  9. 机器学习实战(八)分类回归树CART(Classification And Regression Tree)

    目录 0. 前言 1. 回归树 2. 模型树 3. 剪枝(pruning) 3.1. 预剪枝 3.2. 后剪枝 4. 实战案例 4.1. 回归树 4.2. 模型树 学习完机器学习实战的分类回归树,简单 ...

最新文章

  1. HTML5 canvas绘制雪花飘落
  2. php连接mysql数据库测试_php连接mysql数据库连接测试文件
  3. 【HDU1495非常可乐】【POJ3414Pots】
  4. html_javascript
  5. c 语言简单的聊天程序,写一个C-S程序,实现简单的聊天功能。(tcp/ip)
  6. python flask框架优点_python之全栈(Flask框架)
  7. ArcMAP中如何将16位保存的卫星底图,转变为8位表示
  8. linux怎样删除链接文件,在 Linux 中怎样移除(删除)符号链接
  9. 无缝拼接屏是怎样实现的?有什么特点!
  10. 第1章第26节:如何通过幻灯片母版统一管理相同类型的幻灯片2 [PowerPoint精美幻灯片实战教程]
  11. 【运维】阿里云宝塔面板域名DNS解析(如何配置用域名访问网站)
  12. 记一次自己亲身经历灵异事件
  13. 【odoo15】自定义一个kanban视图
  14. SSR门户项目爬坑之路(三)
  15. 运行多个mysql service_同时运行多个MySQL服务器的方法
  16. leetcode.1402做菜顺序
  17. incaseformat蠕虫病毒爆发,深信达助力安全防护
  18. 牛客3007E-立方数-欧拉线性筛+素数分解+二分
  19. windows系统C盘空间满了?两步让你多出来10个多G!
  20. 必应终于把首页的图片替掉了。

热门文章

  1. windows比linux差在哪,怎么让新手理解Linux比Windows好在哪里!
  2. tq3358 linux 串口驱动编程,TQ335x——spidev驱动的生成
  3. skysat重访周期_重访小恶梦
  4. React 与 Vue 框架的设计思路大 PK
  5. 使用深度学习TensorFlow框架进行图片识别
  6. 设计师要懂布局(一)
  7. getContentResolver().query()方法selection参数使用详解(转)
  8. 关于Retinex图像增强算法的一些新学习。
  9. linux引导时输入特殊信息的含义
  10. Vista Dynamips模拟器安装