白白手拉手-手拉手白癜风论坛

 找回密码
 注册新成员
搜索

12
返回列表 发新帖
楼主: cloudtone

[生活闲谈] 开始学习

[复制链接]

284

主题

1735

帖子

3万

积分

博士生

 楼主| 发表于 2017-4-17 13:47:59 | 显示全部楼层
使用k-NN算法 诊断乳腺癌
Step 1- collecting data---收集数据
>wbcd<-read.csv("wisc_bc_data.csv");


step 2 - exploring and preparing the data--观察数据特征
>str(wbcd)
输出:图1
包含569个样本数据 每个样本数据有32个特征
第一个特征是ID  该特征主要是用来标识每个独一无二的样本个体 对于我们的分析没有任何实际意义 因此需要将它剔除
>wbcd<-wbcd[-1]
第二个特征是diagnosis 这个代表该样本是良性还是恶性的 这个是我们需要预测的
>table(wbcd$diagnosis)
B    M
357 212
很多的R机器学习算法 要求目标特征是因子类型。因此我们需要将diagnosis这个特征转换成因子类型
>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


Transformation---- normalizing numeric data 数据的规范化
有些特征值的数据 取值范围相差太大  这对于距离计算时 是不利的  最终可能导致我们分类器的不准确

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


>wbcd_n<-as.data.frame(lapply(wbcd[2:31], normalize))
这样就将第2到31列的所有特征的取值范围 都固定在0到1之间

Data preparation - creating training and test datasets 创建训练和测试集
>wbcd_train<-wbcd_n[1:469,]
>wbcd_test<-wbcd_n[470:569,]
>wbcd_train_labels<-wbcd[1:469,1]
>wbcd_test_labels<-wbcd[470:569,1]


Step 3 - training a model on data  通过数据集训练出一个模型
>wbcd_test_pred<-knn(train=wbcd_train, test=wbcd_test, cl=wbcd_train_labels, k=21)


Step 4 - evaluting model performance   模型评估
>CrossTable(x=wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)
输出见图2:
通过图2可以看出 正确率为98%
误将良性诊断为恶性  0%
误将恶性诊断为良性  2%

Step 5 - improving model performance 模型改进
主要从2个方面:
1)使用其他的数据规范化函数
2)尝试使k取不同的值




图1

图1

图2

图2
过去事已过去了,未来不必预思量。只今只道只今句,梅子熟时栀子香
如果您认可本论坛,欢迎告诉身边的病友,让更多的朋友来到这里,你+我=手拉手!

284

主题

1735

帖子

3万

积分

博士生

 楼主| 发表于 2017-4-17 14:26:40 | 显示全部楼层
Chapter 4 Probabilistic Leaning--Classification Using Naive Bayes(使用朴素贝叶斯分类)朴素贝叶斯一个假设就是事件之间是相互独立的。公式如图1:
图中P(A|B)表示 事件B发生的条件下A发生的概率。也就是所谓的条件概率。因为假设事件是独立的。A发生是独立于B发生,根据贝叶斯公式要计算P(A|B)。就需要计算P(A∩B)(A和B同时发生的概率)


将公司转换成图2形式:


朴素贝叶斯算法的优缺点 见图3

图1

图1

图2

图2

图3

图3
过去事已过去了,未来不必预思量。只今只道只今句,梅子熟时栀子香

284

主题

1735

帖子

3万

积分

博士生

 楼主| 发表于 2017-4-17 16:26:02 | 显示全部楼层
Example - filtering mobile phone spam with the Naive Bayes algorithm使用朴素贝叶斯分类垃圾信息
Step 1 - collecting data 收集数据
>sms_raw<- read.csv("sms_spam.csv", stringAsFactors=FALSE)


Step 2 - exploring and preparing the data 考察数据
>str(sms_raw)
输出见过:图1
将目标特征转换成 因子类型
>sms_raw$type<- factor(sms_raw$type)
>str(sms_raw$type)
Factor w/ 2 levels "ham", "spam":1 1 1 2 2 1 1 1 2 1.....
>table(sms_raw$type)
ham   spam
4812  747

Data preparation- cleaning and standardizing text data 对文本数据进行清洗和规范化
>sms_corpus<- VCorpus(VectorSource(sms_raw$text))
使用text mining(tm包)创建一个文本集

