《机器学习实战》第五章 Python3代码-(亲自修改测试可成功运行)

2023-10-27

由于Peter Harrington所著的这本《机器学习实战》中的官方代码是Python2版本的且有一些勘误,使用Python3的朋友运行起来会有很多问题,所以我将自己在学习过程中修改好的Python3版本代码分享给大家,以供大家交流学习,共同进步!

官方源码文件下载地址:https://manning-content.s3.amazonaws.com/download/3/29c6e49-7df6-4909-ad1d-18640b3c8aa9/MLiA_SourceCode.zip

第五章-Logistic回归

文件名:logRegres.py

from numpy import *
from importlib import reload

#Logistic回归梯度上升优化算法
def loadDataSet():
    dataMat = []; labelMat = []
    fr = open('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,labelMat

def sigmoid(inx):
    return 1.0/(1+exp(-inx))

def gradAscent(dataMatIn, ClassLabels):
    dataMatrix = mat(dataMatIn)
    labelMat = mat(ClassLabels).transpose()
    m,n = shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = ones((n,1))
    for k in range(maxCycles):
        h = sigmoid(dataMatrix*weights)
        error = (labelMat - h)
        weights = weights + alpha * dataMatrix.transpose() * error
    return weights
#画出数据集和Logistic回归最佳拟合直线的函数
def plotBestFit(weights):
    import matplotlib.pyplot as plt
    dataMat,labelMat=loadDataSet()
    dataArr = array(dataMat)
    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)
    y = (-weights[0]-weights[1]*x)/weights[2]

    ax.plot(x,y)
    plt.xlabel('X1'); plt.ylabel('X2')
    plt.show()

#随机梯度上升算法
def stocGradAscent0(dataMatrix, classLabels):
    m,n = shape(dataMatrix)
    alpha = 0.01
    weights = ones(n)
    for i in range(m):
        h = sigmoid(sum(dataMatrix[i]*weights))
        error = classLabels[i] - h
        weights = weights + alpha * error * dataMatrix[i]
    return weights

#改进的随机梯度上升算法
def stocGradAscent1(dataMatrix, classLabels, numIter=150):
    m,n = shape(dataMatrix)
    weights = ones(n)
    for j in range(numIter):  
        dataIndex = list(range(m)) #python3中range不返回数组对象,而是返回range对象
        for i in range(m):
            alpha = 4/(1.0+j+i)+0.01 #调整以减少数据波动或高频波动
            randIndex = int(random.uniform(0,len(dataIndex))) #随机选取样本以减少周期性波动
            h = sigmoid(sum(dataMatrix[randIndex]*weights))
            error = classLabels[randIndex] - h
            weights = weights + alpha * error * dataMatrix[randIndex]
            del(dataIndex[randIndex])
        return weights

#Logistic回归分类函数
def classifyVector(inX, weights):
    prob = sigmoid(sum(inX*weights))
    if prob > 0.5 : return 1.0
    else: return 0.0

def colicTest():
    frTrain = open('horseColicTraining.txt')
    frTest = open('horseColicTest.txt')
    trainingSet = []; trainingLabels = []

    for line in frTrain.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]))
    trainWeights = stocGradAscent1(array(trainingSet),trainingLabels,500)

    errorCount = 0; numTestVec = 0.0
    for line in frTest.readlines():
        numTestVec += 1.0
        currLine = line.strip().split('\t')
        lineArr = []
        for i in range(21):
            lineArr.append(float(currLine[i]))
        if int(classifyVector(array(lineArr),trainWeights))!=int(currLine[21]):
            errorCount += 1
    errorRate = (float(errorCount)/numTestVec)
    print("测试错误率为:%f" % errorRate);
    return errorRate

def multiTest():
    numTests = 10; errorSum=0.0
    for k in range(numTests):
        errorSum += colicTest()
    print("经过 %d 轮迭代后的错误率为:%f" % (numTests,errorSum/float(numTests)))

相关阅读推荐:

https://blog.csdn.net/y12345678904/article/details/5567089

https://lavi-liu.blog.csdn.net/article/details/78182412

https://blog.csdn.net/qq_41717584/article/details/83241243

https://blog.csdn.net/mlp750303040/article/details/79287177

https://blog.csdn.net/qq_41204464/article/details/88980654

