2017-07-19 1 views
0

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) 

Antwort

0

Lassen Sie uns versuchen, Ihr SVM-Modell abzustimmen?

Sie führen ein Modell mit Standardparametern aus, so dass keine bessere Genauigkeit erzielt werden kann. Das laufende Modell ist ein iterativer Prozess, bei dem Sie den Parameter ändern, das Modell ausführen, die Genauigkeit überprüfen und dann den gesamten Prozess erneut wiederholen.

model <- tune(svm, train.x=x, train.y=y, kernel="radial", ranges=list(cost=10^(-1:2), gamma=c(.5,1,2))) 
print(model) 
#select values of cost & gamma from here and pass it to tuned_model 

tuned_model <- svm(x, y, kernel="radial", cost=<cost_from_tune_model_output>, gamma=<gamma_from_tune_model_output>) 
#now check accuracy of this model using test dataset and accordingly adjust tune parameter. Repeat the whole process again. 

Hoffe, das hilft!

+0

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

+0

In diesem Fall müssen Sie auch Ihre Trainingsdatensatz erhöhen, so dass das Modell lernt richtig. – Prem

+0

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