Example: Identifying Poisonous Mushrooms ----
每年都会有很多人因为摄入有毒的野生蘑菇生病,有时甚至死亡。由于许多蘑菇在外观上彼此都非常相似,所以有时甚至经验丰富的蘑菇采集者都会中毒。
与识别其他有毒的植物(比如有毒的橡树或者有毒的常春藤)不- -样,识别- -种野生蘑菇是否有毒或者是否可以食用并没有明确的规则,如(有毒的常春藤)“三片叶子,不要碰它们( leaves of three ,let them be)"。更加复杂的是,许多传统规则,比如“有毒的蘑菇颜色鲜艳",提供的是危险的或者具有误导性的信息。如果有简单、清晰、一致的规则可用来识别有毒的蘑菇,那么就可以拯救食物采集者的生命。
由于规则学习算法的优势之–就是它们能生成易于理解的规则,所以规则学习算法似乎很适合这种分类任务。然而,规则只有在它们准确时才有用。
Step 1: Exploring and preparing the data ----
mushrooms <- read.csv("F:\\rwork\\Machine Learning with R (2nd Ed.)\\Chapter 05\\mushrooms.csv", stringsAsFactors = TRUE)
str(mushrooms)
#删除了这个变量,因为此变量所有的值都一样
mushrooms$veil_type <- NULL
#examine the class distribution
table(mushrooms$type)
Step 2: Training a model on the data ----
library(RWeka)
#train OneR() on the data
mushroom_1R <- OneR(type ~ ., data = mushrooms)
#得到简单规则判断是否有毒
Step 3: Evaluating model performance ----
mushroom_1R
summary(mushroom_1R)
#输出结果显示,区分了4280种可食用的蘑菇和3796种有毒的蘑菇,但是却将120种有毒的蘑菇划分为可食用,这犯了极其危险的错误。
Step 4: Improving model performance ----
mushroom_JRip <- JRip(type ~ ., data = mushrooms)
mushroom_JRip
summary(mushroom_JRip)
#输出结果发现没有将任何蘑菇分类错