我不知道函数结果的预测结果是什么

问题描述 投票:-1回答:1

介绍

在我的学校,我必须参加挑战,看看我是否已经理解了R中文本挖掘的工作方式。

为此,我们有1050个不同类型的文件(购物,家庭,帐户等)。

本练习的目标是开发一个脚本,用于查找带有分类器的HTML页面的类型,时间和精度非常重要。

我和我的团队用来开始一个kppv分类器,但我们有40%的错误。所以我们必须决定使用分类器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

script for the recup of text

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")

结果

当我们想要时,只放一个文件,他输出一个带有值的单词列表(这是一个类)。

此输出可能很有用,但我们不知道如何。

我们想知道如何使用此输出。

The output

accessori   "5" 
account     "1" 
ahead       "1" 
airport     "4" 
also        "1" 
amp         "1" 
anyon       "1" 
appl        "7" 
around      "1" 
audio       "1" 
australia   "1" 
avail       "1" 
...
r tm rscript
1个回答
0
投票

经过几次研究,我了解到预测函数必须采用单词矩阵而不是单词。

所以我把它放在我的脚本中:

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并返回一个值,该值是我在SVM模型中发送的文件的类。

© www.soinside.com 2019 - 2024. All rights reserved.