這個問題沒有直接而明確的答案。答案取決于許多因素,比如問題陳述和您想要的輸出類型、數(shù)據(jù)的類型和大小、可用的計算時間、特征數(shù)量以及數(shù)據(jù)中的觀測等。
以下是選擇算法時要考慮的幾個重要因素。
1.訓(xùn)練數(shù)據(jù)的大小
通常建議收集大量數(shù)據(jù)以獲得可靠的預(yù)測。然而,數(shù)據(jù)的可用性往往是制約因素。因此,如果訓(xùn)練數(shù)據(jù)較小,或者數(shù)據(jù)集的觀測數(shù)量較少,特征數(shù)量較多(比如遺傳或文本數(shù)據(jù)),應(yīng)選擇高偏差 / 低方差的算法,比如線性回歸、樸素貝葉斯或線性 SVM。
如果訓(xùn)練數(shù)據(jù)足夠大,觀測數(shù)量與特征數(shù)量相比較多,可以選擇低偏差 / 高方差算法,比如 KNN、決策樹或內(nèi)核 SVM。
2.輸出的準(zhǔn)確性及 / 或可解釋性
模型的準(zhǔn)確性意味著函數(shù)預(yù)測給定觀測的響應(yīng)值,這個響應(yīng)值接近該觀測的實際響應(yīng)值。高度可解釋的算法(線性回歸等限制性模型)意味著,人們可以輕松理解任何單個預(yù)測變量如何與響應(yīng)相關(guān)聯(lián),而靈活的模型提供了更高的準(zhǔn)確性,但是以低可解釋性為代價。
圖 1. 使用不同的統(tǒng)計學(xué)習(xí)方法,表示了準(zhǔn)確性和可解釋性之間的取舍
一些算法稱為限制性算法,因為它們生成映射函數(shù)的一小批形狀。比如說,線性回歸是一種限制性方法,因為它只能生成直線等線性函數(shù)。
一些算法稱為靈活性算法,因為它們生成映射函數(shù)的一大批形狀。比如說,k=1 的 KNN 非常靈活,因為它會考慮每個輸入數(shù)據(jù)點以生成映射輸出函數(shù)。下圖顯示了靈活性算法和限制性算法之間的取舍。
圖 2. 使用不同的統(tǒng)計學(xué)習(xí)方法,表示了靈活性和可解釋性之間的取舍
現(xiàn)在,使用哪種算法取決于業(yè)務(wù)問題的目標(biāo)。如果目標(biāo)是推理,限制性模型更好,因為它們極易于解釋。如果目標(biāo)是更高的準(zhǔn)確性,靈活性模型更好。隨著某種方法的靈活性提高,其可解釋性一般會降低。
3.速度或訓(xùn)練時間
更高的準(zhǔn)確性通常意味著更長的訓(xùn)練時間。此外,算法需要更多時間來訓(xùn)練龐大的訓(xùn)練數(shù)據(jù)。在實際應(yīng)用中,算法的選擇主要取決于這兩個因素。
樸素貝葉斯、線性和邏輯回歸等算法易于實現(xiàn),且運行迅速。像需要調(diào)整參數(shù)的 SVM、高收斂時間的神經(jīng)網(wǎng)絡(luò)和隨機森林等算法需要大量的時間來訓(xùn)練數(shù)據(jù)。
4.線性
許多算法的運作基于這個假設(shè):類可以被一條直線(或更高維度的模擬)來分隔。示例包括邏輯回歸和支持向量機。線性回歸算法假設(shè)數(shù)據(jù)趨勢遵循一條直線。如果數(shù)據(jù)是線性的,這些算法的性能就相當(dāng)不錯。
然而,數(shù)據(jù)并不總是線性的,因此我們需要可以處理高維和復(fù)雜數(shù)據(jù)結(jié)構(gòu)的其他算法。例子包括內(nèi)核 SVM、隨機森林和神經(jīng)網(wǎng)絡(luò)。
找出線性的最佳方法是擬合線性線,或者運行邏輯回歸或 SVM,以檢查剩余錯誤。較多的錯誤意味著數(shù)據(jù)不是線性的,需要復(fù)雜的算法來擬合。
5.特征數(shù)量
數(shù)據(jù)集可能有大量特征,這些特征可能并非全部相關(guān)、重要。針對某種類型的數(shù)據(jù),比如遺傳數(shù)據(jù)或文本數(shù)據(jù),與數(shù)據(jù)點的數(shù)量相比,特征的數(shù)量可能非常大。
大量特征會阻礙一些學(xué)習(xí)算法,從而使訓(xùn)練時間過長。SVM 更適合具有大片特征空間和較少觀測的數(shù)據(jù)。應(yīng)該使用 PCA 和特征選擇技術(shù),以降低維度,并選擇重要的特征。
這是一份方便的速查表,詳細表明了可用于不同類型的機器學(xué)習(xí)問題的算法。
機器學(xué)習(xí)算法可以分為監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)和強化學(xué)習(xí)。這篇文章逐步介紹了如何使用速查表的過程速查表主要分為兩種學(xué)習(xí)類型:
在訓(xùn)練數(shù)據(jù)具有對應(yīng)于輸入變量的輸出變量這種情況下,采用監(jiān)督學(xué)習(xí)算法。該算法分析輸入數(shù)據(jù),并學(xué)習(xí)函數(shù),以映射輸入變量和輸出變量之間的關(guān)系。
監(jiān)督學(xué)習(xí)可以進一步分為回歸、分類、預(yù)測和異常檢測。
當(dāng)訓(xùn)練數(shù)據(jù)沒有響應(yīng)變量時,使用無監(jiān)督學(xué)習(xí)算法。這類算法試圖找到數(shù)據(jù)中的內(nèi)在模式和隱藏結(jié)構(gòu)。聚類算法和降維算法是兩類典型的無監(jiān)督學(xué)習(xí)算法。
下面的信息圖簡單地解釋了回歸、分類、異常檢測和聚類以及可以運用這每一種算法的示例。
嘗試解決新問題時須考慮的要點如下:
定義問題。問題的目標(biāo)是什么?
探索數(shù)據(jù),并熟悉數(shù)據(jù)。
從基本模型開始,構(gòu)建基準(zhǔn)模型,然后嘗試較復(fù)雜的方法。
話雖如此,始終記得“更好的數(shù)據(jù)常常勝過更好的算法”。設(shè)計好的特征同等重要。嘗試一堆算法,并比較各自的性能,為您的具體任務(wù)選擇最佳算法。此外,嘗試集成學(xué)習(xí)(ensemble)方法,因為這種方法提供的準(zhǔn)確性通常好得多。