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

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

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯: