书中的第二个例子是利用朴素贝叶斯算法判断垃圾短信。
首先载入需要用到的包:
library(tidyverse) # 清洗数据
library(here) # 设置数据文件路径
library(tidytext) # 分词及创建稀疏矩阵
library(e1071) # 建模
library(gmodels) # 评估模型
在清洗数据的时候遇到一定的困难,因为书中是用tm包进行文本处理的,而我完全没有用过这个包(甚至也没有装这个包),所以看书中的代码就只能凭感觉脑补了。不过,还好,最后还是成功写出了tidyverse化的数据清洗代码,如下:
sms <- read_csv(here('content', 'post', 'data', '02-sms_spam.csv')) %>% mutate(type = factor(type),
row = row_number()) %>% unnest_tokens(word, text) %>% anti_join(stop_words) %>% filter(!str_detect(word, '\\d')) %>% cast_sparse(row, word) %>% as.matrix() %>% as_tibble() %>% select(which(colSums(.) > 4)) %>% bind_cols(read_csv(here('data', '02-sms_spam.csv')) %>% mutate(type = factor(type),
row = row_number()) %>% unnest_tokens(word, text) %>% anti_join(stop_words) %>% filter(!str_detect(word, '\\d')) %>%
select(-3) %>% distinct()) %>% mutate_if(is.
通过将《机器学习与R语言》一书中的代码tidyverse化,来学习这本书。
书中第一个例子是利用kNN算法来诊断乳腺癌。
首先载入需要用到的包:
library(tidyverse) # 清洗数据
library(here) # 设置数据文件路径
library(knitr) # 呈现更好看的表格
library(kableExtra) # 同上
library(class) # 使用包中的knn()函数
library(gmodels) # 使用包中的CrossTable()函数
然后导入数据并清洗:
wbcd <- read_csv(here('content', 'post', 'data', '01-wisc_bc_data.csv')) %>% select(-id) %>% mutate(diagnosis = factor(diagnosis, levels = c('B', 'M'),
labels = c('Benign', 'Malignant'))) %>% mutate_if(is.numeric, ~ (.x - min(.x)) / (max(.x) - min(.x)))
首先使用here函数找到数据文件的路径,然后使用read_csv函数将其读入R中;随后通过select函数将id变量去掉;然后利用mutate函数将diagnosis变量改为因子型;最后利用mutate_if函数,将所有数值型的变量进行min-max标准化,这里用到了公式化的匿名函数,可以使代码更为简练。此时的数据是这样的:
wbcd %>% head() %>% kable() %>% kable_styling(bootstrap_options = "striped", font_size = 12) %>%
scroll_box(width = "100%")
diagnosis
radius_mean
texture_mean
perimeter_mean
area_mean
smoothness_mean
compactness_mean
concavity_mean
concave points_mean
symmetry_mean
fractal_dimension_mean
radius_se
texture_se
perimeter_se
area_se
smoothness_se
compactness_se
concavity_se
concave points_se
symmetry_se
fractal_dimension_se
radius_worst
texture_worst
perimeter_worst
area_worst
smoothness_worst
compactness_worst
concavity_worst
concave points_worst
symmetry_worst
fractal_dimension_worst
Malignant
0.