首頁>Club>
10
回覆列表
  • 1 # 機器之心Pro

    機器學習演算法雖多,卻沒有什麼普適的解決方案。決策樹、隨機森林、樸素貝葉斯、深度網路等等等等,是不是有時候覺得挑花了眼呢?福利來啦~Rajat Harlalka發表在Hackernoon的這篇文章將教你慧眼識精,快速挑選出滿意的演算法!

    機器學習既是一門科學,也是一種藝術。縱觀各類機器學習演算法,並沒有一種普適的解決方案或方法。事實上,有幾個因素會影響你對機器學習演算法的選擇。

    有些問題是非常特別的,需要用一種特定的解決方法。例如,如果你對推薦系統有所瞭解,你會發現它是一類很常用的機器學習演算法,用來解決一類非常特殊的問題。而其它的一些問題則非常開放,可能需要一種試錯方法(例如:強化學習)。監督學習、分類、迴歸等問題都是非常開放的,可以被用於異常檢測或建立更加廣泛的預測模型。

    此外,我們在選擇機器學習演算法時所做出的一些決定與演算法的最佳化或技術層面關係並不大,而更多地與業務決策相關。下面,讓我們一起來看看有哪些因素能幫你縮小機器學習演算法的選擇範圍。

    資料科學過程

    在你開始研究不同的機器學習演算法前,你需要對自己擁有的資料、面對的問題及相關約束有清晰的瞭解。

    理解你的資料

    當我們決定使用哪種演算法時,我們所擁有的資料的型別和形態起著關鍵性的作用。有些演算法可以利用較小的樣本集合工作,而另一些演算法則需要海量的樣本。特定的演算法對特定型別的資料起作用。例如,樸素貝葉斯演算法對處理待分類的輸入特別有效,但是對於缺失值則一點都不敏感。

    因此,你需要做到:

    瞭解你的資料

    1. 檢視總結統計和資料視覺化的結果

    百分比可以幫助你識別大多數資料的範圍

    平均數和中位數可以描述集中趨勢

    相關係數可以指出強的關聯性

    2. 資料視覺化

    箱形圖可以識別出異常值

    密度圖和直方圖可以顯示出資料的散佈情況

    散點圖可以描述二元關係

    資料清洗

    1. 處理缺失值。缺失的資料對於某些模型的影響比對其它模型更大。即使是對於那些被用於處理缺失資料的模型來說,它們也可能對缺失資料很敏感(某些變數的缺失資料可能導致預測效能變差)

    2. 選擇處理異常值的方法

    異常值在多維資料中十分常見。

    有些模型對異常值的敏感性比其它模型要低。通常而言,樹模型對於異常值的存在不太敏感。然而回歸模型、或者任何試圖使用方程的模型都會受到異常值的嚴重影響。

    異常值可能是糟糕的資料收集造成的,也可能是合理的極值。

    3. 資料需要被聚合嗎?

    資料增強

    1. 特徵工程是從原始資料中產生能夠被用於建模的資料的過程,可以起到以下幾種作用:

    使模型更容易被解釋(如資料分箱(binning))

    捕獲更復雜的關係(如神經網路)

    減少資料冗餘並降低資料維度(如主成分分析(PCA))

    重新縮放變數(如標準化或歸一化)

    2. 不同的模型可能有不同的特徵工程的要求。有的模型有內建的特徵工程。

    對問題進行分類

    下一步是對問題進行分類。這是一個需要分兩步實現的過程。

    1. 根據輸入分類:

    如果你擁有的是帶標籤的資料,那麼這就是一個監督學習問題。

    如果你擁有的是未標註過的資料,並且希望從中找到有用的結構,那麼這就是一個無監督學習問題。

    如果你想要透過與環境的互動來最佳化一個目標函式,那麼這就是一個強化學習問題。

    2. 根據輸出分類:

    如果模型的輸出是一個(連續的)數字,那麼這就是一個迴歸問題。

    如果模型的輸出是一個類別,那麼這就是一個分類問題。

    如果模型的輸出是一組用輸入資料劃分出的簇,那麼這就是一個聚類問題。

    你想發現一個異常點嗎?此時你面對的就是一個異常檢測問題。

    理解你要滿足的約束條件

    你需要考慮你能夠儲存資料的容量有多大?這取決於系統的儲存容量,你可能無法儲存若干 GB 大小的分類、迴歸模型或者若干 GB 的用於聚類分析的資料。例如,在嵌入式系統中,你就會面臨這種情況。

    對預測過程的速度是否有要求?在實時應用中,很顯然,儘快得出預測結果是十分重要的。例如,在自動駕駛問題中,應用必須儘可能快地對道路標誌進行分類,以免發生交通事故。

    對學習過程的速度是否有要求?在某些情況下,快速訓練模型是十分必要的:有時,你需要使用不同的資料集快速地實時更新你的模型。

    尋找可用的演算法

    當對自己的任務環境有了一個清晰的認識後,你就可以使用你所掌握的工具確定適用於待解決的問題並切實可行的演算法。一些影響你選擇模型的因素如下:

    模型是否滿足業務目標

    模型需要多少資料預處理工作

    模型有多準確

    模型的可解釋性如何

    模型執行的速度有多快:構造模型需要多久?模型做出預測需要多長時間?

    模型的可伸縮性如何

    模型的複雜度是一個影響演算法選擇的重要標準。一般來說,一個更復雜的模型具備下列特徵:

    它依賴於更多的特徵進行學習和預測(例如,使用十個而不是兩個特徵來預測目標)

    它依賴於更復雜的特徵工程(例如,使用多項式特徵、互動特徵或主成分)

    它有更大的計算開銷(例如,需要一個由 100 棵決策樹組成的隨機森林,而不是一棵單獨的決策樹)

    除此之外,同樣的機器學習演算法可以基於引數的個數和某些超引數的選擇而變得更加複雜。例如:

    迴歸模型可以擁有更多的特徵,或者多項式項和互動項。

    決策樹可以擁有更大或更小的深度。

    將相同的演算法變得更加複雜增加了發生過擬合的機率。

    常用的機器學習演算法

    線性迴歸

    這可能是機器學習中最簡單的演算法。例如,當你想要計算一些連續值,而不是將輸出分類時,可以使用迴歸演算法。因此,當你需要預測一個正在執行的過程未來的值時,你可以使用迴歸演算法。然而,當特徵冗餘,即如果存在多重共線性(multicollinearity)時,線性迴歸就不太穩定。

    在下列情況下可以考慮使用線性迴歸:

    從一個地方移動到另一個地方所需的時間

    預測下個月某種產品的銷售情況

    血液中的酒精含量對協調能力的影響

    預測每個月禮品卡的銷售情況,並改善年收入的估算

    Logistic 迴歸

    Logistic 迴歸執行二進位制分類,因此輸出二值標籤。它將特徵的線性組合作為輸入,並且對其應用非線性函式(sigmoid),因此它是一個非常小的神經網路的例項。

    logistic 迴歸提供了許多方法對你的模型進行正則化處理,因此正如在樸素貝葉斯演算法中那樣,你不必擔心你的特徵是否相關。該模型還有一個很好的機率化的解釋。不像在決策樹或者支援向量機中那樣,你可以很容易地更新你的模型以獲取新的資料。如果你想要使用一個機率化的框架,或者你希望在未來能夠快速地將更多的訓練資料融合到你的模型中,你可以使用 logistic 迴歸演算法。logistic 迴歸還可以幫助你理解預測結果背後起作用的因素,它不完全是一個黑盒方法。

    在下列情況下可以考慮使用 logistic 迴歸演算法:

    預測客戶流失

    信用評分和欺詐檢測

    評價市場營銷活動的效果

    決策樹

    決策樹很少被單獨使用,但是不同的決策樹可以組合成非常高效的演算法,例如隨機森林或梯度提升樹演算法。

    決策樹很容易處理特徵互動,並且決策樹是一種非引數模型,所以你不必擔心異常值或者資料是否是線性可分的。決策樹演算法的一個缺點是,它們不支援線上學習,因此當你要使用新的樣本時,你不得不重新構建決策樹。決策樹的另一個缺點是,它很容易發生過擬合,而這就是像隨機森林(或提升樹)這樣的整合學習方法能夠派上用場的地方。決策樹也需要大量的記憶體空間(擁有的特徵越多,你的決策樹可能會越深、越大)

    決策樹能夠很好地幫助你在諸多行動路徑中做出選擇:

    做出投資決策

    預測客戶流失

    找出可能拖欠銀行貸款的人

    在「建造」和「購買」兩種選擇間進行抉擇

    銷售主管的資質稽核

    K-均值

    有時,你完全沒有資料的標籤資訊,並且你的目的是根據物件的特徵來為其打上標籤。這種問題被稱為聚類任務。聚類演算法可以在這種情況下被使用:例如,當你有一大群使用者,你希望根據他們共有的一些屬性將其劃分到一些特定的組中。

    如果在你的問題宣告中有這樣的問題:例如,找出一群個體的組織形式,或將某些東西分組,或找出特定的組。這時,你就應該使用聚類演算法。

    該方法最大的缺點是,K-均值演算法需要提前知道你的資料會有多少簇,因此這可能需要進行大量的試驗去「猜測」我們最終定義的簇的最佳個數——K。

    主成分分析(PCA)

    主成分分析能夠對資料進行降維。有時,你擁有各種各樣的特徵,這些特徵之間的相關性可能很高,而模型如果使用如此大量的資料可能會產生過擬合現象。這時,你可以使用主成分分析(PCA)技術。

    主成分分析(PCA)能夠起作用的關鍵因素是:除了低維的樣本表徵,它還提供了各種變數的一種同步的低維表徵。同步的樣本和變數的表徵提供了一種能夠視覺化地找到能夠表示一組樣本的特徵的變數的方法。

    支援向量機

    支援向量機(SVM)是一種在模式識別和分類問題中被廣泛應用的監督機器學習技術——當你的資料恰好有兩類時。

    支援向量機準確率高,對於防止過擬合很好的理論保障。當你使用一個合適的核函式時,即使你的資料在基(低維)特徵空間中是線性不可分的,他們也可以很好地工作。支援向量機在文字分類問題中非常流行,在該問題中,輸入是一個維度非常高的空間是很正常的。然而,SVM 是一種記憶體密集型演算法,它很難被解釋,並且對其進行調優十分困難。

    在下列現實世界的應用中,你可以使用支援向量機:

    發現患有糖尿病等常見疾病的人

    手寫字元識別

    文字分類——將文章按照話題分類

    樸素貝葉斯

    這是一種基於貝葉斯定理的分類技術,它很容易構建,非常適用於大規模資料集。除了結構簡單,據說樸素貝葉斯的表現甚至比一些複雜得多的分類方法更好。當 CPU 和記憶體資源有限時,樸素貝葉斯演算法也是一個很好的選項。

    樸素貝葉斯非常簡單,你僅僅是在做大量的計數工作。如果樸素貝葉斯的條件獨立假設確實成立,樸素貝葉斯分類器的收斂速度會比 logistic 迴歸這樣的判別模型更快,因此需要的訓練資料更少。即使樸素貝葉斯的假設不成立,樸素貝葉斯分類器往往也能很好地完成任務。如果你想使用一種快速的、簡單的、效能也不錯的模型,樸素貝葉斯是一個很好的選擇。這種演算法最大的缺點就是它不能學習到特徵之間的相互作用。

    在下列真實世界的應用中,你可以使用樸素貝葉斯:

    情感分析和文字分類

    類似於 Netflix、Amazon 這樣的推薦系統

    識別垃圾郵件

    人臉識別

    隨機森林

    隨機森林是一種決策樹的整合方法。它能夠同時解決具有大規模資料集的迴歸問題和分類問題,還有助於從數以千計的輸入變數中找出最重要的變數。隨機森林具有很強的可伸縮性,它適用於任何維數的資料,並且通常具有相當不錯的效能。此外,還有一些遺傳演算法,它們可以在具有最少的關於資料本身的知識的情況下,很好地擴充套件到任何維度和任何資料上,其中最簡單的實現就是微生物遺傳演算法。然而,隨機森林學習的速度可能會很慢(取決於引數設定),並且這種方法不能迭代地改進生成模型。

    在下列現實世界的應用中,你可以使用隨機森林:

    預測高危患者

    預測零件在生產中的故障

    預測拖欠貸款的人

    神經網路

    神經網路中包含著神經元之間連線的權重。這些權重是平衡的,逐次對資料點進行學習。當所有的權重都被訓練好後,如果需要對新給定的資料點進行迴歸,神經網路可以被用於預測分類結果或一個具體數值。利用神經網路,可以對特別複雜的模型進行訓練,並且將其作為一種黑盒方法加以利用,而在訓練模型之前,我們無需進行不可預測的複雜特徵工程。透過與「深度方法」相結合,甚至可以採用更加不可預測的模型去實現新任務。例如,最近人們已經透過深度神經網路大大提升了物體識別任務的結果。深度學習還被應用於特徵提取這樣的非監督學習任務,也可以在人為干預更少的情況下,從原始影象或語音中提取特徵。

    另一方面,神經網路很難被解釋清楚,其引數設定也複雜地讓人難以置信。此外,神經網路演算法也都是資源密集型和記憶體密集型的。

    SCIKIT 參考手冊

    Scikit learning 為大家提供了一個非常深入的、解釋地很清楚的流程圖,它能夠幫助你選擇正確的演算法。我認為此圖十分方便。

    結論

    一般來說,你可以根據上面介紹的要點來篩選出一些演算法,但是要想在一開始就知道哪種方法最好是很難的。你最好多迭代幾次選擇演算法的過程。將你的資料輸入給那些你確定的潛在優秀機器學習演算法,透過並行或序列的方式執行這些演算法,最終評估演算法效能,從而選擇出最佳的演算法。

    在最後,我想告訴你:為現實生活中的問題找到正確的解決方案,通常不僅僅是一個應用數學方法的問題。這要求我們對業務需求、規則和制度、相關利益者的關注點有所瞭解,並且具備大量的專業知識。在解決一個機器學習問題的同時,能夠結合並平衡這些問題是至關重要的,那些能做到這一點的人可以創造最大的價值。

  • 2 # 騰訊技術工程

    決策流程

    選擇機器學習演算法時,需要考慮以下因素:

    需要預測什麼?分類,迴歸,還是聚類?

    演算法的複雜度,應用在大資料上是否可行?

    演算法有沒有迭代(相對於batch)的版本?能否實現線上學習或streaming?

    演算法是否需要可解釋性?

    特徵是否高維?如高維是否考慮用PCA或Lasso降維?

    演算法的準確率,是否傾向於欠擬合或過擬合?

    引數模型中引入的“prior”對該資料集是否合理?

    同時我們也需要考慮模型的表現,如模型訓練時,神經網路的比SVM快(why?), 而預測步驟,SVM比神經網路快(why?)。

    模型選擇流程圖

    新手選擇合適的模型,可以參照下面Scikit-learn、SAS或Microsoft Azure的演算法流程圖。

    [ Scikit-learn 演算法流程圖選擇 ]

    [ SAS演算法流程圖 ]

    [ Microsoft Azure演算法流程圖 ]

    整合學習(Ensemble methods)

    基於樹模型的演算法,需要理解從下面模型的變化:決策樹-> bagging trees -> 隨機森林 -> Gradient Boosting trees。

    準確率增加

    解釋性下降

    計算時間和需要的記憶體上升(boosting演算法無法平行計算)

    我們比較下整合學習常見Bagging, Boosting和Blending方法:

    Bagging:用Boostrap有放回抽樣的方法抽取樣本建不同的模型, 每個模型投票時權重相等

    Boosting :Gradient boosting trees用殘差訓練下一個模型,改進預測效果。

    Blending :分別訓練不同的基本模型,將各個基本模型的預測結果,作為最終模型的特徵輸入。如以線性模型作終模型,相當於把各個基本模型去權重的到最後的預測結果;如用更復雜的模型作最終模型,則可用非線性方法結合不同基本模型的結果。

    Kaggle比賽中排名頂尖的選手經常採用整合學習的方法,效果常比單獨的模型好,但需要更多的計算資源和複雜的超引數調節。

    下圖展示了不同scikit-learn分類演算法,對於不同訓練集的效果比較。

    [ scikit-learn分類演算法效果比較 ]

    非預測問題的模型選擇

    學習了複雜的分類模型後,大家可能有疑問:為什麼還要用老式傳統的邏輯迴歸(Logistic regression)模型呢?實際專案中,我們有事不僅希望模型的預測效果好誤差小,也需要模型簡單可解釋,在有監督模型裡,能夠理解特徵對y的影響方向和大小。

  • 3 # 進軍的coding

    1、首先機器學習演算法分有監督和無監督;

    2、其次任務是分類還是迴歸或是聚類;

    3、具體情況指標要求、資料情況、複雜性等

    透過這幾步分析基本就能選定合適的演算法

  • 中秋節和大豐收的關聯?
  • 門禁電機好壞怎麼檢測?