5.2.1 梯度下降(略)

  5.2.2 线性分类器(略)

  5.2.3 Logistic函数—世界不是非黑即白

  5.2.4 算法流程

  单神经元的Logistic分类器

  (1)导入数据

  

#coding:utf-8
import sys
import os
from numpy import *#配置UTF-8的输出环境
reload(sys)
sys.setdefaultencoding('utf-8')#数据文件转矩阵
#path:数据文件路径
#delimiter:行内字段分隔符
def file2matrix(path,delimiter):recordlist = []fp         = open(path,"rb")#读取文件内容content    = fp.read()fp.close()rowlist    = content.splitlines()#按行转化为一维表#逐行遍历,结果按分割符分割为行向量recordlist = [map(eval,row.split(delimiter)) for row in rowlist if row.strip()] #eval字符串str当成有效的表达式来求值并返回计算结果return  mat(recordlist)#返回转换后的矩阵形式

Input  = file2matrix("testSet.txt","\t") #导入数据并转换为矩阵
target = Input[:,-1]                       #获取分类的标签数据
(m,n)  = shape(Input)

  (2)按分类绘制散点图

  

def drawScatterbyLabel(plt,Input):(m,n)  = shape(Input)target = Input[:,-1]for i in xrange(m):if target[i] == 0:plt.scatter(Input[i,0],Input[i,1],c='blue',marker = 'o')else:plt.scatter(Input[i,0],Input[i,1],c = 'red',marker = 's')plt.show()

  (3)构建b+x系数矩阵:b这里默认为1

 

def buildMat(dataSet):m,n     = shape(dataSet)dataMat = zeros((m,n))dataMat[:,0]  = 1               #矩阵的第一列全部设置为1dataMat[:,1:] = dataSet[:,:-1]  #第一列和倒数第二列保持源数据不变,删除最后一列return dataMat

  结果为:

  [[  1.        -0.017612  14.053064]
   [  1.        -1.395634   4.662541]
   [  1.        -0.752157   6.53862 ]
   [  1.        -1.322371   7.152853]
   [  1.         0.423363  11.054677]
   [  1.         0.406704   7.067335]
   [  1.         0.667394  12.741452]
   [  1.        -2.46015    6.866805]
   [  1.         0.569411   9.548755]
   [  1.        -0.026632  10.427743]]

  (4)定义步长和迭代次数,并初始化权重向量

alpha = 0.001                       #步长
steps = 500                         #迭代次数
weight = ones((n,1))                #初始化权重向量

  (5)主程序:迭代过程

def logistic(wTx):return 1.0/(1.0+exp(-wTx))

for k in xrange(steps):gradient = dataMat*mat(weight)  #计算梯度output   = logistic(gradient)   #Logistic函数errors   = target - output      #计算误差weights  = weights + alpha*dataMat.T*errors #修正误差,进行迭代

输出权重:

[[ 1.20770866][-0.13220832][-0.28097863]]

  (6)绘制分类超平面

  

X = np.linspace(-5,5,100)
#y = w*x+b:b:weight[0]/weight[2];w:weights[1]/weight[2]
Y = -(double(weights[0])+X*(double(weights[1])))/double(weights[2])
plt.plot(X,X)
plt.show()

  5.2.5 对测试集进行分类

  (1)分类器函数

  

def classifier(testData,weights):prob = logistic(sum(testData*weights))  #求取概率-判别算法if prob > 0.5:return 1.0else:return 0.0

  (2)对测试数据执行分类

  

def classifier(testData,weights):prob = logistic(sum(testData*weights))  #求取概率-判别算法if prob > 0.5:return 1.0else:return 0.0weights = mat([[ 1.20770866],[-0.13220832],[-0.28097863]])  #载入之前生成的权重
testdata = mat([-0.147324,2.874846])                        #测试数据
m,n      = shape(testdata)                                  #构建测试数据矩阵
testmat  = zeros((m,n+1))
testmat[:,0] = 1
testmat[:,1:] = testdata
print classifier(testmat,weights)

输出结果:1

参考资料: 郑捷《机器学习算法原理与编程实践》  仅供学习研究

转载于:https://www.cnblogs.com/wuchuanying/p/6339464.html

