教材就是传说中的机器学习和R语言--中文版,大家可以去图书馆借来看看~~~,例子都是来自书上的

首先介绍一下KNN算法,KNN还好吧,说白了就是一个算距离的公式然后以统计的方式呈现出来,以二维平面为例,平面内已知n个区域,每个区域里面有m(n)个点,现在求一个不在n区域内的点与哪一个区域最近,额,为了“恰当”,考虑较远的点的影响会覆盖较近点的影响和没有意义的重复计算,只取k(k<n)个较近点参与计算,这就是这个方法的原理了,简单粗暴~~问题还有就是在数据很大的时候怎么选取K值,书上说的是取sqrt(n),暂且略。

数据集请搜索wisc_bc_data.csv,github上面有这本书的全部数据集,以后有空的话我考虑一下放在百度云盘上面。

(1)KNN算法诊断乳腺癌:

读取数据集(不转化为因子,因子是什么我还不知道-.-求指教)

> wbcd <- read.csv("wisc_bc_data.csv",stringsAsFactors = FALSE)

去除第一列,剩余的是自变量

> wbcd <- wbcd[-1]

把诊断结果转化成因子,并且添加标签

> wbcd$diagnosis <- factor(wbcd$diagnosis,levels = c("B","M"),labels =c("Benign","Malignant"))

查看概率

>round(prop.table(table(wbcd$diagnosis))*100,digits = 1)

Benign Malignant
     62.7      37.3

书中说的min-max标准化,简单易懂,目的就是让各列大大小小不同的数据都变成同一个区间的保持比例的数据

> normalize <- function(x){
+ return((x - min(x))/(max(x)- min(x)))
+ }

lapply函数,对所有的列进行同样的操作,欢迎比较sapply

> wbcd_n <- as.data.frame(lapply(wbcd[2:31],normalize))

训练数据集

> wb_t <- wbcd_n[1:500,]

测试数据集

> wb_e <- wbcd_n[501:569,]

这两个是对应上面两个的,诊断结果,马上要对他们开刀了的

> wb_t_labels <- wbcd[1:500,1]

> wb_e_labels <- wbcd[501:569,1]

安装class包(里面有knn)

这个式子返回的值是预测的wb_e的label,参数大概能看懂吧,不懂就留言吧

wpre <- knn(train = wb_t,test = wb_e,cl = wb_t_labels,k = 21)

使用gmodels包来查看预测详细结果

(2)朴素贝叶斯算法

原理我不说啦,反正我只知道一个大概,概率论这种东西下学期才学,所以我不急~~~有需要的自行XX

发现代码不见了。。。扔个别个的链接http://www.cnblogs.com/tychyg/p/5345221.html

直接上结果

以后记得保存代码。。。Rstudio真可怕,R占内存也很可怕

嗯。。。代码找回来了,Rstudio还不熟。。。

先粘贴上,晚点再来注释了

sms <- read.csv("F:/R语言/R ML/data/sms_spam1.csv",stringsAsFactors = FALSE)
#factor
sms$type <- factor(sms$type)
library(NLP)
library(tm)
library(RColorBrewer)
library(wordcloud)
library(e1071)
library(gmodels)
sms_corpus <- Corpus(VectorSource(sms$text))
corpus_clean <- tm_map(sms_corpus,tolower)
corpus_clean <- tm_map(corpus_clean,removeNumbers)
corpus_clean <- tm_map(corpus_clean,removeWords,stopwords())
corpus_clean <- tm_map(corpus_clean,removePunctuation)
corpus_clean <- tm_map(corpus_clean,stripWhitespace)
corpus_clean <- tm_map(corpus_clean,PlainTextDocument)
sms_tmq <- DocumentTermMatrix(corpus_clean,control = list())
sms_train <- sms[1:4500,]
sms_test <- sms[4501:5571,]
sms_train_d <- sms_tmq[1:4500,]
sms_test_d <- sms_tmq[4501:5571,]
sms_cor_train <- corpus_clean[1:4500]
sms_cor_test <- corpus_clean[4501:5571]
prop.table(table(sms_train$type))
prop.table(table(sms_test$type))
wordcloud(sms_cor_train,min.freq = 40,scale = c(4,.5),colors = "orange",random.order = FALSE)
spam <- subset(sms_train,type == "spam")
ham <- subset(sms_train,type == "ham")
wordcloud(spam$text,min.freq = 40,scale = c(4,.5),colors = "orange",random.order = FALSE)
wordcloud(ham$text,min.freq = 40,scale = c(4,.5),colors = "orange",random.order = FALSE)
sms_dict <- matrix(findFreqTerms(sms_train_d,5))
sms_T <- DocumentTermMatrix(sms_cor_train,list(sms_dict))
sms_Te <- DocumentTermMatrix(sms_cor_test,list(sms_dict))
conver_counts <- function(x){x <-ifelse(x > 0,1,0);x <- factor(x,levels = c(0,1),labels = c("yes","no"))}
sms_T <- apply(sms_T,MARGIN = 2,conver_counts)
sms_Te <- apply(sms_Te,MARGIN = 2,conver_counts)
sms_classfier <- naiveBayes(sms_T,sms_train$type)
sms_prep <- predict(sms_classfier,sms_Te)
CrossTable(sms_prep,sms_test$type,prop.chisq = FALSE,prop.t = FALSE,dnn = c("predicted","actual"))

