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

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

迭代許多隨機訓練和測試集分割直到達到高精度是一種不好的做法嗎?

迭代許多隨機訓練和測試集分割直到達到高精度是一種不好的做法嗎?

慕碼人8056858 2023-07-11 16:43:58
假設我迭代以下代碼,直到獲得滿意的準確性:  from sklearn.model_selection import train_test_split  x, y = # ... read in some data set ...  c = 3000 # iterate over some arbitrary range  for i in range(c):    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=i)    model = # ... initialize some classifier of choice ...    model.fit(x_train, y_train)    p = model.predict(x_test)    p = np.round(p).reshape(-1)    test_accuracy = np.mean(p == y_test) * 100對于特定的數據集和范圍,假設我構建了一個分類器,訓練準確率為 97%,測試準確率為 96%。我真的可以聲稱該模型的準確率達到 96% 嗎?對于相同的范圍和數據集,我還可以構建一個分類器,使得訓練準確率和測試準確率分別低至 99% 和 70%。既然我是random_state根據測試集精度來選擇的,那么這里的測試集真的是驗證集嗎?我不知道為什么,但我認為聲稱第一個模型的準確率是 96% 是不正確的。為了對模型的準確性做出正確的聲明,我應該做什么?
查看完整描述

2 回答

?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

迭代許多隨機訓練和測試集分割直到達到高精度是一種不好的做法嗎?

是的,這是不好的做法。您應該評估您的模型從未訓練過的數據,如果您多次訓練以找到最佳的訓練/測試分割,情況就不會如此。

您可以在訓練模型之前放置測試集。然后,您可以根據需要創建任意數量的訓練/驗證分割,并多次訓練模型。您將在測試集上進行評估,而模型從未在該測試集上進行過訓練。

您還可以研究嵌套交叉驗證。


查看完整回答
反對 回復 2023-07-11
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

有點。有交叉驗證,與您所描述的類似。這是訓練/測試分割被隨機化并且模型每次都被訓練的地方。除了引用的最終值是平均測試精度 - 而不僅僅是最好的。這類事情是在棘手的情況下完成的,例如數據集非常小的情況。

從更大的角度來看,測試數據應該代表訓練數據,反之亦然。當然你可以這樣干,但是如果你的訓練集中隱藏著非典型的“怪異”案例,而測試集充滿了簡單的案例(例如 MNIST 只有數字 0),那么你就沒有真正取得任何成果。你只是在欺騙自己。


查看完整回答
反對 回復 2023-07-11
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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