私は R を初めて使用する相対性理論であり、Shiny を使用するのはさらに新しいものであり、selectInput を Shiny 内の randomForest モデルにリンクすることに問題があります。
顧客の保険コストを予測する RandomForest モデルを作成しましたが、うまく機能しているようです。このモデルを Shiny に基づいて作成し、ユーザーがスライダーとドロップダウンを介してリスク情報を変更できるようにして、それに応じてコスト値が更新されるようにしたいと考えています。これは数値フィールドで完全に機能しますが、selectImput リスト (駐車値入力のリスト = "ガレージ") を追加すると、次のエラーが発生します。
Warning: Error in predict.randomForest: New factor levels not present in the training data
Stack trace (innermost first):
85: predict.randomForest
84: predict
83: pred [#10]
82: renderText [#2]
81: func
80: origRenderFunc
79: output$guess
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
ドロップダウン リストの値はモデルにないと想定したので、RandomForest オブジェクトを調べて実際の値を選択し、コードに配置しました。
> rf$forest$xlevels$Parking
[1] "Driveway" "Locked garage" "On the road at home" "On the road away from home"
[5] "Other" "Residential car park" "Work car park"
再び同じエラーが返ってきました。RF モデルのパーキングのデータ クラスは Factor です。駐車場の値は、input = "garage" にリンクされています。
以下の私のコードのコピーをご覧ください。私はこれを機能させることに非常に近いので、これに関する助けは大歓迎です。
library(shiny)
library(randomForest)
library(datasets)
ui <- fluidPage( titlePanel("Van Market Premium - alpha"),
checkboxInput(inputId = "comp", label = "Comprehensive"),
sliderInput(inputId = "age", label = "Age of Driver", value = 25, min = 17, max = 100),
sliderInput(inputId = "ncd", label = "No Claims Discount", value = 0, min = 0, max = 9),
numericInput(inputId = "cc", label = "CC", value = 1600, min = 250, max = 5000),
sliderInput(inputId = "value", label = "Current Van Value", value = 2000, min = 50, max = 20000, step = 250),
sliderInput(inputId = "aov", label = "Age of Van [years]", value = 5, min = 0, max = 50),
numericInput(inputId = "volxs", label = "Voluntary Excess", value = 0, min = 0, max = 1500),
sliderInput(inputId = "mileage", label = "Annual Mileage", value = 5000, min = 1000, max = 50000, step = 1000),
sliderInput(inputId = "length", label = "Ownership Length", value = 12, min = 0, max = 120, step = 6),
checkboxInput(inputId = "fuel", label = "Petrol?"),
checkboxInput(inputId = "auto", label = "Automatic?"),
selectInput(input = "garage", label = "Overnight Location", choices = as.factor(c("On the road at home",
"Driveway",
"Locked garage",
"Other",
"Residential car park",
"Work car park",
"On the road away from home"))),
textOutput("guess")
)
RF <- get(load("C:/Users//Documents/R/RF3.RData"))
pred <- function(co, ag, nc, cc, val, aov, vol, mil, len, fuel, auto, garage) {
inputdata <- c(co, ag, nc, cc, val, aov, vol, mil, len, fuel, auto, garage)
pred_data <- as.data.frame(t(inputdata))
colnames(pred_data) <- c("Comp" , "Age" , "NCD" , "CC" , "Value" , "AgeOfVehicle", "VoluntaryExcess"
,"AnnualMileage", "LengthOwned", "petroldiesel", "auto", "Parking")
prob_out <- predict(RF, pred_data)
prob_out <- exp(prob_out)
return(prob_out)
}
server <- function(input, output) {
output$guess <- renderText({pred(input$comp, input$age, input$ncd, input$cc, input$value, input$aov,
input$volxs, input$mileage, input$length, input$fuel, input$auto, input$garage
)})
}
shinyApp(ui = ui, server = server)
コードは、ガレージ セクションがなくても完全に機能します。データ形式に関係があると思いましたが、これを整理するのに本当に苦労しています。
乾杯マーク