這是名為NFL的資料集,我試圖運行XG Boost,但錯誤顯示了我。Error in xgb.DMatrix(X_Train, label = labels) : 'data' has class 'character' and length 64617. 'data'接受數字矩陣或單個檔案名。
原始資料集被稱為NFL 我想把 "結果 "設定為預測因子,我想把它設定為數字型。 結果 "變數有 "贏"、"平"、"輸",我想在資料集中顯示為 "1"、"2"、"3"。
以下是代碼
NFL <- NFL %> % mutate(id = row_number())
#分兩組進行開發。TrainSet和validate
trainSet <- train %>% sample_frac(0.7)
驗證<-火車%>%anti_join(trainSet)
#xg boost
set.seed(112321)
X_Train <- trainSet %> %選擇(-outcome) %>% as. matrix()。
X_Test <- 驗證%> %選擇(-target) %>% as. 矩陣()。
標簽 <- trainSet$outcome %>% as.matrix()
Train <- xgb.DMatrix(X_Train, label = labels)
xgbModel < - xgboost(data = trainSet。 目標 = "分類" ,
nrounds = 50, subsample=1, colsample_bytree = 1, max_depth = 10,
eta=0.2, verbose=FALSE)
xgbPred <- predict(xgbModel, validate)
xgbROC <- evaluate(xgbPred, validate$target) /span>enter code here
有人能告訴我如何解決這個問題嗎?非常感謝!
Update: 我試圖使用。 NFL%>% mutate( outcome = ifelse( outcome, c("Win", "Tie", "Loss",1,2,3)))
但它帶有所有的NA,這里是照片NA/s
uj5u.com熱心網友回復:
我認為一般的解決方案是轉換為因子,然后再轉換為數字。
作為一個例子
data <- data. frame(outcome = c("Win"。 "平局"。 "Loss")。 other_cols = runif(3))
data$outcome <- as. numeric(factor(data$outcome。 水平=c("Win"。 "平局"。 "Loss")))
head(data)
#> outcome other_cols
#> 1 1 0.08823792
#> 2 2 0.98049935
#> 3 3 0.61575916[/span
創建于2021-09-22,由reprex軟體包(v2.0.1)
uj5u.com熱心網友回復:
對于xgboost,我推薦使用tidymodels包進行預處理。如果你把無序的分類變數轉換為虛擬變數(每個類別一列),而不是單一的數字列(除非因子是有序的),你也更有可能得到可解釋/有意義的結果。例如:
library(tidymodels)
rec <- recipe(outcome_variable ~ . , data = train) %>%
step_normalize(all_numeric()/span>。 -all_outcomes() %> %
step_dummy(all_nominal()。 -all_outcomes())
processed_training_data <- prep(rec) %> %果汁()
...將回傳你的訓練資料的更新版本,所有的分類變數將被轉換為虛擬變數,可以被xgboost()讀取,可選的step_normalize()將對數字預測變數進行居中和縮放。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332217.html
標籤:
