亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

流水線和網格搜索CV,以及XGBoost和隨機森林的多類挑戰

流水線和網格搜索CV,以及XGBoost和隨機森林的多類挑戰

慕蓋茨4494581 2022-09-20 17:39:29
我正在使用流水線和網格搜索CV處理工作流。隨機森林的MWE,如下所示,################################################################## Libraries#################################################################import timeimport pandas as pdimport numpy as npfrom sklearn.pipeline import Pipelinefrom sklearn.model_selection import GridSearchCVfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifier################################################################## Data loading and Symlinks#################################################################train = pd.read_csv("data_train.csv")test = pd.read_csv("data_test.csv")################################################################## Train Test Split################################################################## Selected features - Training dataX = train.drop(columns='fault_severity')# Training datay = train.fault_severity# Test datax = test# Break off validation set from training dataX_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2, random_state=0)################################################################## Pipeline#################################################################pipe_rf = Pipeline([    ('clf', RandomForestClassifier(random_state=0))    ])parameters_rf = {        'clf__n_estimators':[30,40],         'clf__criterion':['entropy'],         'clf__min_samples_split':[15,20],         'clf__min_samples_leaf':[3,4]    }grid_rf = GridSearchCV(pipe_rf,    param_grid=parameters_rf,    scoring='neg_mean_absolute_error',    cv=5,    refit=True) 問題:如何在隨機森林的MWE中使用管道和網格搜索CV技術轉換XGBoost的MWE?必須使用 XGB 回歸器 () 不支持的“num_class”。如何將隨機森林的多類預測輸出作為XGBoost(即predict_0,predict_1 predict_2)?示例輸出在上述 MWE 中給出。我發現num_class是隨機森林分類器不支持的。我花了幾天時間研究這個問題,但仍然被阻止了。感謝一些前進的指針。數據:data_train: https://www.dropbox.com/s/bnomyoidkcgyb2y/data_train.csvdata_test: https://www.dropbox.com/s/kn1bgde3hsf6ngy/data_test.csv
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

我推測,在你的第一個問題中,你不是故意要提到.XGBRegressor


為了允許在管道中運行,您只需更改管道的初始定義:XGBClassifier


params = {

    'max_depth': 6,

    'objective': 'multi:softprob',

    'num_class': 3,

    'n_gpus': 0

}

pipe_xgb = Pipeline([

    ('clf', xgb.XGBClassifier(**params))

])

(注意:我已將管道名稱更改為 ,因此您需要在代碼的其余部分中更改此名稱。pipe_xgb


從這個問題的答案可以看出,如果目標變量中有兩個以上的類,XGBoost 會自動切換到多類分類。因此,您既不能也不需要指定 。num_class


您還應該將指標更改為一個用于分類,因為在每個示例中,您都使用 MAE,這是一個回歸指標。


下面是一個完整的代碼示例,使用 with 作為指標:XGBClassifieraccuracy


#################################################################

# Libraries

#################################################################

import time

import pandas as pd

import numpy as np

from sklearn.pipeline import Pipeline

from sklearn.metrics import accuracy_score

from sklearn.model_selection import GridSearchCV

from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier


import xgboost as xgb


#################################################################

# Data loading and Symlinks

#################################################################

train = pd.read_csv("https://dl.dropbox.com/s/bnomyoidkcgyb2y/data_train.csv?dl=0")

test = pd.read_csv("https://dl.dropbox.com/s/kn1bgde3hsf6ngy/data_test.csv?dl=0")


#################################################################

# Train Test Split

#################################################################

# Selected features - Training data

X = train.drop(columns='fault_severity')


# Training data

y = train.fault_severity


# Test data

x = test


# Break off validation set from training data

X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2, random_state=0)



#################################################################

# Pipeline

#################################################################

params = {

    'max_depth': 6,

    'objective': 'multi:softprob',  # error evaluation for multiclass training

    'num_class': 3,

    'n_gpus': 0

}

pipe_xgb = Pipeline([

    ('clf', xgb.XGBClassifier(**params))

    ])


parameters_xgb = {

        'clf__n_estimators':[30,40], 

        'clf__criterion':['entropy'], 

        'clf__min_samples_split':[15,20], 

        'clf__min_samples_leaf':[3,4]

    }


grid_xgb = GridSearchCV(pipe_xgb,

    param_grid=parameters_xgb,

    scoring='accuracy',

    cv=5,

    refit=True)


#################################################################

# Modeling

#################################################################

start_time = time.time()


grid_xgb.fit(X_train, y_train)


#Calculate the score once and use when needed

acc = grid_xgb.score(X_valid,y_valid)


print("Best params                        : %s" % grid_xgb.best_params_)

print("Best training data accuracy        : %s" % grid_xgb.best_score_)    

print("Best validation data accuracy (*)  : %s" % acc)

print("Modeling time                      : %s" % time.strftime("%H:%M:%S", time.gmtime(time.time() - start_time)))


#################################################################

# Prediction

#################################################################

#Predict using the test data with selected features

y_pred = grid_xgb.predict(X_valid)


# Transform numpy array to dataframe

y_pred = pd.DataFrame(y_pred)


# Rearrange dataframe

y_pred.columns = ['prediction']

y_pred.insert(0, 'id', x['id'])

accuracy_score(y_valid, y_pred.prediction)

編輯以解決評論中的其他問題。


您可以使用 的 API 的方法獲取每個類的概率:predict_probaxgbsklearn


y_pred = pd.DataFrame(grid_xgb.predict_proba(X_valid),

                      columns=['prediction_0', 'prediction_1', 'prediction_2'])

y_pred.insert(0, 'id', x['id'])

使用上面的代碼,具有以下格式:y_pred


      id  prediction_0  prediction_1  prediction_2

0  11066      0.490955      0.436085      0.072961

1  18000      0.718351      0.236274      0.045375

2  16964      0.920252      0.052558      0.027190

3   4795      0.958216      0.021558      0.020226

4   3392      0.306204      0.155550      0.538246


查看完整回答
反對 回復 2022-09-20
  • 1 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號