https://blog.csdn.net/LaoYuanPython/article/details/100045507

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《机器学习实战》第五章 Python3代码-(亲自修改测试可成功运行) 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 为什么家里pm25比外面高_为什么男人总是对“外面的女人”格外心动?

    陈粒在 易燃易爆炸 的歌词中有唱到 想我冷艳 还想我轻佻又下贱 要我阳光 还要我风情不摇晃 爱我纯粹 还爱我赤裸不糜颓 图我情真 还图我眼波销魂 把一个男人 贪欲 的状态描写的淋漓尽致 想鱼和熊掌兼得 既想抱着白玫瑰 又想拎着红玫瑰 这个时
  • 因果图用例设计方法概念详解

    为什么么需要因果图 在黑盒测试中 等价类划分或边界值分析法只考虑了不同的输入和不同的输出之间的关系 但是如果是各个输入条件之间有很复杂的组合 这二种设计方法都很难用一个系统的方法进行描述 设计测试用例只能依靠测试人员主观的猜测或者分析 具有
  • 五大排序算法(C语言)

    一 插入排序 每次将一个待排序的记录按其关键字大小插入到前面已排序好的子序列中 直到全部记录插入完成 4 7 2 6 9 13 1 5 4 7 2 6 9 13 1 5 2 4 7 6 9 13 1 5 2 4 6 7 9
  • Timer.schedule方法的使用

    java util Timer定时器的常用方法如下 schedule TimerTask task long delay 延迟delay毫秒后 执行一次task schedule TimerTask task long delay long
  • Oracle insert 插入数据的几种方式

    1 insert 的单表插入 INSERT INTO
  • Leetcode 本地调试环境(C++)

    文章目录 二叉树调试 刷题时 经常需要本地调试 特此整理一下如何依照 LeetCode 的样式 输入测试用例以及打印结果 增强结果的可视性 二叉树调试 利用数组生成二叉树 这里以LeetCode第102题层序遍历为例 工具函数 TreeNo
  • SmartFusion从FPGA到ARM(十一)——CorePWM的使用

    文章目录 前言 IP核添加与配置 库函数简介 posedge和nededge 对齐方式 示例1 基本PWM生成 示例2 带相位差的PWM生成 PWM应用示例 系列教程 SmartFusion从FPGA到ARM系列教程 前言 CorePWM是
  • 贪心算法例题:2850商人小鑫

    Problem Description 小鑫是个商人 当然商人最希望的就是多赚钱 小鑫也一样 这天 他来到了一个遥远的国度 那里有着n件商品 对于第i件商品需要付出ci的价钱才能得到 当然 对于第i件商品 小鑫在自己心中有一个估价pi 代表
  • 无法解析的外部符号__imp__AlphaBlend@44

    使用Win32 API函数AlphaBlend编译时出现一个错误 无法解析的外部符号 imp AlphaBlend 44 解决办法是在使用得地方包含Msimg32 lib 具体是在文件头部添加代码 pragma comment lib Ms
  • 利用PyQt5制作本地音乐播放器

    介绍 本文是对之前的音乐播放器的一些改进和功能实现 只写了有变化的部分 具体部分请看上一篇博客 利用PyQt5和QSS制作本地音乐播放器 初稿 https blog csdn net weixin 44343083 article deta
  • PHP版今日头条算法面试题(持续更新)

    1 现在有一个字符串 你要对这个字符串进行 n 次操作 每次操作给出两个数字 p l 表示当前字符串中从下标为 p 的字符开始的长度为 l 的一个子串 你要将这个子串左右翻转后插在这个子串原来位置的正后方 求最后得到的字符串是什么 字符串的
  • mysql 字符串主键效率,字符串作为主键的性能损失?

    What would be the performance penalty of using strings as primary keys instead of bigints etc String comparison is much
  • .360勒索病毒数据恢复

    导言 在当今数字时代 随着我们对计算机和互联网的依赖不断增加 威胁网络安全的因素也日益猖獗 其中 360 勒索病毒是一股咄咄逼人的黑暗力量 它能够迅速加密您的数据文件 并以比特币等加密货币的形式勒索您的财产 本文91数据恢复将深入介绍这一极
  • 在Linux中使用VSCode进行PyQt开发

    在Linux中使用VSCode进行PyQt开发 需要进行以下步骤 步骤一 安装Anaconda 在Anaconda官网上下载相应版本的Anaconda安装包 然后执行以下命令进行安装 bash Anaconda XXX Linux x86
  • 【SHOI2017】寿司餐厅【最大权闭合子图】

    题目链接 说实话 这道题从前天开始敲 然后不断的加优化 今晨才过了它 但是却对于最大权闭合子图有了很深的了解 题意 有N种寿司 我们可以吃连续的一段寿司 讲 将得到一系列的贡献 譬如说吃了1 2 3三个寿司 将得到 这么多的贡献值 当然 每
  • 机器学习:你需要多少训练数据?

    摘自 PPTV课堂 作者为Google 软件工程师 美国西北大学电子信息工程博士 擅长大规模分布式系统 编译器和数据库 从谷歌的机器学习代码中得知 目前需要一万亿个训练样本 训练数据的特性和数量是决定一个模型性能好坏的最主要因素 一旦你对一
  • 004.设计原则与思想:设计原则

    设计原则 一 理论一 对于单一职责原则 如何判定某个类的职责是否够 单一 1 如何理解单一职责原则 SRP 二 如何做到 对扩展开放 修改关闭 扩展和修改各指什么 三 里式替换 LSP 跟多态有何区别 哪些代码违背了LSP 四 接口隔离原则
  • IDEA实现远程Debug调试(附上Demo代码)

    目录 一 前提 二 IDEA中如何实现远程Debug模式 1 创建demo项目 2 引入依赖 3 创建启动类和创建demo 4 配置idea 二 IDEA的Debug的优缺点 二 Demo的源代码地址 总结 一 前提 需要准备JDK1 8环
  • C#实现查询MySql数据信息在DataViewGrid控件中显示

    具体的实现步骤如下 1 新建Windows窗体应用程序 添加DataGridView控件 不对DataGridView控件做任何处理 只做拉伸 防止看不到数据 2 为 查看记录 按钮添加事件 代码如下 1 数据库操作类 class DBCo
  • 《机器学习实战》第五章 Python3代码-(亲自修改测试可成功运行)

    由于Peter Harrington所著的这本 机器学习实战 中的官方代码是Python2版本的且有一些勘误 使用Python3的朋友运行起来会有很多问题 所以我将自己在学习过程中修改好的Python3版本代码分享给大家 以供大家交流学习