

以下のコードを実行したところ、エラーが発生してしまいます。

**エラーメッセージ**

[code]

    xgb.iter.update(bst$handle, dtrain, iteration - 1, obj) でエラー: 
      [23:11:58] amalgamation/../src/objective/regression_obj.cu:61: Check failed: preds.Size() == info.labels_.Size() (75 vs. 25) :  labels are not correctly providedpreds.size=75, label.size=25, Loss: reg:squarederror
    
[/code]

**現状のコード**

[code]

    #databaseの読み込み
    database<-read.csv("database.csv")
    
    database
    
    #databaseのAtmosphereを質的変数に変換
    database$Atmosphere<-as.factor(database$Atmosphere)
    
    database
    
    #csvファイルからdata.tableへ変換
    dt<-data.table(database,keep.rownames=F)
    
    dt
    
    #学習データの抽出
    train.data=dt[1:25,]
    
    #検証データの抽出
    test.data=dt[26:39]
    
    #学習データの説明変数(Hydrogen.content以外)をmodel.mx_evとして抽出
    model.mx_ev<-sparse.model.matrix(Hydrogen.content~.,train.data)
    
    model.mx_ev
    
    #学習データの目的変数をmodel.mx_ovとして抽出
    model.mx_ov<-xgb.DMatrix(model.mx_ev,label=train.data$Hydrogen.content)
    
    model.mx_ov
    
    #検証データの説明変数(Hydrogen.content以外)をpred.mx_evとして抽出
    pred.mx_ev<-sparse.model.matrix(Hydrogen.content~.,test.data)
    
    pred.mx_ev
    
    #検証データの目的変数をmodel.mx_ovとして抽出
    pred.mx_ov<-xgb.DMatrix(pred.mx_ev,label=test.data$Hydrogen.content)
    
    pred.mx_ov
    
    #パラメーター調整(デフォルト)#
    params <- list(
      eta=0.3,
      gamma=0,
      max_depth=6,
      min_child_weight=1,
      max_delta_step=0,
      subsample=1,
      colsample_bytree=1,
      colsample_bylevel=1,
      lambda=1,
      alpha=0
    )
    
    #Xgboost学習#
    xgb<- xgboost(data=model.mx_ev,label=train.data$Hydrogen.content, num_class=3, objective="reg:linear", booster="gbtree", nrounds=100, verbose=1)
    
[/code]


CC BY-SA 4.0
2020-07-16T14:18:35.850
68649
2023-07-14T14:04:05.460
2020-07-16T16:36:45.863
3060
41118
question
r
Xgboost 回帰でエラーが発生する


`num_class = 3` という引数を消してください. これは分類のクラス数を指定する引数で, 回帰には使いません.

例:

[code]

    data(iris)
    iris <- rename(iris, Hydrogen.content = Sepal.Length)
    
    require(xgboost)
    require(data.table)
    require(Matrix)
    
    dt <- data.table(iris, keep.rownames = F)
    dt <- iris
    
    #学習データの抽出
    train.data <- dt[1:25, ]
    
    #検証データの抽出
    test.data <- dt[26:39, ]
    
    #学習データの説明変数(Hydrogen.content以外)をmodel.mx_evとして抽出
    model.mx_ev <- sparse.model.matrix(Hydrogen.content ~ ., train.data)
    
    xgb <- xgboost(data = model.mx_ev, label = train.data$Hydrogen.content, objective = "reg:linear", nrounds = 100)
    
[/code]

なお, もし本当にやりたいのが回帰ではなく分類だった場合, `objective=` のほうを変更することになります.


CC BY-SA 4.0
2020-07-17T00:27:15.077
68657
2020-07-17T00:27:15.077
40575
68649
answer