我不知道函数预测的结果是什么
I don't know what make of the result of the function predict
简介
在我的学校,我必须参加一个挑战,看看我是否了解 R 中文本挖掘的工作原理。
为此,我们有 1050 个不同类型的文件(购物、家庭、帐户等)。
本练习的目标是开发一个脚本,用于使用 classifier 查找 HTML 页面的类型,时间和精度非常重要。
我和我的团队开始使用 kppv classifier,但我们有 40% 的错误。所以我们必须决定使用 classifier SVM !
研究
有了几个文档,我们必须耐心地创建一个脚本来创建包含所有文档的 SVM 模型。
当我们想查看放入模型的文件是否被识别时,它就起作用了。
但是当我们想要放置一个 html 页面时,输出改变了,我们不知道用它做什么。
代码
main.r
library("e1071")
library("tm")
splash=function(x){
res=NULL
for (i in x) res=paste(res, i)
res
}
#Suppression des script s(<script .... </script>)
removeScript=function(t){
sp=strsplit(t, "<script")
vec=sapply(sp[[1]], gsub, pattern=".*</script>", replace=" ")
PlainTextDocument(splash(vec))
}
#Suppression de toutes les balises
removeBalises=function(x){
t1=gsub("<[^>]*>", " ", x)
PlainTextDocument(gsub("[ \t]+"," ",t1))
}
clean_corpus = function(corp)
{
corp<-tm_map(corp,content_transformer(tolower))
corp<-tm_map(corp,content_transformer(splash))
corp<-tm_map(corp,content_transformer(removeScript))
corp<-tm_map(corp,content_transformer(removeBalises))
corp<-tm_map(corp,removeNumbers)
corp<-tm_map(corp,removeWords,words=stopwords('en'))
corp<-tm_map(corp,stemDocument)
corp<-tm_map(corp,removePunctuation)
corp
}
training_set = readRDS(file = "training_set.rds")
term20 = readRDS(file = "term20.rds")
classes = c(rep(1,150), rep(2,150), rep(3,150), rep(4,150), rep(5,150), rep(6,150), rep(7,150))
model <-svm(x=training_set[,ncol(training_set)],y=classes,type='C',kernel='linear', cost=1, gamma=1)
summary(model)
pred = predict(model, classes)
pred
testingFile = function()
{
src = DirSource("testing")
corp = VCorpus(src)
clean_corpus(corp);
}
testCorpus = testingFile()
testCorpus
testdtm = DocumentTermMatrix(testCorpus, control=list(weighting=weightTf))
testmat = as.matrix(testdtm)
testpreds = sapply(1, function(i)
{
v = testmat[i, ][term20]
#v[is.na(v)] = 0
predict(model, v)
})
testpreds
恢复文本的脚本
library("tm")
library("magrittr")
library("SnowballC")
library("nnet")
acc<-VCorpus(DirSource("training2016/", recursive=TRUE))
#acc<-VCorpus(DirSource("trainingLight/", recursive=TRUE))
[...]
dtm = DocumentTermMatrix(clean_corpus(acc))
dtm
term20 = findFreqTerms(dtm, lowfreq = 20)
freqs = sapply(1:50, function(i) length(findFreqTerms(dtm, lowfreq = i)))
plot(freqs)
dtm20 = dtm[, term20]
dim(dtm20)
m = as.matrix(dtm20)
classes = c(rep(1,150), rep(2,150), rep(3,150), rep(4,150), rep(5,150), rep(6,150), rep(7,150))
#classes = c(rep(1,150), rep(2,150), rep(3,150))
training_set = cbind(m, classes)
saveRDS(training_set, file = "training_set.rds")
saveRDS(term20, file = "term20.rds")
结果
当我们想要的时候,放一个唯一的文件,他输出一个带有值的单词列表(也就是class)。
此输出可能有用,但我们不知道如何使用。
我们想知道如何使用这个输出。
输出
accessori "5"
account "1"
ahead "1"
airport "4"
also "1"
amp "1"
anyon "1"
appl "7"
around "1"
audio "1"
australia "1"
avail "1"
...
经过多次研究,我了解到预测函数必须采用单词矩阵,而且只能采用单词矩阵。
所以我刚刚把它放在我的脚本中:
v = testmat[1, ][term20]
names(v) = term20
v[is.na(v)] = 0
mat = matrix(v,nrow=1)
pred = predict(model, mat)
tableau = table(pred)
names(tableau)[[which.max(tableau)]]
这将在矩阵中转换我的向量并删除 les NA 和 return 一个值,该值是我在 SVM 模型中发送的文件的 class。
简介
在我的学校,我必须参加一个挑战,看看我是否了解 R 中文本挖掘的工作原理。
为此,我们有 1050 个不同类型的文件(购物、家庭、帐户等)。
本练习的目标是开发一个脚本,用于使用 classifier 查找 HTML 页面的类型,时间和精度非常重要。
我和我的团队开始使用 kppv classifier,但我们有 40% 的错误。所以我们必须决定使用 classifier SVM !
研究
有了几个文档,我们必须耐心地创建一个脚本来创建包含所有文档的 SVM 模型。 当我们想查看放入模型的文件是否被识别时,它就起作用了。
但是当我们想要放置一个 html 页面时,输出改变了,我们不知道用它做什么。
代码
main.r
library("e1071")
library("tm")
splash=function(x){
res=NULL
for (i in x) res=paste(res, i)
res
}
#Suppression des script s(<script .... </script>)
removeScript=function(t){
sp=strsplit(t, "<script")
vec=sapply(sp[[1]], gsub, pattern=".*</script>", replace=" ")
PlainTextDocument(splash(vec))
}
#Suppression de toutes les balises
removeBalises=function(x){
t1=gsub("<[^>]*>", " ", x)
PlainTextDocument(gsub("[ \t]+"," ",t1))
}
clean_corpus = function(corp)
{
corp<-tm_map(corp,content_transformer(tolower))
corp<-tm_map(corp,content_transformer(splash))
corp<-tm_map(corp,content_transformer(removeScript))
corp<-tm_map(corp,content_transformer(removeBalises))
corp<-tm_map(corp,removeNumbers)
corp<-tm_map(corp,removeWords,words=stopwords('en'))
corp<-tm_map(corp,stemDocument)
corp<-tm_map(corp,removePunctuation)
corp
}
training_set = readRDS(file = "training_set.rds")
term20 = readRDS(file = "term20.rds")
classes = c(rep(1,150), rep(2,150), rep(3,150), rep(4,150), rep(5,150), rep(6,150), rep(7,150))
model <-svm(x=training_set[,ncol(training_set)],y=classes,type='C',kernel='linear', cost=1, gamma=1)
summary(model)
pred = predict(model, classes)
pred
testingFile = function()
{
src = DirSource("testing")
corp = VCorpus(src)
clean_corpus(corp);
}
testCorpus = testingFile()
testCorpus
testdtm = DocumentTermMatrix(testCorpus, control=list(weighting=weightTf))
testmat = as.matrix(testdtm)
testpreds = sapply(1, function(i)
{
v = testmat[i, ][term20]
#v[is.na(v)] = 0
predict(model, v)
})
testpreds
恢复文本的脚本
library("tm")
library("magrittr")
library("SnowballC")
library("nnet")
acc<-VCorpus(DirSource("training2016/", recursive=TRUE))
#acc<-VCorpus(DirSource("trainingLight/", recursive=TRUE))
[...]
dtm = DocumentTermMatrix(clean_corpus(acc))
dtm
term20 = findFreqTerms(dtm, lowfreq = 20)
freqs = sapply(1:50, function(i) length(findFreqTerms(dtm, lowfreq = i)))
plot(freqs)
dtm20 = dtm[, term20]
dim(dtm20)
m = as.matrix(dtm20)
classes = c(rep(1,150), rep(2,150), rep(3,150), rep(4,150), rep(5,150), rep(6,150), rep(7,150))
#classes = c(rep(1,150), rep(2,150), rep(3,150))
training_set = cbind(m, classes)
saveRDS(training_set, file = "training_set.rds")
saveRDS(term20, file = "term20.rds")
结果
当我们想要的时候,放一个唯一的文件,他输出一个带有值的单词列表(也就是class)。
此输出可能有用,但我们不知道如何使用。
我们想知道如何使用这个输出。
输出
accessori "5"
account "1"
ahead "1"
airport "4"
also "1"
amp "1"
anyon "1"
appl "7"
around "1"
audio "1"
australia "1"
avail "1"
...
经过多次研究,我了解到预测函数必须采用单词矩阵,而且只能采用单词矩阵。
所以我刚刚把它放在我的脚本中:
v = testmat[1, ][term20]
names(v) = term20
v[is.na(v)] = 0
mat = matrix(v,nrow=1)
pred = predict(model, mat)
tableau = table(pred)
names(tableau)[[which.max(tableau)]]
这将在矩阵中转换我的向量并删除 les NA 和 return 一个值,该值是我在 SVM 模型中发送的文件的 class。