Я не знаю, что делать с результатом функции predict

#r #tm #rscript

#r #tm #rscript

Вопрос:

Введение

В моей школе я должен участвовать в конкурсе, чтобы посмотреть, понимаю ли я, как работает интеллектуальный анализ текста в R.

Для этого у нас есть 1050 файлов разного типа (покупки, домашний, учетная запись и т.д.).

Целью этого упражнения является разработка скрипта для определения типа HTML-страницы с помощью классификатора, время и точность очень важны.

Мы с моей командой используем для begin классификатор 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
  

скрипт для восстановления текста

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

Результат

Когда мы хотим поместить только один файл, он выводит список word со значением (которое является классом).

Этот вывод может быть полезен, но мы не знаем как.

Мы хотим знать, как использовать этот вывод.

Вывод

 accessori   "5" 
account     "1" 
ahead       "1" 
airport     "4" 
also        "1" 
amp         "1" 
anyon       "1" 
appl        "7" 
around      "1" 
audio       "1" 
australia   "1" 
avail       "1" 
...
  

Комментарии:

1. Вы ищете code review? Тогда место, где нужно спросить, находится на CodeReview . В противном случае неясно, о чем вы спрашиваете.

2. На самом деле это не так, я просто хочу знать, что делать с результатом этого кода. Но я собираюсь отредактировать этот вопрос, чтобы прояснить ситуацию.

Ответ №1:

После нескольких исследований я узнал, что функция predicts должна принимать матрицу word и только word.

Итак, я только что поместил это в свой скрипт:

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

Которая преобразует мой вектор в матрицу, удаляет файлы NA и возвращает значение, которое является классом моего файла, отправленного в модели SVM.