再加一段,然后复习马克思了。。。。

library(C50)

library(gmodels)

library(RWeka)

credit <- read.csv("F:/R语言/R ML/data/credit.csv")

str(credit)

table(credit$credit_history)

table(credit$amount)

summary(credit$savings_balance)

table(credit$default)

set.seed(2354)

credit_Num <- credit[order(runif(1000)),]

#创建训练数据集和测试数据

credit_train <- credit_Num[1:900,]

credit_test <- credit_Num[901:1000,]

prop.table(table(credit_train$default))

prop.table(table(credit_test$default))

credit_model <- C5.0(credit_train[-17],as.factor(credit_train$default))

credit_model p <- predict(credit_model,credit_test)

CrossTable(credit_test$default,p,prop.chisq = FALSE,prop.c = FALSE,prop.r = FALSE,dnn = c('actual default','predict default'))

credit_boost <- C5.0(credit_train[-17],as.factor(credit_train$default),trials = 10)

pb <- predict(credit_boost,credit_test)

CrossTable(credit_test$default,pb,prop.chisq = FALSE,prop.c = FALSE,prop.r = FALSE,dnn = c('actual default','predict default'))

summary(pb)

summary(credit_boost)

#mashroom test

mushroom <- read.csv("F:/R语言/R ML/data/mushrooms.csv",stringsAsFactors = TRUE)

mushroom$veil_type

mushroom$veil_type <- NULL

mush_pre <- OneR(type~.,mushroom)

summary(mush_pre)

mush_pre

mush_jip <- JRip(type~.,mushroom)

mush_jip summary(mush_jip)

#导入数据

insurance library(psych)

insurance <- read.csv("F:/R语言/R ML/data/insurance.csv",stringsAsFactors = TRUE)

str(insurance)

table(insurance$children)

cor(insurance[c("age","bmi","children","charges")])

pairs.panels(insurance[c("age2","bmi2","children","charges")])

lm_model <- lm(charges~.,data = insurance)

summary(lm_model)

insurance$age2 <- insurance$age ^ 2

insurance$bmi2 <- insurance$bmi ^ 2

lm_model2 <- lm(charges~.,data = insurance)

summary(lm_model2)

insurance$bmi30 <- ifelse(insurance$bmi >= 30,1,0)

ins_model <- lm(charges ~ age + age2 + children + bmi + sex + bmi*smoker + region, data = insurance)

summary(ins_model)

#grape wine

library(rpart.plot)

library(rpart)

library(RWeka)

wine <- read.csv("F:/R语言/R ML/data/whitewines.csv")

str(wine)

hist(wine$quality)

hist(wine$pH)

hist(wine$citric.acid)

hist(wine$fixed.acidity)

wineTest <- wine[4001:4898,]

wineTrain <- wine[1:4000,]

table(wineTrain$quality == 5)

lmt_model <- rpart(quality ~ .,data = wineTrain)

y <- predict(lmt_model,wineTest)

y

lmt_model

pans <- predict(lmt_model,wineTest)

rpart.plot(lmt_model,digits = 3,fallen.leaves = TRUE,type = 3,extra = 101)

summary(pans)

wine_m <- M5P(quality ~., data = wineTrain)

