【问题标题】:How to use predict function with text categories?如何对文本类别使用预测功能?
【发布时间】:2018-10-23 06:25:42
【问题描述】:

我一直在使用 predict 函数低估(或高估)新文本类别(或其类别,如果它们运动...健康....politcs)的预测时遇到问题

首先,我导入我的语料库的 tdm 矩阵,然后拆分我的数据训练/测试,以使用 knn 算法在我的模型中使用。

而且效果很好。

现在我需要导入新的文本未知类别来预测它,但我没有这样做。

我不会如何使用预测功能

错误是

ff<-predict(knn.pred,PathFilename)

使用方法中的错误(“预测”):
没有适用于“因素”类对象的“预测”方法

# Text mining: Corpus and Document Term Matrix
library(tm)
# KNN model
library(class) 
# Stemming words
library(SnowballC)
# CrossTable
library('gmodels')
# function prediction
library(caret) 
# function for factor
library(e1071)
library(SparseM)

# Stemming words

# Read csv with columns: Document , Terms and category
PathFile <- read.csv(file.choose(), sep =";", header = TRUE)
PathFilename<-read.csv(file.choose(), sep =";", header = TRUE)
#Strectur of Csv file
str(PathFile)
tail(PathFile)

# Column bind category (known classification)
#mat.df <- cbind(PathFile, PathFile$Category)
#tail(mat.df)
# Change name of new column to "category"
#colnames(mat.df)[ncol(mat.df)] <- "Category"

# Split data by rownumber into two equal portions
train <- sample(nrow(PathFile), ceiling(nrow(PathFile) * .70))
test <- (1:nrow(PathFile))[- train]

##Show Training Data
train
##Show Test Data
test
#n <- names(PathFile)
#f <- as.formula(paste("Category ~", paste(n[!n %in% "Category"], collapse = " + ")))
#f


# Isolate classifier
cl <- PathFile[, "Category"]

# Create model data and remove "category"
modeldata <- PathFile[,!colnames(PathFile) %in% "Category"]

# Create model: training set, test set, training set classifier
knn.pred <- knn(modeldata[train, ], modeldata[test, ], cl[train], 70)
knn.pred

# Confusion matrix
conf.mat <- table("Predictions" = knn.pred, Actual = cl[test])
conf.mat


ff<-predict(knn.pred,PathFilename) #here i have an error 

ct<-CrossTable(x = cl[test], y = knn.pred, prop.chisq=FALSE)

table(knn.pred,cl[test])

plot(knn.pred,
     xlab = "Number of neighbours(k)",
     main = "Comparison of Accuracy against k",
     type = "b",
     col = "black",
     lwd = 1.8,
     pch = "O")



studentModel <- train(Category ~ ., data=PathFile, method = "knn")
studentTestPred <- predict(model, test) 

# Accuracy
(accuracy <- sum(diag(conf.mat))/length(test) * 100)


# Create data frame with test data and predicted category
setwd("C:/Users/Public/Desktop/")
df.pred <- cbind(knn.pred, modeldata[test, ])
write.table(df.pred, file="output.csv", sep=";")

【问题讨论】:

    标签: r classification knn predict


    【解决方案1】:

    knn 与许多其他分类器的工作方式不同。它是一个“惰性”分类器。没有模型。当您需要进行预测时,它会计算所有内容。因此,knn 没有预测方法knn 函数直接返回其预测。由于您不提供数据,因此我无法使用您的示例,但我将使用您的代码的简化版本的代码来说明内置数据。

    library(class)
    train <- sample(nrow(iris), ceiling(nrow(iris) * .70))
    test <- (1:nrow(iris))[- train]
    knn.pred <- knn(iris[train, 1:4], iris[test,1:4 ], iris$Species[train], 5)
    knn.pred
     [1] setosa     setosa     setosa     setosa     setosa     setosa     setosa    
     [8] setosa     setosa     setosa     setosa     setosa     setosa     setosa    
    [15] setosa     setosa     setosa     setosa     setosa     setosa     versicolor
    [22] versicolor versicolor versicolor versicolor versicolor versicolor versicolor
    [29] versicolor versicolor versicolor virginica  versicolor versicolor versicolor
    [36] versicolor virginica  virginica  virginica  virginica  virginica  virginica 
    [43] virginica  virginica  virginica 
    Levels: setosa versicolor virginica 
    

    如您所见,knn.pred 不是模型。它是对测试数据的预测。

    为了预测你的新测试数据,你需要再次运行 knn。

     knn(modeldata[train, ], PathFilename, cl[train], 70)
    

    这应该会产生您想要的预测。

    【讨论】:

    • 但是当我添加一个新数据并尝试显示混淆矩阵 igot 长度错误 表中的错误(predicted_dir,actual_dir):所有参数必须具有相同的长度混淆矩阵(myknnSecond,cl [train])
    • 你是如何创建myknnSecond的?
    • 我刚刚把它变成了一个新对象 myknnsecond
    • 您无法从训练数据 cl[train] 的类和新数据上的预测类创建混淆矩阵。 myknnSecond。如果您知道新数据 PathFilename 的类应该是什么,请使用 confusionMatrix(myknnSecond, NewDataClass)
    • 我在 myknnsecond 中使用了 14 个具有未知类别的文本。这是我正在使用的脚本 chaosMatrix(myknnSecond, (1:14)) 。你能告诉我我在这里做错了什么吗? ps:它的工作,但如果它的错误或正确的idk
    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多