【Python机器学习】Logistic回归——从疝气病症预测病马的死亡率

news2024/12/23 9:16:32

用Logistic回归来预测患有疝病的马的存活问题。这里的数据包括368个样本和28个特征。疝病是描述马肠胃痛的术语,这种病并不一定源自马的肠胃问题。

该数据集中包含了医院检测马疝病的一些指标,有些指标比较主观,有的指标难以测量,例如马的疼痛级别。

除了部分指标主观和难以测量外,该数据还存在一个问题,那就是数据集中有30%的值是缺失的。下面将首先处理数据集中的数据缺失问题,然后再利用Logistic回归和随机梯度上升算法来预测马的生死。

准备数据:处理数据中的缺失值

数据中的缺失值是个非常棘手的问题:假设有100个样本和20个特征,这些数据都是数据收集回来的。若机器上的某个传感器导致一个特征无效,有以下方法可以解决这个问题:

1、使用可用特征的均值来填补缺失值;

2、使用特殊值来填充缺失值,如-1;

3、忽略有缺失值的样本;

4、使用相似样本的均值来添补缺失值;

5、使用另外的机器学习算法来预测缺失值。

现在,我们对数据集进行预处理,使其可以顺利地使用分类算法。在预处理阶段需要做两件事:

1、所有的缺失值必须用一个实数值来替代,因为我们使用的NumPy数据类型不允许包含缺失值。这里选择实数0来替换所有缺失值,恰好能使用Logistic回归,这样做的直觉在于,我们需要的事一个在更新时不会影响系数的值。回归系数的更新公式:

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

如果dataMatrix的某特征对应值为0,那么该特征的系数将不做更新,即:

weights=weights

另外,由于sigmoid(0)=0.5,即它对结果的预测不具有任何倾向性,因此上述做法也不会对误差项造成任何影响,基于上述原因,将缺失值用0代替既可以保留现有数据,也不需要对优化算法进行修改。此外,该数据集中的特征值一般不为0,因此在某种意义上来说它也满足“特殊值”这个要求。

2、如果在测试数据集中发现了一条数据的类别标签已经缺失,那么我们的简单做法是将该条数据丢弃。这是因为类别标签与特征不同,很难确定采用某个合适的值来替换。采用Logistic回归进行分类时这种做法是合理的,而如果采用类似kNN的方法就可能不太可行了。

测试算法:用Logistic回归进行分类

数据预览:

使用Logistic回归方法进行分类并不需要做很多工作,所需做的只是把测试集上每个特征向量乘以最优化方法得来的回归系数,再将该乘积结果求和,最后输入到Sigmoid函数中即可。如果对应的sigmoid值大于0.5就预测类别标签为1,否则为0。

实际代码:

def classifyVector(inX,weights):
    prod=sigmoid(sum(inX*weights))
    if prod>0.5:
        return 1
    else:
        return 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=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=errorCount+1
    errorRate=(float(errorCount)/numTestVec)
    print('错误率:',errorRate)
    return errorRate

def multiTest():
    numTests=10
    errorSum=0.0
    for k in range(numTests):
        errorSum=errorSum+colicTest()
    print('运行次数,平均错误率',(numTests,errorSum/float(numTests)))

上述代码中,第一个函数是classifyVector(),它以回归系数和特征向量作为输入参数来计算对应的Sigmoid值,如果Sigmoid大于0.5函数返回1,否则返回0。

第二个函数colicTest()用于打开测试集和训练集,并对数据进行格式化处理的函数。该函数首先导入训练集,数据最后一列是类别标签:“扔存货”、“已经死亡”、“已经安乐死”。为了方便,将“已经死亡”和“已经安乐死”合并成“未存活”标签。输入导入后,可以用函数stocGradAscent1()来计算回归系数向量。这里可以自由设定迭代的次数。整体来看,colicTest()具有完全独立的功能,多次运行得到的结果可能稍有不同,这是因为其中有随机的成分在里面。

最后一个函数是multiTest(),功能是调用colicTest()10次并求结果的平均值:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker部署elasticsearch和Kibana

部署elasticsearch 通过下面的Docker命令即可安装单机版本的elasticsearch: docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/u…

【STC32G12K128开发板】第3-9讲:手势识别(基于PAJ7620U2)

第3-9讲:手势识别(基于PAJ7620U2) 学习目的了解IK-PAJ7620U2手势识别传感器模块的功能。掌握IK-PAJ7620U2的I2C协议、操作流程,并编程实现配置IK-PAJ7620U2工作于接近检测和手势识别模式以及读取检测结果。 PAJ7620手势识别模块 产…

灰狼优化算法(GWO)的详细解读