R 语言机器学习同步推进~的更多相关文章

  1. R语言︱机器学习模型评估方案(以随机森林算法为例)

    笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...

  2. R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错

    笔者寄语:机器学习中交叉验证的方式是主要的模型评价方法,交叉验证中用到了哪些指标呢? 交叉验证将数据分为训练数据集.测试数据集,然后通过训练数据集进行训练,通过测试数据集进行测试,验证集进行验证. 模 ...

  3. 基于R语言的梯度推进算法介绍

    通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法.通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Bo ...

  4. R语言机器学习之caret包运用

    在大数据如火如荼的时候,机器学习无疑成为了炙手可热的工具,机器学习是计算机科学和统计学的交叉学科, 旨在通过收集和分析数据的基础上,建立一系列的算法,模型对实际问题进行预测或分类. R语言无疑为我们提 ...

  5. R语言进行机器学习方法及实例(一)

    版权声明:本文为博主原创文章,转载请注明出处   机器学习的研究领域是发明计算机算法,把数据转变为智能行为.机器学习和数据挖掘的区别可能是机器学习侧重于执行一个已知的任务,而数据发掘是在大数据中寻找有 ...

  6. R语言︱情感分析—基于监督算法R语言实现(二)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:本文大多内容来自未出版的<数据 ...

  7. R语言︱ROC曲线——分类器的性能表现评价

    笔者寄语:分类器算法最后都会有一个预测精度,而预测精度都会写一个混淆矩阵,所有的训练数据都会落入这个矩阵中,而对角线上的数字代表了预测正确的数目,即True Positive+True Nagetiv ...

  8. R语言(自定义函数、循环语句、管道函数)

    学习R语言半年多了,以前比较注重统计方法上的学习,但是最近感觉一些基础知识也很重要.去年的参考资料是<R语言实战>,今年主要是看视频.推荐网易云课堂里的教程,很多资料都是很良心的~ 目前学 ...

  9. R语言中文社区历史文章整理(类型篇)

    R语言中文社区历史文章整理(类型篇)   R包: R语言交互式绘制杭州市地图:leafletCN包简介 clickpaste包介绍 igraph包快速上手 jiebaR,从入门到喜欢 Catterpl ...

随机推荐

  1. exel中合并一列相同的数据到一行

    Sub 按钮1_Click() Application.ScreenUpdating = False arr = Range("a1:c" & [a65536].End(x ...

  2. 读《编写可维护的JavaScript》第11章总结

    这周也是拿到了同程的offer,从此走上了前端之路!感谢我的贵人们.再次纪念一下~! 第11章 不是你的对象不要动 11.1 什么是你的 你的对象:当你的代码创建了这些对象或者你有职责维护其他人的代码 ...

  3. Javascript学习笔记:闭包题解(4)

    代码: var val1=0; var val2=0; var val3=0; for(var i1=1;i1<=3;i1++){ var i2=i1; (function(){ var i3= ...

  4. stopPropagation, preventDefault 和 return false 的区别

    因为有父, 子节点同在, 因为有监听事件和浏览器默认动作之分. 使用 JavaScript 时为了达到预期效果经常需要阻止事件和动作执行. 一般我们会用到三种方法, 分别是 stopPropagati ...

  5. 关于java序列化中的一个细节

    java序列化机制的可以参考很多资料了,最近在看的时候发现了一些问题. 1. 默认的序列化机制,很多书里讲到序列化类只序列化类名,实例变量,不会实例化类变量(static)和瞬态变量(transien ...

  6. Unity学习笔记

    『 知识点』 [射线] 射线检测碰撞 『游戏实战』 个例 [E]<愤怒的小鸟> 资源 免费Unity基础教程(中文电子书) [E] noobtus(Unity游戏教程)

  7. 模拟微信上传图片(带预览,支持预览gif)

    一.Html <style type="text/css"> #previewDiv{width:50px;height:50px;overflow:hidden;po ...

  8. javascript实现登录验证码

    1.js var code="" ; //在全局 定义验证码 function createCode(){ code = ""; ;//验证码的长度 var c ...

  9. sqlite字段属性删除方法

    Sqlite 不支持直接修改字段的名称. 我们可以使用别的方法来实现修改字段名. 1.修改原表的名称 ALTER TABLE table RENAME TO tableOld; 2.新建修改字段后的表 ...

  10. 关于android的@TargetApi和@SuppressLint("NewApi")

    看别人的代码好多地方用到了@TargetApi.以前一直不知道这个是什么意思.后面偶然看了下sdk.才有所明白. 其实这个东西就是在你使用了android Lint检查工具的时候,为了防止代码出现提示 ...