В настоящее время я использую набор данных смешанного типа.Я использую пакет caret
из программного обеспечения R для обучения с SVM, LogitBoost, RF .....
Размер моего набора данных - 124x28, где предикторами являются, как я указываю, числовые переменные илифакторы (в некоторых случаях упорядоченные факторы).
Я пытаюсь сделать обратный выбор предикторов на основе исключения из набора данных переменной с наименьшей важностью: на каждой итерации число предикторов уменьшается наодин.Я использую функцию varImp
из пакета caret для оценки важности переменной.Переменная, подлежащая классификации, - это первая переменная с именем State
, которая имеет коэффициент с двумя уровнями.
Проблема, с которой я сталкиваюсь, заключается в том, что varImp
не работает для определенного набора предикторов, но работаетдля подмножества / избыточного набора предикторов этого конкретного набора.В частности, в случае этого определенного набора предикторов после выполнения varImp
консоль печатает эту ошибку:
Ошибка в auc3_ (фактическая, прогнозируемая, ранги): несовместима с запрошеннойтип: [тип = символ;target = double].
Код следующий:
превышен набор
rm(list = ls())
library(readxl)
library(caret)
library(ROCR)
library(kernlab)
library(e1071)
library(openxlsx)
tutti <- read_excel("C:/Users/Matteo/Tesi/data set.xlsx")
tutti<-data.frame(tutti)
tutti$State = as.character(tutti$State)
tutti$State = factor(tutti$State)
tutti$T_Anxiety_40fl2 = factor(tutti$T_Anxiety_40fl2)
tutti$SmkAroundLMP2 = factor(tutti$SmkAroundLMP2)
tutti$SmkTrimester1_overall = factor(tutti$SmkTrimester1_overall)
tutti$SmkTrimester2_overall = factor(tutti$SmkTrimester2_overall)
tutti$AnyDrugs2 = factor(tutti$AnyDrugs2)
tutti$ACC_G = factor(tutti$ACC_G,ordered=TRUE)
tutti$ACC_P = factor(tutti$ACC_P,ordered=TRUE)
tutti$DEC = factor(tutti$DEC,ordered=TRUE)
tutti<-tutti[-c(2,11,4,16,8,19,6,5,20,26,23,7,10,18,27,9)]
train.index <- sample.int(nrow(tutti),ceiling(nrow(tutti)*0.7));
trainset <- tutti[train.index,]
testset <- tutti[-train.index,]
testX<-testset[-1]
ctrl<-trainControl(method="cv",number=10, summaryFunction=twoClassSummary,classProbs=TRUE)
grid <- expand.grid(C=(2))
svm.tune <- train(State ~ .,data=trainset,method = "svmLinear",tuneGrid = grid,trControl=ctrl)
all <- varImp(svm.tune)
######################
определенный набор
rm(list = ls())
library(readxl)
library(caret)
library(ROCR)
library(kernlab)
library(e1071)
library(openxlsx)
tutti <- read_excel("C:/Users/Matteo/Tesi/data set.xlsx")
tutti<-data.frame(tutti)
tutti$State = as.character(tutti$State)
tutti$State = factor(tutti$State)
tutti$T_Anxiety_40fl2 = factor(tutti$T_Anxiety_40fl2)
tutti$SmkAroundLMP2 = factor(tutti$SmkAroundLMP2)
tutti$SmkTrimester1_overall = factor(tutti$SmkTrimester1_overall)
tutti$SmkTrimester2_overall = factor(tutti$SmkTrimester2_overall)
tutti$AnyDrugs2 = factor(tutti$AnyDrugs2)
tutti$ACC_G = factor(tutti$ACC_G,ordered=TRUE)
tutti$ACC_P = factor(tutti$ACC_P,ordered=TRUE)
tutti$DEC = factor(tutti$DEC,ordered=TRUE)
tutti<-tutti[-c(2,11,4,16,8,19,6,5,20,26,23,7,10,18,27,9,25)]
train.index <- sample.int(nrow(tutti),ceiling(nrow(tutti)*0.7));
trainset <- tutti[train.index,]
testset <- tutti[-train.index,]
testX<-testset[-1]
ctrl<-trainControl(method="cv",number=10, summaryFunction=twoClassSummary,classProbs=TRUE)
grid <- expand.grid(C=(2))
svm.tune <- train(State ~ .,data=trainset,method = "svmLinear",tuneGrid = grid,trControl=ctrl)
all <- varImp(svm.tune)
#############################
подмножество
rm(list = ls())
library(readxl)
library(caret)
library(ROCR)
library(kernlab)
library(e1071)
library(openxlsx)
tutti <- read_excel("C:/Users/Matteo/Tesi/data set.xlsx")
tutti<-data.frame(tutti)
tutti$State = as.character(tutti$State)
tutti$State = factor(tutti$State)
tutti$T_Anxiety_40fl2 = factor(tutti$T_Anxiety_40fl2)
tutti$SmkAroundLMP2 = factor(tutti$SmkAroundLMP2)
tutti$SmkTrimester1_overall = factor(tutti$SmkTrimester1_overall)
tutti$SmkTrimester2_overall = factor(tutti$SmkTrimester2_overall)
tutti$AnyDrugs2 = factor(tutti$AnyDrugs2)
tutti$ACC_G = factor(tutti$ACC_G,ordered=TRUE)
tutti$ACC_P = factor(tutti$ACC_P,ordered=TRUE)
tutti$DEC = factor(tutti$DEC,ordered=TRUE)
tutti<-tutti[-c(2,11,4,16,8,19,6,5,20,26,23,7,10,18,27,9,25,24)]
train.index <- sample.int(nrow(tutti),ceiling(nrow(tutti)*0.7));
trainset <- tutti[train.index,]
testset <- tutti[-train.index,]
testX<-testset[-1]
ctrl<-trainControl(method="cv",number=10, summaryFunction=twoClassSummary,classProbs=TRUE)
grid <- expand.grid(C=(2))
svm.tune <- train(State ~ .,data=trainset,method = "svmLinear",tuneGrid = grid,trControl=ctrl)
all <- varImp(svm.tune)
На самом деле, varImp
возвращает эту ошибку, если набор предикторов содержит только одну факторную переменную.(кроме прогнозируемой переменной)
Не могли бы вы помочь мне решить эту проблему?
Я уже обновил каждый пакет R.
Посмотрев быстров исходном коде, я думаю, что это проблема исходного кода (C ++).Я прав?