【发布时间】:2018-08-30 10:08:26
【问题描述】:
我是 R 和机器学习的新手。在这里,我尝试建立一个随机森林分类模型,从事件单的描述中预测其优先级。我遵循以下步骤。
1) 输入
library(tm)
library(SnowballC)
library(caTools)
library(randomForest)
incidents = read.csv("incident.csv", stringsAsFactors = FALSE)
> str(incidents) 'data.frame': 4265 obs. of 7 variables: $ number : chr "INC0031193" "INC0037867" "INC0159979" "INC0031446" ... $
> u_detailed_description: chr "Close & Ignore new Ticket New-Production
> SNOW Auto Routing test for XYZ SNOW ticketing in uat" "" "" ""... $
> priority : chr "3 - Moderate" "2 - High" "4 - Low" "3 -
> Moderate" ... $ state : chr "Canceled" "Canceled"
> "Canceled" "Canceled" ... $ category : chr "Server"
> "Tools" "Server" "Server" ... $ assignment_group : chr
> "Windows" "Tools" "SNOC Support" "Windows" ...
2) 数据清洗,创建DocumenTermMatrix并转换为DataFrame。
incidentCorpus <- Corpus(VectorSource(incidents$u_detailed_description))
incidentCorpus <- tm_map(incidentCorpus, tolower)
incidentCorpus <- tm_map(incidentCorpus, removePunctuation)
incidentCorpus <- tm_map(incidentCorpus, removeWords, stopwords("english"))
incidentCorpus <- tm_map(incidentCorpus, stemDocument)
incidentDTM <- DocumentTermMatrix(incidentCorpus)
3) 使用 caTools 将数据拆分为训练集和测试集。
set.seed(123)
split <- sample.split(incidentSparse$priority,SplitRatio = 0.7)
train <- subset(incidentSparse, split == TRUE)
test <- subset(incidentSparse, split == FALSE)
train$priority <- as.character(train$priority)
train$priority <- as.factor(train$priority
test$priority <- as.character(testSet1$priority)
test$priority <- as.factor(testSet1$priority)
4) 应用randomforest() 函数创建我的模型,并使用predict 函数对我的测试集进行分类。
incidentRandomF <- randomForest(priority ~ ., data = train, ntree = 200, mtry = 50, importance = TRUE, proximity = TRUE)
5) 模型的整体准确率在 90% 左右。
baselineAccuracy <- sum(diag(table(predict(incidentRandomF, type="class"), train$priority)))/nrow(train)
> baselineAccuracy
[1] 0.8392498
predFinalTestSet_RF <- predict(incidentRandomF, newdata = test, type="class")
FinalTestSetAccuracy <- sum(diag(table(test$priority,predFinalTestSet_RF)))/nrow(test)
> FinalTestSetAccuracy
[1] 0.8828125
到目前为止,我的分类模型已准备就绪,现在我需要执行此模型以根据给定描述预测优先级,其中描述将由用户提供。
如何向 R 脚本提供用户输入以使其正常运行?
您的帮助将不胜感激。 提前致谢。
【问题讨论】:
-
请提供一个可重现的例子:stackoverflow.com/questions/5963269/…
-
感谢您的回复。我已经更新了这个问题。请检查。
-
想要预测的人希望如何提供输入?您可以使用 rShiny 创建一个 Web 表单,或者他们可以向您发送一个看起来像您的测试集的 CSV,您可以分发您的训练模型,他们可以通过 R 输入值,这里有很多选项。
-
@Josh。感谢您的回复。我想用 ShinyR 创建 web 表单。如果您能给我提供一个高层次的想法或任何以前解决的问题,那将会很有帮助。
标签: r machine-learning classification random-forest