机器学习实战之logistic回归分类
利用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回归分类相关推荐
- logistic回归分析优点_机器学习实战项目-Logistic回归
Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 Sigmoid 函数 回归 概 ...
- 【Python 机器学习实战】Logistic回归
引言 假设现在有一些数据点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作回归. 利用Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进 ...
- 机器学习实战之Logistic回归
本系列教程特点: 基于<机器学习实战> 尽量避免讲太多数学公式,通过简单直白的方式讲解各算法的原理 对于算法实现的代码进行详细讲解 哪些读者可以食用: 了解机器学习的基本术语 会Pytho ...
- 【机器学习算法】Logistic回归分类算法
文章目录 一.Logistic回归 1. 分类问题 2. Logistic函数 (1) 阶跃函数(不可导) (2)可导的阶跃函数 二.Logistic回归的算法原理 1. 基本思路 2. 数学解析 ( ...
- 机器学习实战之Logistic回归(四)从疝气病症状预测病马的死亡率(含数据集)
Logistic回归(三)从疝气病症状预测病马的死亡率(含数据集) 准备 准备数据:处理数据中的缺失值 训练算法:使用优化算法,找到最佳系数 测试算法:用Logistic回归进行分类 转载请注明作者和 ...
- 机器学习实战-57: 人工神经网络分类算法(Artificial Neural Network)
机器学习实战-57: 人工神经网络分类算法 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 人工神经网络(Artificial Neural Network)分类算法属于监督学习算法 ...
- Logistic回归分类算法原理分析与代码实现
前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...
- kmeans python interation flag_机器学习经典算法-logistic回归代码详解
一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...
- 机器学习实战(八)分类回归树CART(Classification And Regression Tree)
目录 0. 前言 1. 回归树 2. 模型树 3. 剪枝(pruning) 3.1. 预剪枝 3.2. 后剪枝 4. 实战案例 4.1. 回归树 4.2. 模型树 学习完机器学习实战的分类回归树,简单 ...
最新文章
- HTML5 canvas绘制雪花飘落
- php连接mysql数据库测试_php连接mysql数据库连接测试文件
- 【HDU1495非常可乐】【POJ3414Pots】
- html_javascript
- c 语言简单的聊天程序,写一个C-S程序,实现简单的聊天功能。(tcp/ip)
- python flask框架优点_python之全栈(Flask框架)
- ArcMAP中如何将16位保存的卫星底图,转变为8位表示
- linux怎样删除链接文件,在 Linux 中怎样移除(删除)符号链接
- 无缝拼接屏是怎样实现的?有什么特点!
- 第1章第26节:如何通过幻灯片母版统一管理相同类型的幻灯片2 [PowerPoint精美幻灯片实战教程]
- 【运维】阿里云宝塔面板域名DNS解析(如何配置用域名访问网站)
- 记一次自己亲身经历灵异事件
- 【odoo15】自定义一个kanban视图
- SSR门户项目爬坑之路(三)
- 运行多个mysql service_同时运行多个MySQL服务器的方法
- leetcode.1402做菜顺序
- incaseformat蠕虫病毒爆发,深信达助力安全防护
- 牛客3007E-立方数-欧拉线性筛+素数分解+二分
- windows系统C盘空间满了?两步让你多出来10个多G!
- 必应终于把首页的图片替掉了。
热门文章
- windows比linux差在哪,怎么让新手理解Linux比Windows好在哪里!
- tq3358 linux 串口驱动编程,TQ335x——spidev驱动的生成
- skysat重访周期_重访小恶梦
- React 与 Vue 框架的设计思路大 PK
- 使用深度学习TensorFlow框架进行图片识别
- 设计师要懂布局(一)
- getContentResolver().query()方法selection参数使用详解(转)
- 关于Retinex图像增强算法的一些新学习。
- linux引导时输入特殊信息的含义
- Vista Dynamips模拟器安装