书籍:《机器学习实战》中文版
IDE:PyCharm Edu 4.02

环境:Adaconda3  python3.6

关键词:sigmoid函数、批梯度上升法、随机梯度上升法

from numpy import *
import matplotlib.pyplot as plt
def loadDataSet():dataMat = []labelMat = []with open('testSet.txt') as fr: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,labelMat
dataMat,labelMat = loadDataSet()
def sigmoid(inX):return 1.0/(1+exp(-inX))
# 批梯度上升算法(计算量大)
def gradAscent(dataMatIn,classLabels):#convert to NumPy matrixdataMatrix = mat(dataMatIn)                      # 100 by 3labelMat = mat(classLabels).transpose()          # 100 by 1m,n = shape(dataMatrix)alpha = 0.001maxCycles = 500    #迭代次数weights = ones((n,1))    #矩阵 3 by 1for k in range(maxCycles):h = sigmoid(dataMatrix*weights)         # 两个矩阵类型 *表示矩阵乘法error = labelMat-hweights = weights + alpha * dataMatrix.transpose() * error  #批梯度下降法公式return weights
weights1 = gradAscent(dataMat,labelMat)
#print(weights1)   # print(weights1.getA())
# 画出数据集和logistic回归最佳拟合直线
def plotBestFit(weights):dataArr = array(dataMat)   #二维时,array()与mat()函数效果相同n = shape(dataArr)[0]      #行数xcord1 = [];ycord1 = []xcord2 = [];ycord2 = []for i in range(n):if int(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 = arange(-3.0,3.0,0.1)                         # 数组(60,)#根据sigmoid(z)函数,0是两个分类的分界处#z=w0x0+w1x1+w2x2  令z=0,x0=1解出x1与x2的关系y = (-weights[0]-weights[1]*x)/weights[2]         # 矩阵(1,60)#  原文 ax.plot(x,y)ax.plot(x,y.transpose())plt.xlabel('X1');plt.ylabel('X2')plt.show()
#原文 plotBestFit(weights1.getA())
#print(plotBestFit(weights1))
# 随机梯度上升算法
def stocGradAscent0(dataMatrix,classLabels):m,n = shape(dataMatrix)alpha = 0.01weights = ones(n)    # 数组for i in range(m):h = sigmoid(sum(dataMatrix[i]*weights))   # 元素相乘再求和即w0x0+w1x1+w2x2error = classLabels[i] - hweights = weights + alpha * error * dataMatrix[i]return weights
weights2 = stocGradAscent0(array(dataMat),labelMat)
# print(weights2)
# print(plotBestFit(weights2))
# 改进的随机梯度下降法
# alpha随着迭代次数不断减小
def stocGradAscent1(dataMatrix,classLabels,numIter=150):m,n = shape(dataMatrix)weights = ones(n)                  # 数组对象dataMatrix = array(dataMatrix)    #转换为numpy格式for j in range(numIter):# 原文 dataIndex = range(m)dataIndex = list(range(m))for i in range(m):# 随机选择一个样本进行权重的更新alpha = 4/(1.0+j+i)+0.001           #apha decreases with iteration, does notrandIndex = 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
weights3 = stocGradAscent1(dataMat,labelMat)
print(plotBestFit(weights3))

注解:

1、numpy:矩阵和数组的转换

np.mat(变量)函数 :将对象转换为matrix

np.变量.getA():将矩阵转换为数组

例子:批梯度下降法返回一个矩阵weight1s,而plotBestFit(weights)函数接收一个数组,

因此,调用命令为plotBestFit(weights1.getA())。

直接使用 plotBestFit(weights1)报错:x and y must have same first dimension, but have shapes (60,) and (1, 60)

解决方法:将原文的ax.plot(x,y) 改为ax.plot(x,y.transpose())

2、区分list、numpy的矩阵及数组

(1)

list对象中间有逗号[1,1,1,1,1]
print(ones(5))                       #数组
print(ones((5,1)))                 #矩阵
[ 1.  1.  1.  1.  1.]
[[ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]]

(2)

矩阵对象:* 表示矩阵乘法

ndarray对象: * 表示元素乘法;dot(A,B)表示矩阵乘法。

当然,二维的ndarray与matrix相同。

python列表:print([1,2,3]*2)  结果:[1,2,3,1,2,3]

若想从列表得到数乘结果,可以使用列表生成式!

(3)记住随机梯度上升法的推导公式

weights = weights + alpha * error * dataMatrix[randIndex]

