我有 15 個不同的資料集(15 個串列pandas.DataFrame),我想從做 K-Fold CV 的單個分類器的角度來研究相同的問題。目前,我正在使用以下結構進行一些實驗:
# Manual 15-Fold CV
for i in range(len(datasets)):
train_sets = [datasets[j] for j in range(len(datasets)) if j != i]
test_set = datasets[i]
train = pd.concat(train_sets)
clf = ...
clf.fit(...)
...
如您所見,我需要將每個資料集視為 K-Fold 的折疊,而不是簡單地將所有資料集合并為一個并運行默認值cross_val_score()或類似的東西。
這在運行單一實驗時效果很好,但我想用它GridSearchCV來更好地探索我的模型。所以,問題是:有什么方法可以創建自定義KFold預定義每個折疊的內容并將其傳遞給GridSearchCV?
uj5u.com熱心網友回復:
從檔案
cv: int,交叉驗證生成器或可迭代物件,默認=None
一個可迭代的 yield (train, test) 拆分為索引陣列。
因此您可以創建一個元組串列,并將所有資料合并到一個資料集中,同時維護可以在這些元組中使用的索引,
因此,如果您在稱為索引的 numpy 陣列串列中有索引。
編輯:這是未經測驗的,但它應該作業。
indicies = []
train_test_set = []
last_element = 0
for j in range(len(datasets)):
train_test_set.append(datasets[j])
indicies.append(np.arange(last_element,last_element len(datasets[j])))
last_element = len(datasets[j])
cv_list = []
for i in range(15):
cv_train = np.hstack([indicies[x] for x in range(15) if x != i])
cv_list.append((cv_train,indicies[i]))
并將 cv_list 傳遞給函式。
Edit2:修復了代碼中的錯字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/412607.html
標籤:
