规则学习算法之毒蘑菇识别

2024-02-11 14:59

本文主要是介绍规则学习算法之毒蘑菇识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分类算法有很多,比较常用且简单、易于理解和解释的决策树算上一个(有关决策树算法的应用可以参考本公众号9月19和20日的文章:基于R语言的数据挖掘之决策树)。在学习机器学习过程中,我又碰见一个规则分类算法,该算法跟决策树类似,也可以返回具体分类规则,而且结果往往比决策树更简洁、更容易理解,这里与大家共享。


两个重要的规则学习算法

一、单规则算法

1、算法思想

如果一个数据集含有N个变量,该算法会从中挑选出一个最为重要的变量最为规则变量。挑选的依据是:遍历所有的变量,计算各变量的规则错误率,错误率最低的变量作为最佳规则变量。为理解该算法的思想,这里举一个简单的例子。

一个女孩要嫁人,她会综合考虑男方的三个因素:年龄、收入和职业。具体如下表所示:

0?wx_fmt=jpeg

如果使用单规则算法来判别此女孩是否嫁人,可以参考下表:

0?wx_fmt=jpeg

通过遍历每个变量,发现以职业为判别规则的话,错误率最低,所以职业这个变量就是被挑选出来的最佳规则变量。


2、单规则算法优缺点

优点:

1)可以生成一个单一的、易于理解的、人类可读的经验法则

2)往往表现得出奇的好

3)可作为更复杂算法的一个基准

缺点:

只使用一个最佳规则变量,过于简单


3、R中的实现函数

单规则算法可以使用RWeka包中的OneR()函数加以实现,具体函数格式如下:

OneR(formula, data, subset, na.action,

control = Weka_control(), options = NULL)

formula模型以公式的形式表达,类似于y~x1+x2+x3;

data指定要分析的数据对象;

subset可以选取data数据集中的子集作为训练样本;

na.action缺失值的处理方法,默认将剔除缺失数据的观测;

control可为模型添加附加条件。


二、RIPPER算法

由于单规则算法只是依赖于一个变量作为判别依据,这似乎显得非常单薄,而且还存在两个致命的缺陷,即处理大数据时效率低下;对噪声数据的分类不准确。由此,科学家又发展了该单规则算法,提出重复增量修建算法,即RIPPER算法。该算法可以组合多个变量生成判别规则,而且还可以不断的自我修剪和优化


1、RIPPER算法优缺点

优点:

1)生成易于理解且人类可读的规则

2)能很好的处理大数据集和噪声数据集

3)通常会产生比决策树更简单的规则

缺点:

处理数值型数据不太理想,所以规则算法一般要求数据集以名义变量为主或全是名义变量。


2、R中的实现函数

RIPPER算法仍然需要RWeka软件包,具体可以使用JRip()函数加以实现。该函数的具体语法如下:

JRip(formula, data, subset, na.action,

control = Weka_control(), options = NULL)

参数解释与OneR()函数一致,这里不再赘述。


三、应用--毒蘑菇识别

本文案例数据来源于http://archive.ics.uci.edu/ml/datasets/Mushroom,该数据包含21个离散的解释变量和1个二分类的因变量,总共有8124条记录。


1、单规则算法实现

#下载并加载RWeka软件包

if(!suppressWarnings(require('RWeka'))){

install.packages('RWeka')

require('RWeka')

}

#读取数据

mushrooms <- read.csv(file = file.choose(), header = TRUE,

sep = ',', stringsAsFactors = TRUE)

#查看数据结构

str(mushrooms)

#生成训练数据集和测试数据集

set.seed(1234)

index <- sample(x = 1:2, size = nrow(mushrooms), replace = TRUE, prob = c(0.7,0.3))

train <- mushrooms[index == 1,]

test <- mushrooms[index == 2,]


#构建单规则算法模型

model_oner <- OneR(formula = type ~., data = train)

#查看单规则算法模型的最佳规则变量

model_oner

0?wx_fmt=jpeg
发现变量odor(气味)是最佳规则变量。


#查看单规则模型返回的概览

summary(model_oner)

0?wx_fmt=jpeg
从上图结果看,训练集本身的正确判断率达到98.6%


#对测试集进行预测

pred_oner <- predict(object = model_oner, newdata = test[,-1])

#测试集上的混淆矩阵

Freq_oner <- table(pred_oner, test[,1])

Freq_oner

#预测精度

accuracy_oner <- sum(diag(Freq_oner))/sum(Freq_oner)

accuracy_oner

0?wx_fmt=jpeg
同样,模型在测试集上的准确率也超过了98%。


2、RIPPER算法实现

#构建RIPPER算法模型

model_ripper <- JRip(formula = type ~., data = train)

#查看RIPPER算法的返回规则

model_ripper

0?wx_fmt=jpeg
结果返回共产生8条规则。


#查看RIPPER模型返回的概览

summary(model_ripper)

0?wx_fmt=jpeg
模型在训练集中的准确率几乎为100%,比单规则算法更准确


#对测试集进行预测

pred_ripper <- predict(object = model_ripper, newdata = test[,-1])

#测试集上的混淆矩阵

Freq_ripper <- table(pred_ripper, test[,1])

Freq_ripper

#预测精度

accuracy_ripper <- sum(diag(Freq_ripper))/sum(Freq_ripper)

accuracy_ripper

0?wx_fmt=jpeg

模型同样在测试数据集中也表现的非常好,准确率几乎100%。


数据集和脚本下载

文中的脚本和数据集可以到下方链接下载:

http://yunpan.cn/c3eHMekBhJL2u 访问密码 296f


总结:文章涉及到的R包和函数

read.csv()

sample()

RWeka包

OneR()

JRip()

predict()


参考文献

机器学习与R语言


这篇关于规则学习算法之毒蘑菇识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700093

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.