机器学习实战——Logistic回归相关推荐

  1. 机器学习实战--Logistic回归与实例:从疝病症预测病马的死亡率

    声明 本文参考了<机器学习实战>书中代码,结合该书讲解,并加之自己的理解和阐述 机器学习实战系列博文 机器学习实战--k近邻算法改进约会网站的配对效果 机器学习实战--决策树的构建.画图与 ...

  2. 机器学习实战 - Logistic回归

    假设我们有 一些数据点,我们用一条直线对其进行拟合,那么拟合的过程就称为回归. 实际上Logistic回归经常用于二类分类,也就是一般只用于只存在两种诸如"是"与"不是& ...

  3. 机器学习实战-逻辑回归-19

    机器学习实战-逻辑回归-用户流失预测 import numpy as np train_data = np.genfromtxt('Churn-Modelling.csv',delimiter=',' ...

  4. 机器学习实战——岭回归、缩减法

    一.基本知识 1.岭回归:从公式看,加入正则化项(2范数). 回归系数的计算公式为: 问题引入:若给定数据集X,如果XTX的逆存在,可以使用常规的线性回归方法.但是, (1)数据样本数比特征数少的情况 ...

  5. 机器学习:Logistic回归处理用气象数据预测森林火灾的数据挖掘方法

    文章目录 线性模型与回归 最小二乘与参数求解 1.一维数据: 2.多维数据 最大似然估计 Logistic回归 基本介绍 基于Logistic回归和Sigmoid函数的分类 基于最优化方法的最佳回归系 ...

  6. 机器学习之Logistic回归(逻辑蒂斯回归)

    Logistic回归又称Logistic回归分析,主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等. 应用: 一.寻找危险因素,正如上面所说的寻找 ...

  7. 机器学习-监督学习-logistic回归,softMax回归

    本篇博文来总结一下回归模型里面两个非常重要的模型. logistic回归 softMAX回归 Logistic回归 logistics回归虽然有"回归"两字但是却是分类模型,并且是 ...

  8. python实现logistic_用Python实现机器学习算法—Logistic 回归算法

    在 Logistic 回归中,我们试图对给定输入特征的线性组合进行建模,来得到其二元变量的输出结果.例如,我们可以尝试使用竞选候选人花费的金钱和时间信息来预测选举的结果(胜或负).Logistic 回 ...

  9. 机器学习:Logistic回归介绍

    Logistic回归定义 简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性.比如某用户购买某商品的可能性, ...

最新文章

  1. 谷歌云TPU服务正式全面开放:「AlphaGo背后的芯片」进入商用化
  2. 计算机端口封闭,如何查询局域网内被封的电脑端口?
  3. 阿里云 docker php mysql_PHP开发环境02 - 阿里云Ubuntu使用Docker配置PHP环境(只限于学习)...
  4. spring-jar包详解整理
  5. Selenium模拟JQuery滑动解锁
  6. python项目开发:用RabbitMQ实现异步RPC
  7. C#中DataGradView控件的常用操作
  8. windows 10下hosts文件写入权限
  9. 点云与图像融合的深度学习方法综述
  10. 图片批量转换为C语言数组工具
  11. Java 学习笔记:第十一章 多线程技术
  12. html添加悬浮图片,HTML5和jQuery制作网页灰度图片悬浮效果_js
  13. 苹果设计可变色Apple Watch表带,智能穿戴玩法多
  14. java运行库未能修复,如何修复Microsoft Visual Studio错误:“程序包未正确加载”?...
  15. 未来人工智能人才,需要具备哪些基本特征?
  16. 激光三角测距原理概述
  17. 医疗无菌加工之冷冻干燥 –冻干机搁板温度分布验证的指南规范与工艺建议
  18. Hive 1.2.1 UI(HWI)配置
  19. 工业物联网异常检测技术综述
  20. OpenCV C++案例实战十二《图像全景拼接》

热门文章

  1. Python不能做游戏?Pygame中的对象你了解吗?
  2. android 按钮顶级效果_Android 中按钮的点击效果
  3. java log4j 实例_log4j使用例子 - 小代码2016的个人页面 - OSCHINA - 中文开源技术交流社区...
  4. c语言按键实现跳转程序,C语言中的跳转语句
  5. java quartz web.xml_quartz定时执行任务,并配置web.xml的操作方法
  6. “unzip”不是内部或外部命令,也不是可运行的程序或批处理文件
  7. 基于机器视觉的曼秀雷敦洗发水瓶印刷缺陷检测
  8. java求最小步数_关于java:查找两点之间的最小步数?
  9. 精度计算——大数阶乘
  10. iOS 初识CoreBluetooth