XGBoost和TensorFlow都是非常強大的機器學習框架,但你怎麼知道你需要哪一個?或許你需要兩者兼而有之?

在機器學習中,「沒有免費午餐」。將特定演算法與特定問題相匹配通常優於「一刀切」方法。然而,多年來,數據科學界已經獲得了足夠的經驗來總結演算法和典型任務之間匹配的關係。

下面我們就從 5 個方面來總結 XBGoost 和 TensorFLow 之間如何選擇。先附上總結列表。

XBGoost 與 Tensorflow 的模型選取比較

案例1:特徵難以分解?

我們從2012年就瞭解到,神經網路對於處理高維原始數據非常有效。圖像,視頻,文本和音頻都是高維原始數據的例子,很難預處理並表示為特徵。在這些情況下,使用NN的內置特徵提取單元(CNN,LSTM)可以在傳統領域的一些問題上獲得驚人的結果。

案例2:處理缺失值?

如果神經網路裡面有缺失值,則模型會報錯。這是因為在NN訓練期間求解的方程假定每個輸入變數的有效值。

但是,XGBoost有自己的處理缺失數據的方式。在訓練期間,XGBoost執行學習為每個特徵計算數據的子任務。許多現實世界的問題都缺少數據,這些數據本身包含有關目標的有價值信息。因此,對於缺失值處理 - XGBoost獲勝。

案例3:你的資金有多雄厚?

神經網路訓練往往需要並行計算,使其非常適合分散式訓練。也就是說,如果你的預算可以涵蓋使用 TPU 或 GPU 這樣昂貴的機器上的運行,那麼你就不用懼怕使用神經網路。

另一方面,如果您只使用數百萬條記錄,那麼 XGBoost 則可以在較便宜的多核 CPU 上進行訓練,並在比 NN 更短的時間內收斂。因此,如果數據數量不大 - XGBoost可能更實惠並且可以獲得類似的結果。

案例4:你有多少數據?

由於其基礎數據結構,XGBoost在並行化方式上受到限制,因此它可以處理的數據量很少。處理海量數據集的一種方法是將這些數據拆分為分片和堆疊模型 。

然而,對於神經網路,它通常需要數據「越多越好」。當參數數量一致時,即使數據量很大,神經網路也可以使其收斂,並且數據量大還可以降低泛化誤差。但對於較小的數據集,XBGoost通常收斂速度更快,誤差更小。

案例5:是否需要自定義輸出?

相較於 NN, XGBoost 會限制數據的輸出形式。它通常將1-d陣列作為記錄輸入並輸出單個數字(回歸)或概率向量(分類)。因此,配置 XGBoost 模型更容易。在 XGBoost 中,無需擔心數據的輸入輸出形式 - 只需提供看起來像表的pandas datafame,設置標籤列就可以了。

但是,神經網路通過張量的設計, 以處理高維矩陣。 NN的輸出和輸入形狀可以在數字,序列(矢量),圖像甚至視頻之間變化。因此對於傳統數據問題,例如基於結構化數據的廣告點擊預測 - 兩者都可以很好地工作。在需要多元數據形態問題上,NN可能是唯一有效的選擇!

案例6:我可以同時使用兩個模型嗎?

如果你不想選擇怎麼辦?在許多情況下,兩種模型的組合使用效果往往會優於每個單獨的模型的預測結果。研究已經發現,對同一數據集,堆疊模型可以實現較低的錯誤率, 但需要編寫合適的組合模型策略。


推薦閱讀:
相關文章