將初始估計值(啟發式估計)整合到預測模型(機器學習)中我正在開發一個名為“混合搜尋”的工具。它運作良好,但我設想對其進行改進,但我目前還不知道如何在技術上實現它。
Blend Search 的功能:
>> 輸入是一組元件及其屬性的集合。
>> 生成成分矩陣
>> 應用啟發式方法(簡單模型)計算混合物的性質
>> 應用更複雜的模型,目前是提升樹模型。其預測變數是啟發式估計的混合物的屬性,其輸出也是混合物的屬性。
我製作了一個 Boosted Tree 的視覺化圖表(請參閱附件影片)。
其中一個預測因子(預測因子 3)已經提供了我的目標屬性(預測值)的初步估計。最初的想法是,另外兩個預測因子旨在完善這個初步估計。如今,該模型能夠提供一致的預測結果;我們很少偏離預測範圍。
但實際上,我修正的並非初始估計值,而是訓練集中 Y 值的平均值(即 Boosted Tree 的預設截距)。如果我想擴大混合搜尋的規模,這種方法將不再足夠穩健。
我希望能夠透過修正初始估計值來進行預測。例如,我非常希望我的 Boosted Tree 模型能夠擁有可變截距類型。我目前還沒有找到合適的解決方案,但我相信肯定已經有一些相關的技術存在。如果您有任何想法,我非常樂意聽聽您的意見。
預測建模和機器學習回覆:將初始估計(啟發式)整合到預測模型(機器學習)中你好@RikkiTikkiTavi ,
我不太確定自己是否完全理解演算法建模鏈,但我或許能給你一些啟發。有兩種方法可以提高預測精度:一種是提升演算法(用於減少預測偏差),另一種是集成學習/模型平均演算法(用於減少預測方差)。
- 提升方法:如果目標是透過校正偏差(預測平均反應與測量平均反應之間的偏差)來改善目標屬性的預測,您可以訓練一個機器學習模型,該模型能夠根據原始資料和/或估計資料以及目標屬性的預測值來預測該目標屬性的殘差(以便基於原始變數和預測值對誤差進行建模)。這將得到一個能夠預測提升樹中誤差的模型,並作為提升樹的校正層(透過在提升樹的預測值中添加/減去殘差預測值)。
我多次使用過這種方法,效能提升非常顯著。或許可以考慮使用與預測模型不同的誤差建模模型(例如,在你的例子中,使用Boosted Tree之外的其他模型)。此外,請務必使用合適的驗證策略(用於與Boosted Tree模型單獨比較)和測試策略(用於評估模型在實際應用情境下的效能)對新模型進行全面驗證,避免過度擬合。為了避免資料外洩的風險,誤差模型僅使用預測時可用的資料:預測變數加上目標屬性的預測值。
- Bagging/模型平均方法:另一種降低預測變異數的方法是並行訓練一組模型(除了Boosted Tree模型之外),並取其預測結果的平均值或中位數。然而,使用這種方法,實施合適的驗證和測試策略至關重要。
選擇哪種方法取決於初始 Boosted Tree 模型的效能以及資料中的雜訊:如果 Boosted Tree 容易過度擬合或資料雜訊較大,建議採用 bagging 方法。如果 Boosted Tree 表現不佳且偏差較大(考慮到模型的行為,這種情況似乎不太可能發生,除非使用了特定的參數),則 Boosting 方法會更有效。由於所使用的預測模型(Boosted Tree)本身就採用了 Boosting 方法,因此我可能會優先測試 bagging 類型的整合方法。
希望這些建議能帶給你靈感。
回覆:將初始估計(啟發式)整合到預測模型(機器學習)中你好@Victor_G ,
我之前已經嘗試預測殘差(目標屬性的實際值與其初始估計值之間的差異)。在訓練集上取得了一些改進,但在測試集上卻失敗了(均方根誤差翻了一番)。我的測試集代表了我預期的規模放大;它是由成分差異很大的子集組成,但這些混合物的屬性幾乎與訓練集的屬性處於同一範圍內。我目前的Boosted Tree模型在測試集上的預測效果相當不錯。
模型平均的想法很有趣。我需要找到誤差差異足夠大的模型來測試這種方法嗎?我想我會先嘗試 bagging。我知道我的資料雜訊很大,而且我估計這種模型比 2 個、3 個、4 個…不同的模型更容易整合到我的混合搜尋工具中。
非常感謝您的建議;
回覆:將初始估計(啟發式)整合到預測模型(機器學習)中你好@RikkiTikkiTavi ,
是的,這種方法的困難在於採用正確的驗證策略來避免過度擬合(在訓練集上有所改進,但在驗證資料集上的效能穩定甚至下降)。
根據您對測試資料的描述,我有點擔心您可能會遇到領域偏移:模型在訓練過程中學習到的輸入輸出關係可能與測試中實際存在的關係不同。是否可以混合/ 分層訓練/驗證/測試資料來避免這種偏移(並且測試中只包含規模化資料)?這樣可以讓模型也獲得關於規模化的信息,或許可以透過在訓練過程中使用一個新變數來表示(例如,experiment_type:研發/規模化/生產;這取決於不同階段是否具有不同的截距,從而需要這個變數)。
關於後續流程,以下是一些意見/想法:
- 首先建立訓練/驗證/測試策略,如果可能的話,根據變數進行分層分割,以確保每個資料集都能涵蓋整個實驗空間(以確保相關的訓練和良好的效能泛化)。
- 在訓練提升樹(或其他模型)之前,請先建立對比模型:一個基準模型(我推薦隨機森林),用於在驗證中優於其他模型;以及一個用於評估被測模型性能下限的模型:例如,一個僅「預測」訓練集在所有其他資料集(驗證集和測試集)上的平均響應值的樸素模型。如果其他模型的表現不如或與該樸素模型相當(例如,均方根誤差接近或高於樸素模型),則可能表示資料中相對於訊號而言雜訊過大、因子資訊不足,且/或反應的變異性不足。
- 我還建議測試不同的模型,例如使用模型篩選平台,僅對訓練集進行交叉驗證。這樣就可以選擇最有希望的模型並繼續下一步。
- 根據模型的性能,可以基於訓練集對模型進行重新訓練,從而比較它們在驗證集上的性能,以選擇性能最佳的模型。同時,也可以使用模型比較平台,對已通過先前交叉驗證訓練的選定模型進行模型平均。模型平均的有趣之處在於,它可以根據模型的性能,將具有不同「構建類型」(歸納偏移)的模型(例如基於樹的模型,如Boosted Tree、Random Forest或XGBoost)與其他模型(例如多元迴歸、SVM、高斯過程或小型神經網路)相結合。這些模型應具有良好的個體表現(它們必須能夠捕捉到資料中的訊號),並且理想情況下,它們的誤差率應略有不同(有些模型會高估某些觀測值,而有些模型則會低估它們)。然後,可以使用相同的模型比較平台,透過比較驗證集上的效能結果,將這個巨集模型與基於訓練集重新訓練的各個模型進行比較。
- 一旦選定最佳方案(宏觀模型或個體模型),就會在測試集上估計效能,以評估模型部署後的行為。
除了隨機森林的自然 bagging 之外,還可以對機器學習模型進行bootstrap ,以提高訓練中模型的穩健性。
希望這些建議對您有幫助。