- 实验目的
- 掌握文件的读写
- 掌握R语言数据框操作
- 掌握R语言规则算法的应用
- 实验内容
加载数据集,使用电信数据集mushrooms.csv,使用规则算法识别有毒的蘑菇。 - 解题过程及程序代码
- 程序代码
1.首先设定路径并将数据集导入到工作区间,注意将分类变量强制类型转换成因子类型,通过header将第一行的所有属性设为标题
mydata<-read.csv("mushrooms.csv",stringsAsFactors= TRUE,header= T)
2.使用summary查看数据特征,看看每一列数据的相同数值个数,保证分类变量的个数相近,才可以使用规则算法,否则不准确;
summary(mydata)
可以知道该数据集分为edible(可食的)和poisonous(有毒的),当中发现有一项属性是所有记录都属于该项的
3.使用dim查看变量的维数,并将所有记录都属于某一项的数据赋值为空,即删除这一列。因为所有的因子都一样,并不能决定是否是有毒的,删除后再查看维数可看出少了一列;
mydata$veil_type=NULL
4.需要预测样本的属性结果是type,它有两个属性值分别为edible和poisonous
5.加载caret包,生成训练集train1和测试集test1
6.加载Rweka包,使用包中的变量OneR(),单规则算法;
单规则算法结果:
OneR是生成单一规则的算法。通过计算其他属性,OneR选择单一种规则发生的概率来确定分类,直接把其他属性的值都忽略了。
采用80%的数据作为训练集,最终选择odor规则:
当odor(气味)是almond、anise、none时,判断该蘑菇的type是edible(可食用)的蘑菇;
当odor(气味)是creosote、fishy、foul、musty、pungent、spicy时,判断该蘑菇的type是poisonous(有毒)的蘑菇。
其中,6500条记录中有6402条是通过规则判断正确的。
7.剩余20%作为测试样本集的预测结果:
通过该结果可看出预测结果中的type为edible的准确率达100%,而判断type为poisonous的有761条数据是正确的,有22条数据判断错误,准确率达97.2%
8.使用RIPPER算法(重复增量修剪算法)产生规则;
多规则算法结果:
JRip 即 RIPPER 算法,是规则归纳学习从分类实例出发能够归纳出一般的概念描述。
采用80%的数据作为训练样本集,最终可得共9条规则:
规则1:当odor(气味)为foul时,蘑菇是poisonous(有毒的)。其中有2160条记录,每条记录都是正确的,无错误记录;
规则2:gill_size(菌褶的大小)为narrow(狭窄的)及gill_color(菌褶的颜色)是buff(浅黄色)时,蘑菇是poisonous(有毒的)。其中有1152条记录,无错误记录;
规则3:gill_size(菌褶的大小)为narrow(狭窄的)及odor(气味)是pungent(辛辣的)时,蘑菇是poisonous(有毒的)。其中有256条记录无错误记录;
规则4:odor(气味)是creosote(碳酸)时,蘑菇是poisonous(有毒的)。其中有192条记录,无错误记录;
规则5:spore_print_color(孢子颜色)是green时,蘑菇是poisonous(有毒的)。其中有72条记录,无错误记录;
规则6:stalk_surface_below_ring(茎的下表面)是scaly(粗糙)和stalk_surface_above_ring(茎的上表面)是silky(光滑)时,蘑菇是poisonous(有毒的)。其中有68条记录,无错误记录;
规则7:habitat(产地)是leaves(树叶)和cap_color(蘑菇帽颜色)是white时,蘑菇是poisonous(有毒的)。其中有8条记录,无错误记录;
规则8:stalk_color_above_ring(上茎颜色)是yellow时,蘑菇是poisonous(有毒的)。其中有8条记录,无错误记录;
规则9:其余的均为edible(可食用)的蘑菇。其中有4208条记录,无错误记录。
9.剩余20%作为测试样本集的预测结果:
通过该结果可看出预测结果中的type为edible有841条数据和poisonous有783条数据,准确率达100%。