1)将文本集中全部转换为小写
>sms_corpus_clean<- tm_map(sms_corpus, content_transformer(tolower))

2) 去除数字
>sms_corpus_clean<- tm_map(sms_corpus_clean, removeNumbers)

3) 去除停词
>sms_corpus_clean<- tm_map(sms_corpus_clean, removeWords, stopwords())

4) 去除标点符号
>sms_corpus_clean<- tm_map(sms_corpus_clean, removePunctuation)

5)去除一些变形形式如learning  learn learned learns 都是learn的变形形式
>sms_corpus_clean<- tm_map(sms_corpus_clean, stemDocument)

6)去除空格
>sms_corpus_clean<- tm_map(sms_corpus_clean, stripWhitespace)


Data preparation - splitting text documents into words将文本转换成单词矩阵

>sms_dtm<- DocumentTermMatrix(sms_corpus_clean)
如果 你之前没有对其中的文本做上面一系列的处理 可以使用以下方式转换成单词矩阵 效果是一样的
>sms_dtm<- DocumentTermMatrix(sms_corpus, control = list(tolower = TRUE, removeNumbers = TRUE, stopwords = TRUE, removePunctuation = TRUE, steming = TRUE))

Data preparation - creating training and test datasets创建训练集和测试集
>sms_dtm_train<- sms_dtm[1:4169,]
>sms_dtm_test<_ sms_dtm[4170:5559,]
>sms_train_labels<- sms_raw[1:4169,]$type
>sms_test_labels<- sms_raw[4170:5559,]$type

Visualizing text data - word clouds文本虚拟化-单词云
>wordcloud(sms_corpus_clean, min.freq = 50, random.order = FALSE)
输出如图2
也可以分别将不同分类的文本集虚拟化
>spam<- subset(sms_raw, type == "spam")
>ham<- subset(sms_raw, type == "ham")


>wordcloud(spam$text, max.words = 40, scale = c(3, 0.5))
>wordcloud(ham$text, max.words = 40,scale = c(3, 0.5))
输出分别为图3     图4




Data preparation - creating indicator features for frequent words 使用出现频率最高的单词作为分类的特征
>sms_freq_words<- findFreqTerms(sms_dtm_train, 5)
>sms_dtm_freq_train<- sms_dtm_train[, sms_freq_words]
>sms_dtm_freq_test<- sms_dtm_test[, sms_freq_words]
>convert_count<- function(x){
   x<- ifelse(x > 0, "Yes", "No")
}
>sms_train<- apply(sms_dtm_freq_train, MARGIN = 2, convert_counts)
>sms_test<- apply(sms_dtm_freq_test, MARGIN = 2, convert_counts)

Step 3 - training a model on the data训练模型
>sms_classifier<- naiveBayes(sms_train, sms_train_labels)


Step 4 - evaluting model performance 模型评估
>sms_test_pred<- predict(sms_classfifier, sms_test)
>CrossTable(sms_test_pred, sms_test_labels, prop.,chisq = FALSE, prop.t = FALSE, prop.r = FALSE, dnn = c('predict', 'actual'))


输出图5

从图中可以看出6+30 = 36条是分类错误的 总的样本是1390条。错误率为2.6%。其中6条正常信息 被划分为垃圾信息  30条垃圾信息被划分为正常信息.


Step 5 - improving model performance 模型改进

图1

图1

图2

图2

图3

图3

图4

图4

图5

图5
过去事已过去了,未来不必预思量。只今只道只今句,梅子熟时栀子香
您需要登录后才可以回帖 登录 | 注册新成员

本版积分规则

声明:本站是白癜风患者交流平台,旨在为广大白癜风患者创造良好的交流环境,欢迎更多白癜风患者朋友们加入,本站不对任何网友评论负责!

本站所有信息仅供参考,未经许可严禁拷贝转载,否则我们将追究相关法律责任!

拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

白白手拉手法律顾问:河北高俊霞律师事务所 潘双喜律师

信息产业部备案号:苏ICP备20000142号-3

管理员QQ:1013342662 ;E-mail : vbbsls@126.com !

Archiver|手机版|小黑屋|白白手拉手

GMT+8, 2025-1-15 17:38

快速回复 返回顶部 返回列表