Ich wollte Klasse von neuem Dokument mit historischen Daten von Text „description“ und „Klasse“Klassifizierungsalgorithmus für Text R mit
Below Skript zur Vorhersage Ich verwende, aber für neues Dokument, das ich vorhersage möchte ich bin Keine bessere Genauigkeit, kann mir jemand helfen, zu wissen, welcher Algorithmus verwendet werden kann, um die Genauigkeit zu erhöhen. Bitte um Rat.
library(plyr)
library(tm)
library(e1071)
setwd("C:/Data")
past <- read.csv("Past - Copy.csv",header=T,na.strings=c(""))
future <- read.csv("Future - Copy.csv",header=T,na.strings=c(""))
training <- rbind.fill(past,future)
Res_Desc_Train <- subset(training,select=c("Class","Description"))
##Step 1 : Create Document Matrix of ticket Descriptions available past data
docs <- Corpus(VectorSource(Res_Desc_Train$Description))
docs <-tm_map(docs,content_transformer(tolower))
#remove potentially problematic symbols
toSpace <- content_transformer(function(x, pattern) { return (gsub(pattern, " ", x))})
removeSpecialChars <- function(x) gsub("[^a-zA-Z0-9 ]","",x)
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removePunctuation)
docs <- tm_map(docs, stripWhitespace)
docs <- tm_map(docs, removeWords, stopwords('english'))
#inspect(docs[440])
dataframe<-data.frame(text=unlist(sapply(docs, `[`, "content")), stringsAsFactors=F)
dtm <- DocumentTermMatrix(docs,control=list(stopwords=FALSE,wordLengths =c(2,Inf)))
##Let's remove the variables which are 95% or more sparse.
dtm <- removeSparseTerms(dtm,sparse = 0.95)
Weighteddtm <- weightTfIdf(dtm,normalize=TRUE)
mat.df <- as.data.frame(data.matrix(Weighteddtm), stringsAsfactors = FALSE)
mat.df <- cbind(mat.df, Res_Desc_Train$Class)
colnames(mat.df)[ncol(mat.df)] <- "Class"
Assignment.Distribution <- table(mat.df$Class)
Res_Desc_Train_Assign <- mat.df$Class
Assignment.Distribution <- table(mat.df$Class)
### Feature has different ranges, normalizing to bring ranges from 0 to 1
### Another way to standardize using z-scores
normalize <- function(x) {
y <- min(x)
z <- max(x)
temp <- x - y
temp1 <- (z - y)
temp2 <- temp/temp1
return(temp2)
}
#normalize(c(1,2,3,4,5))
num_col <- ncol(mat.df)-1
mat.df_normalize <- as.data.frame(lapply(mat.df[,1:num_col], normalize))
mat.df_normalize <- cbind(mat.df_normalize, Res_Desc_Train_Assign)
colnames(mat.df_normalize)[ncol(mat.df_normalize)] <- "Class"
#names(mat.df)
outcomeName <- "Class"
train = mat.df_normalize[c(1:nrow(past)),]
test = mat.df_normalize[((nrow(past)+1):nrow(training)),]
train$Class <- as.factor(train$Class)
###SVM Model
x <- subset(train, select = -Class)
y <- train$Class
model <- svm(x, y, probability = TRUE)
test1 <- subset(test, select = -Class)
svm.pred <- predict(model, test1, decision.values = TRUE, probability = TRUE)
svm_prob <- attr(svm.pred, "probabilities")
finalresult <- cbind(test,svm.pred,svm_prob)
Dank für Ihre Hilfe wird Lösung, die Sie teilen und überprüfen, ob die Genauigkeit erhöht werden kann, tatsächlich bin ich sehr niedrig um 52% der Genauigkeit – user3734568
In diesem Fall müssen Sie auch Ihre Trainingsdatensatz erhöhen, so dass das Modell lernt richtig. – Prem
danke für deinen Vorschlag wird prüfen, ob ich mehr Dataset zum Train-Modell bekommen kann, derzeit habe ich 13383 Dokument in meinem Zugdatensatz. – user3734568