没有适用于“预测”的适用方法应用于“字符”类的对象

时间:2019-07-18 16:05:45

标签: neural-network r-caret knn caret

我正在R中创建一个堆叠模型来预测个人排名。我分别创建的两个模型是KNN和NeuralNetwork。创建堆叠模型时,我遇到了“对“字符”类的对象没有适用的“预测”适用方法的问题。

我尝试将等级观测值转换为“ 0,1”,但是由于某种原因,即使我添加了代码,R也不会将它们识别为等级。导致错误的行在代码的两边都有**。


library(caretEnsemble)
library(readxl)
library(caret)
library(neuralnet)



Logs1 <- read_excel("C:/Users/Abdulazizs/Desktop/Projects/Indirect/Logisitc Idea.xlsx", 
    sheet = "Pivot Table", n_max = 5000)


Logs1$Direct_or_Indirect <- NULL
Logs1$parentaccount <- NULL
Logs1$Rank <- as.factor((Logs1$Rank))
head(Logs1)


set.seed(32942899)

##Seperating Data
logpart <- Logs1[sample(nrow(Logs1)),]
split <- floor(nrow(Logs1)/3)
trainlog <- Logs1[(split+1):(split*2), ]
testlog <- Logs1[(split*2+1):nrow(Logs1), ]
validtest <- Logs1[0:split,]
TrainingParameters1 <- trainControl(method = "repeatedcv", number = 10, repeats=10) 

table(testlog$Rank)


##Models
KNN1 <- train(Rank~., trainlog, method = "knn", trControl= TrainingParameters1, preProcess=c("scale","center"), na.action = na.omit)
NModel <- train(Rank~., trainlog, method = "nnet", trControl= TrainingParameters,preProcess=c("scale","center"),na.action = na.omit)

##Predicting off of test data
KNNPrediction <-predict(KNN1, newdata = testlog)
NMPred<-predict(NModel, testlog, type = "raw")



##Placing Predicts vs actual in same table
KNNTable<- table(KNNPrediction, testlog$Rank, useNA="ifany")
NNTable<- table(NMPred, testlog$Rank, useNA="ifany")


## Confusion Matrix 
KNNCnn <- confusionMatrix(KNNTable)
NNCnn <- confusionMatrix(NNTable)
#####

Test_KNN_NNTable <- data.frame(NMPred,KNNPrediction, testlog,  stringsAsFactors = F )
modelStack <- train(Rank~ ., data = Test_KNN_NNTable, method = "rf", na.action = na.omit)


#################################################################START OF STACKED MODEL SECTION#################################################################################


## Creating new predicitions
TestNN<- predict(NModel, newdata = validtest)
TestKNN <- predict(KNN1, newdata = validtest)
Test_KNN_NNTable2  <- data.frame(TestNN,TestKNN, validtest,  stringsAsFactors = F )

length(TestNN)
length(TestKNN)
modelStack <- modelStack[1:1666]

***Test_KKN_NN_Pred <- predict(modelStack, Test_KNN_NNTable2  )***


## Checking lengths
length(Test_KKN_NN_Pred)
length(TestKNN)
length(TestNN)
length(validtest$Rank)


##Creating new tables
Everything_Combined <- table(Test_KKN_NN_Pred[1:1666], validtest$Rank, useNA="ifany")
KNN_New_Table <- table(TestKNN, validtest$Rank, useNA="ifany")
NN_New_table <- table(TestNN, validtest$Rank, useNA="ifany")


##New COnfusion Matrix
confusionMatrix(KNN_New_Table)
confusionMatrix(NN_New_table)
confusionMatrix(Everything_Combined)
```

Expected results are: Creating a more accurate model from stacking.

0 个答案:

没有答案