一、引言 在优化问题中,我们常常需要寻找一个最优解,使得某个目标函数达到最小或最大值。为了高效地解决这类问题,研究者们从自然界中的生物行为汲取灵感,提出了多种群智能优化算法。灰狼优化算法(Grey Wolf Optimize…

行为验证码的介绍

1.什么是行为验证码 行为式验证码是一种较为流行的验证码。从字面来理解,就是通过用户的操作行为来完成验证,而无需去读懂扭曲的图片文字。常见的有两种:拖动式与点触式。 2.行为验证码的概念 行为式验证的核心思想是利用用户的“行为特征”…

单火供电零线发生器 单火变零火线开关面板零火开关老房改造必备

创作 史新华 零线发生器套件与单火线供电套件,作为现代智能家居解决方案中的创新之作,它们犹如智能电气领域的魔术师,巧妙地解决了传统智能开关在单火线路环境中因无零线而难以应用的难题。这些套件,如同智能电气世界的桥梁&…

SQLite库笔记:命令行shell

SQLite项目提供了一个简单的命令行程序sqlite3,它允许用户对SQLite数据库手动输入和执行SQL语句。更多详情可参考官网(https://www.sqlite.org/cli.html)。 help SQLite shell命令的help信息如下: .auth ON|OFF Sho…

卷积神经网络 - 动机(Motivation)篇

序言 在深度学习的浩瀚星空中,卷积神经网络( Convolutional Neural Networks, CNNs \text{Convolutional Neural Networks, CNNs} Convolutional Neural Networks, CNNs)无疑是最为璀璨的一颗星,其诞生与崛起深刻改变了图像识别、…

线程池的优势与应用

线程池的优势与应用 1、线程池的优势2、应用场景 💖The Begin💖点点关注,收藏不迷路💖 1、线程池的优势 资源复用:减少线程创建和销毁的开销,通过重用已存在的线程来提高效率。控制并发:有效管…

Solana公链

Solana 链的优势 Solana之所以能够实现高性能,主要是因为它采用了多种创新的技术和设计决策。下面是Solana能够达到高吞吐量、低延迟和低成本的一些关键因素: 1. 历史证明 (Proof of History, PoH): Solana引入了一种独特的共识机制&#…

【C++题解】1022. 百钱百鸡问题

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1022. 百钱百鸡问题 类型:嵌套穷举 题目描述: 用 100 元钱买 100 只鸡,公鸡,母鸡,小鸡都要有。 公鸡 5 元 1 只&#x…

【Kubernetes】kubeadmu快速部署k8s集群

目录 一.组件部署 二.环境初始化 三.所有节点部署docker,以及指定版本的kubeadm 四.所有节点安装kubeadm,kubelet和kubectl 五.高可用配置 六.部署K8S集群 1.master01 节点操作 2.master02、master03节点 3.master01 节点 4.master02、master…

酒店管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,酒店管理员管理,房间类型管理,房间信息管理,订单信息管理,系统管理 微信端账号功能包括:系统首页,房间信息…

29-《夹竹桃》

夹竹桃 夹竹桃(学名:Nerium indicum Mill.)夹竹桃族夹竹桃属常绿直立大灌木,高可达5米,枝条灰绿色,嫩枝条具棱,被微毛,老时毛脱落。叶3-4枚轮生,叶面深绿,叶背…

Python可视化开发全面教程

Python是一种功能强大且易于学习的编程语言,它还提供了丰富的可视化库,如Matplotlib、Seaborn、Plotly和Bokeh。这些库使得数据可视化变得简单而直观。在本教程中,我们将介绍如何使用Python进行数据可视化,从基础知识到高级技巧。…

AI Agents(智能代理)教程:如何创建信息检索聊天机器人

AI 代理教程:如何创建信息检索聊天机器人 介绍 在本教程中,我们将指导您使用 AI 代理创建用于信息检索的复杂聊天机器人的过程。探索如何利用 AI 的强大功能构建能够高效地从各种来源检索数据的聊天机器人。 设置环境 我们的计划是使用 AI 代理&…

智慧教室建设方案

智慧教室建设方案摘要: 智慧教室发展和现状 智慧教室是教育现代化的重要体现,它经历了传统教学、多媒体教学、信息化教学等阶段。智慧教室利用先进的技术和理念,实现了教学环境的升级,包括本地和网络中控、远程管理、常态录播监控…

[渗透测试学习] PermX-HackTheBox

文章目录 PermX-HackTheBox信息搜集漏洞利用权限提升参考文章PermX-HackTheBox 信息搜集 nmap扫描一下端口 nmap -sC -v 10.10.11.23扫描结果如下 PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 256 e2:5c:5d:8c:47:3e:d8:72:f7:b4:80:03:49:86:6d:ef (ECDSA…

【系统架构设计师】二十二、嵌入式系统架构设计理论与实践③

目录 一、鸿蒙操作系统架构案例分析 1.1 鸿蒙操作系统定义 1.2 鸿蒙的层次化分析 1.2.1 内核层 1.2.2 系统服务层 1.2.3 框架层 1.2.4 应用层 1.3 鸿蒙操作系统的架构分析 1.3.1 鸿蒙操作系统架构具有4个技术特性 1.3.2 分布式架构所带来的优势 1.3.3 HarmonyOS 架构…

康耐视VisionPro GigE相机设置两种方法详细步骤

VisionPro GigE 相机设置方法一 1:关闭防火墙 2:打开 GigE Vision Configuration Tool 2.1:设置网卡巨型帧或者叫大型数据包 2.2:设置网卡 IP、掩码 2.3:设置相机 IP、掩码 VisionPro GigE 相机设置方法二 1:关闭防火墙 2:设置网卡 IP 跟掩码

每日一题~EC168 A+B+C+D

A 题意: 字符串 每一个字符的花费是2,如果ai-1 ai ,那么ai 的花费是1. 现在可以插入一个字符,得到最大花费。输出插入字符之后的字符串。 分析:只需要在相同的连续字符中间插入一个不同的字符就可以了。如果没有连续的相同字符&am…