郑捷《机器学习算法原理与编程实践》学习笔记(第五章 梯度寻优)5.2 Logistic梯度下降法...相关推荐

  1. 郑捷《机器学习算法原理与编程实践》学习笔记(第七章 预测技术与哲学)7.1 线性系统的预测...

    7.1.1 回归与现代预测 7.1.2 最小二乘法 7.1.3 代码实现 (1)导入数据 def loadDataSet(self,filename): #加载数据集X = [];Y = []fr = ...

  2. 郑捷《机器学习算法原理与编程实践》学习笔记(第四章 推荐系统原理)(三)SVD...

    4.5.1 SVD算法回顾 A = U∑VT 其中:A是N*M的矩阵,U是M*M的方阵(里面向量正交,称为左奇异向量),∑是一个M*N的矩阵,VT是一个N*N的矩阵(里面向量正交,右奇异向量) 那么奇 ...

  3. 《机器学习:算法原理与编程实践》的读书笔记:SMO部分最难,大部分代码基于Scikit-Learn,决策树其实用处不大

    机器学习:算法原理与编程实践 目录 [隐藏] 1 机器学习的基础 2 中文文本分类 3 决策树的发展 4 推荐系统原理 5 梯度寻优 6 神经网络初步 7 预测的技术与哲学 8 万能分类器:SVM 9 ...

  4. OpenCV4机器学习算法原理与编程实战(附部分模型下载地址)

    一直想找本书,能在机器学习复杂的算法原理和高效的编程实战之间达到合适的平衡:让感兴趣的同学拿到就有能用的代码,还有基本原理的介绍,因为了解原理才知道什么时候用什么算法最合适,以及如何调整参数. 一直没 ...

  5. Java并发编程艺术学习笔记(五)

    Java并发编程艺术学习笔记(五) Java并发容器和框架 Java为开发者也提供了许多开发容器和框架,可以从每节的原理分析来学习其中精妙的并发程序. 一.ConcurrentHashMap的实现原理 ...

  6. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  7. Java编程思想学习笔记-第11章

    <?xml version="1.0" encoding="utf-8"?> Java编程思想学习笔记-第11章 Java编程思想学习笔记-第11章 ...

  8. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  9. 数据挖掘导论学习笔记 第五章 分类算法

    5.1基于规则的分类器 基于规则的分类器的规则用析取范式R=(r1∨r2∨⋯∨rk)R=(r_1\lor r_2 \lor \cdots \lor r_k)R=(r1​∨r2​∨⋯∨rk​)表示.R称 ...

  10. Opencv3编程入门学习笔记(五)之通道分离(split)与合并(merge)

    若要对Opencv中(BGR)颜色通道进行单一处理,那必然会涉及到通道分离(split)与合并(merge).那么本篇博客笔者记录了两个方法的使用方法和案例.案例来源于<Opencv3编程入门学 ...

最新文章

  1. router OS (ROS)命令中文手册
  2. 理解bootstrap的列偏移offset 和 推拉push/pull的区别?
  3. python循环10次1001python循环10次_Python循环题怎么做?
  4. AE快速景深模糊插件:Rowbyte Fast Bokeh for Mac
  5. vue 带全选和多选的表格怎么写_vue+element-ui里面table组件多选框实现批量操作
  6. android studio 导入包分不分动态静态,详解Android studio 动态fragment的用法
  7. TensorFlow工作笔记001---Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码
  8. Phoenix Tips (8) 多租户
  9. python 3d绘图模块_使用python和mayavi创建3D streamplot
  10. SQL Server数据库备份工具
  11. 应该怎么评价大数据杀熟?
  12. 计算机桌面底边出现库如何去掉,桌面图标有蓝底怎么去掉
  13. 在Markdown中打出上下标
  14. Failing OffsetCommit request since the consumer is not part of an active group
  15. PT100温度电阻转换器
  16. TM1637数码管显示STC51单片机驱动程序
  17. Day2--使用ESP32双核、U8G2 OLED任务、任务以绝对频率运行、任务内存优化
  18. 影像篡改与识别(二):数字时代
  19. android删除所有已保存wifi密码,安卓移除/忘记已保存的wifi密码
  20. 无锡有哪些高中有计算机专业,无锡19所重点高中大盘点!

热门文章

  1. 华为手机怎么隐藏按键图标_你的华为手机隐藏功能,待激活
  2. 浅谈Linux PMIC驱动(一)
  3. 如何限制文件服务器上传文件的速度,怎么设置上传软件文件速度限制
  4. 测温监控摄像头_温度湿度远程监控摄像头
  5. 测试用例是开发人员最后一块遮羞布
  6. 程序员求职之道(《程序员面试笔试宝典》)之看着别人手拿大把的offer,不淡定了怎么办?
  7. CSharpGL(13)用GLSL实现点光源(point light)和平行光源(directional light)的漫反射(diffuse reflection)...
  8. Ubuntu下使用“Windows徽标键+R”打开终端
  9. Android 获取系统语言,区分简繁体中文
  10. 地图编辑器开发(二)