簡體   English   中英

如何在 Sci-kit 中對多輸出回歸器使用交叉驗證?

[英]How to use Cross Validation for Multioutput Regressor in Sci-kit?

首先是我的設置:X 是我的功能表。 它有 150 000 個特征和 96 個樣本。 所以 150 000 列和 96 行。

y 是我的目標表。 它有 4 個標簽,當然還有 96 個樣本。 所以 4x96(列 x 行)。

拆分成訓練和測試數據后,我正在使用 MLPRegressor。 根據 Sci-kit 的文檔,它是一個原生多輸出回歸器。 所以我可以用它來預測我想要的四個輸出值,其中包含 150 000 個特征的新樣本。 我的代碼:

mlp = MLPRegressor(hidden_layer_sizes=(2000, 2000), solver= 'lbfgs', max_iter=100)
mlp.fit(X_train,y_train)

然后我使用交叉驗證。

cross_validation.cross_val_score(mlp, X, y, scoring='r2')

輸出是一個包含 3 個條目的列表(參數 cv=3)。 我真的不明白我的 4 個標簽是如何由這 3 個值表示的。 我期望的格式是這樣的:標簽 1:3 個條目,標簽 2:3 個條目,標簽 3 和 4 也是如此。因此,對於不同的拆分,我將所有標簽的 R^2 值重復三次測試和訓練數據。

我錯過了什么嗎? 我需要使用 Multioutputregressor 嗎? (請參閱此處的文檔)

這里是交叉驗證的文檔。

謝謝。

首先,如果您實際使用的是cross_validation.cross_val_score() ,那么您應該將其替換為model_selection.cross_val_score() 模塊cross_validation已被棄用並從最新版本的 scikit 中刪除。

現在來談談為什么您只為所有輸出而不是單個條目獲得一個分數是因為這就是 scorer 的默認值的設置方式。

您已使用此處記錄的評分'r2' 在那里,如果輸入是多輸出(如您的情況),則可以選擇通過使用

multioutput :定義多個輸出分數的聚合。 類似數組的值定義了用於平均分數的權重。 默認為“uniform_average”。

'raw_values' :在多輸出輸入的情況下返回完整的分數集。

'uniform_average' :所有輸出的分數以統一的權重進行平均。

'variance_weighted' :所有輸出的分數被平均,由每個單獨輸出的方差加權。

您會看到默認值是'uniform_average' ,它只是平均所有輸出以獲得單個值,這就是您得到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM