在機器學習領域裡,不存在一種萬能的演算法可以完美解決所有問題,尤其是像預測建模的監督學習裡。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

比方說,神經網路不見得比決策樹好,同樣反過來也不成立。

最後的結果是有很多因素在起作用的,比方說資料集的大小以及組成。

所以,針對你要解決的問題,最好是嘗試多種不同的演算法。並借一個測試集來評估不同演算法之間的表現,最後選出一個結果最好的。

當然,你要選適合解決你問題的演算法來嘗試。

比方說,要打掃房子,你會用真空吸塵器,掃把,拖把;你絕對不會翻出一把鏟子來開始挖坑,對吧。

大的原則

不過呢,對於所有預測建模的監督學習演算法來說,還是有一些通用的底層原則的。

機器學習演算法,指的是要學習一個目標函式,能夠儘可能地還原輸入和輸出之間的關係。

然後根據新的輸入值X,來預測出輸出值Y。精準地預測結果是機器學習建模的任務。

So,Top10機器學習演算法,瞭解一下。

1. 線性迴歸 

統計學與機器學習領域裡研究最多的演算法。

做預測建模,最重要的是準確性(儘可能減小預測值和實際值的誤差)。哪怕犧牲可解釋性,也要儘可能提高準確性。

為了達到這個目的,我們會從不同領域(包括統計學)參考或照搬演算法。

線性迴歸可用一條線表示輸入值X和輸出值Y之間的關係,這條線的斜率的值,也叫係數。

640?wx_fmt=jpeg

比方說,y = B0 + B1*x

我們就可以根據X值來預測Y值。機器學習的任務就是找出係數B0和B1。

從資料中建立線性迴歸的模型有不同的方法,比方說線性代數的最小二乘法、梯度下降優化。

線性迴歸已經存在了200多年,相關研究已經很多了。用這個演算法關鍵在於要儘可能地移除相似的變數以及清洗資料。

對演算法萌新來說,是最簡單的演算法了。

2 .邏輯迴歸

這方法來自統計學領域,是一種可以用在二元分類問題上的方法。

邏輯迴歸,和線性迴歸相似,都是要找出輸入值的係數權重。不同的地方在於,對輸出值的預測改成了邏輯函式。

邏輯函式看起來像字母S,輸出值的範圍是0到1。

把邏輯函式的輸出值加一個處理規則,就能得到分類結果,非0即1。


比方說,可以規定輸入值小於0.5,那麼輸出值就是1。

640?wx_fmt=jpeg

△ 邏輯迴歸

這個演算法還可以用來預測資料分佈的概率,適用於需要更多資料論證支撐的預測。

和線性迴歸相似,如果把和輸出不相干的因子或者相近的因子剔除掉的話,邏輯迴歸演算法的表現會更好。

對於二元分類問題,邏輯迴歸是個可快速上手又有效的演算法。

3.線性判別分析

邏輯迴歸演算法,只能用於二分問題。

當輸出的結果類別超過兩類的時候,就要用線性判別分析演算法了。

這種演算法的視覺化結果還比較一目瞭然,能看出資料在統計學上的特徵。這上面的結果都是分別計算得到的,單一的輸入值可以是每一類的中位數,也可以是每一類值的跨度。

640?wx_fmt=png

△ 線性判別分析

基於對每種類別計算之後所得到的判別值,取最大值做出預測。

這種方法是假定資料符合高斯分佈。所以,最好在預測之前把異常值先踢掉。

對於分類預測問題來說,這種演算法既簡單又給力。

4. 分類與迴歸樹

預測模型裡,決策樹也是非常重要的一種演算法。

可以用分兩叉的樹來表示決策樹的模型。每一個節點代表一個輸入,每個分支代表一個變數(預設變數是數字型別)

640?wx_fmt=png

△ 決策樹

決策樹的葉節點指的是輸出變數。預測的過程會經過決策樹的分岔口,直到最後停在了一個葉節點上,對應的就是輸出值的分類結果。

決策樹很好學,也能很快地得到預測結果。對於大部分問題來說,得到的結果還挺準確,也不要求對資料進行預處理。

5.樸素貝葉斯分類器

這種預測建模的演算法強大到超乎想象。


這種模型,可以直接從你的訓練集中計算出來兩種輸出類別的概率。

一個是每種輸出種類的概率;另外一個,是根據給定的x值,得到的是有條件的種類概率。

一旦計算之後,概率的模型可以用貝葉斯定理預測新的資料。

當你的資料是實數值,那麼按理說應該是符合高斯分佈的,也就很容易估算出這個概率。

640?wx_fmt=png

△ 貝葉斯定理

樸素貝葉斯定理之所以名字裡有個“樸素”,是因為這種演算法假定每個輸入的變數都是獨立的。

不過,真實的資料不可能滿足這個隱藏前提。儘管如此,這個方法對很多複雜的問題還是很管用的。

6.K近鄰演算法

最近K近鄰的模型表示,就是整個訓練集。很直截了當,對吧?

對新資料的預測,是搜尋整個訓練集的值,找到K個最近的例子(literally的鄰居)。然後總結K個輸出的變數。

這種演算法難就難在,怎麼定義兩個資料的相似度(相距多近算相似)。

如果你的特徵(attributes)屬於同一個尺度的話,那最簡單的方法是用歐幾里得距離。這個數值,你可以基於每個輸入變數之間的距離來計算得出。

640?wx_fmt=png

△ 最近鄰法

最近鄰法,需要佔用大量的記憶體空間來放資料,這樣在需要預測的時候就可以進行即時運算(或學習)。也可以不斷更新訓練集,使得預測更加準確。

距離或親密度這個思路遇到更高維度(大量的輸入變數)就行不通了,會影響演算法的表現。

這叫做維度的詛咒。

當(數學)空間維度增加時,分析和組織高維空間(通常有成百上千維),因體積指數增加而遇到各種問題場景。

所以最好只保留那些和輸出值有關的輸入變數。

7.學習向量量化

最近鄰法的缺點是,你需要整個訓練集。

而學習向量量化(後簡稱LVQ)這個神經網路演算法,是自行選擇訓練樣例。

640?wx_fmt=png

LVQ,是一組向量,也叫碼本。一開始,向量是隨機選的,經過幾次學習演算法迭代之後,慢慢選出最能代表訓練集的向量。

學習完成後,碼本就可以用來預測了,就像最近鄰法那樣。計算新輸入樣例和碼本的距離,可以找出最相近的鄰居,也就是最匹配的碼本。

如果你重新調整資料尺度,把資料歸到同一個範圍裡,比如說0到1之間,那就可以獲得最好的結果。

如果用最近鄰法就獲得了不錯的結果,那麼可以再用LVQ優化一下,減輕訓練集儲存壓力。

8.支援向量機(簡稱SVM)

這可能是機器學習裡最受歡迎的演算法了。

超平面是一條可以分割輸入變數的空間的“線”。

支援向量機的超平面,是能把輸入變數空間儘可能理想地按種類切割,要麼是0,要麼是1。

在二維空間裡,你可以把超平面可以分割變數空間的那條“線”。這條線能把所有的輸入值完美一分為二。

SVM的學習目標就是要找出這個超平面。

640?wx_fmt=jpeg

△ 支援向量機

超平面和捱得最近的資料點之間的距離,叫做邊緣。

最理想的超平面,是可以無誤差地劃分訓練資料。 也就是說,每一類資料裡距離超平面最近的向量與超平面之間的距離達到最大值。

這些點就叫做支援向量,他們定義了超平面。

從實際操作上,最理想的演算法是能找到這些把最近向量與超平面值距離最大化的點。

支援向量可能是最強的拿來就用的分類器了。值得用資料集試試。

9.隨機森林

隨機森林,屬於一種重複抽樣演算法,是最受歡迎也最強大的演算法之一。

在統計學裡,bootstrap是個估算值大小很有效的方法。比方說估算平均值。

從資料庫中取一些樣本,計算平均值,重複幾次這樣的操作,獲得多個平均值。然後平均這幾個平均值,希望能得到最接近真實的平均值。

而bagging演算法,是每次取多個樣本,然後基於這些樣本建模。當要預測新資料的時候,之前建的這些模型都做次預測,最後取這些預測值的平均數,盡力接近真實的輸出值。

640?wx_fmt=png
隨機森林在這個基礎上稍微有點變化。

它包含多個決策樹的分類器, 並且其輸出的類別是由個別樹輸出的類別的眾數而定。

如果你的高方差演算法取得了不錯的結果(比方說決策樹),那麼用隨機森林的話會進一步拿到更好的結果。

10. 提升(Boosting)演算法和自適應增強(Adaboost)演算法

Boosting的核心是,對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。

所得到的第二個弱分類器會糾正第一個弱分類器的誤差。弱分類器的不斷疊加,直到預測結果完美為止。

Adaboost演算法是首個成功用於二元分類問題的提升演算法。

現在有很多提升方法都是基於Adaboost。

640?wx_fmt=jpeg

AdaBoost適用於短的決策樹。

在第一個樹建立出來之後,不同的樣本訓練之後的表現可以作參考,用不同的樣本訓練弱分類器,然後根據錯誤率給樣本一個權重。

很難預測的訓練資料應該給更多的權重,反過來,好預測的就少一點權重。

模型按順序一個一個建,每個訓練資料的權重都會受到上一個決策樹表現的影響。

當所有的決策樹都建好之後,看新資料的預測表現,結果準不準。

因為訓練資料對於矯正演算法非常重要,所以要確保資料清洗乾淨了,不要有奇奇怪怪的偏離值。

640?wx_fmt=jpeg

最後的最後

面對海量的機器學習演算法,萌新最愛問的是,“我該選什麼演算法?”

在回答這個問題之前,要先想清楚:

  • 資料的數量、質量、本質;

  • 可供計算的時間;

  • 這個任務的緊急程度;

  • 你用這個資料想做什麼。

要知道,即使是老司機,也無法閉著眼睛說哪個演算法能拿到最好的結果。還是得動手試。

其實機器學習的演算法很多的,以上只是介紹用得比較多的型別,比較適合萌新試試手找找感覺。

原文連結:

https://www.kdnuggets.com/2018/02/tour-top-10-algorithms-machine-learning-newbies.html

一文讀懂ML中的解析解與數值解

來源:資料派THU 作者:Jason Brownlee 翻譯:王雨桐 校對:丁楠雅

你是否有如下疑問:

  • 什麼資料最適合我的問題?

  • 什麼演算法最適合我的資料?

  • 如何對我的演算法進行調參?

本文將為你解釋為什麼沒有一個機器學習專家能對上述問題給出直接答案。事實上,找到合適的資料、演算法、引數是應用機器學習的難題,也是你唯一需要努力解決的部分。

解析解與數值解

在數學運算中,有些問題可以通過解析法和數值法解決。

  • 解析解是用一種易於理解的形式描述問題,並計算精確解。

  • 數值解是先猜測解,隨後檢驗此解是否足以解決問題。

平方根是一個能同時用兩種方法解決的案例。

但通常我們更偏愛解析法。因為這種方法更快,並且能得到精確的解。儘管如此,有時由於時間和硬體效能的限制,我們必須採用數值法

找到線性迴歸方程的係數是一個很好的例子。它既可以通過解析法計算,比如使用線性代數;但當我們不能把所有資料都儲存在一臺電腦裡來進行解析計算時,我們也可以運用數值法解決問題,比如通過梯度下降法。所以,當解析解是未知的時候,我們只能藉助數值法。

解析解

一旦問題被界定之後,很多問題都有明確的解。我們可以遵循一系列邏輯步驟來計算最終的精確解。例如當給定一個具體的算術問題時(如加法或減法),你知道如何操作。線上性代數中,有一系列的方法可以用來分解矩陣,這取決於矩陣的特性是方陣、矩形陣、包含實數還是虛數等等。

附連結(機器學習中分解矩陣的簡介):

https://machinelearningmastery.com/introduction-to-matrix-decompositions-for-machine-learning/

我們可以將其更廣泛地拓展到軟體工程中,對於那些反覆出現的問題,無論具體的應用場景如何,我們可以通過一系列廣受好評的設計來解決它們。例如用訪問者模式對列表中每一項執行操作。

一些問題在機器學習中已經界定明確並且得到了解析解。例如無論資料集中整數值有多少個,我們都可以用同樣的方法很容易地將一個分類變數變為獨熱編碼(one hot encoding)。然而不幸的是,機器學習中我們關心的大部分問題都沒有解析解。

附連結(為什麼在機器學習中使用獨熱編碼):

https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/

數值解

很多我們感興趣的問題並沒有精確解,或者至少沒得到解析解。我們必須要猜測可能的解並測試它們,看看解是否合適。這涉及到構建問題並在一系列候選解中進行試錯。從本質上來看,尋找數值解的過程可以看作一個搜尋的過程。

這些解有一些有趣的特性:

  • 不合適的解與合適的解是很容易區分的。

  • 我們通常不知道合適的解長什麼樣,只能在已經測試的候選解中進行對比。

  • 我們的目標往往是找到一個近似的或“足夠好”的解而不是唯一的最佳解。

最關鍵的是最後一點,因為通常情況下,我們嘗試用數值解來解決的問題都非常有挑戰性(因為我們沒有簡單的方法來解決它)。這種情況下,任何足夠好的解都很實用。此外,需要強調的是一個給定的問題會有多種解,其中的許多解都足以解決問題。但機器學習中我們感興趣的很多問題都需要數值解。比這更糟的是,隨著進度的推進,每個子問題的數值解會影響後續子問題的解空間。

機器學習中的數值解

應用機器學習是個數值性質的學科。一個給定的機器學習模型,其核心是個優化問題,本質上是要尋找一系列有未知引數的項來完成等式。從廣義上來講,每個演算法都有不同的“等式”和“項”。

640?wx_fmt=jpeg

等式一般是容易計算的,以便估計給定項的引數。但是對於給定的資料集,我們往往不知道要用什麼項多少項才能得到“不錯的”甚至是“最佳的”預測。

這就是我們經常要解決的數值優化問題。之所以是個數值問題,是因為我們要用有噪聲的、不完整的和易出錯的有限觀測樣本來解決優化問題。模型會盡可能地解釋資料並在這些觀測的輸入和輸出之間形成對映。

機器學習中更廣泛的經驗解

作為機器學習演算法的核心,數值優化問題實際上屬於一類更廣泛的問題。具體的優化問題受很多因素影響,這些因素在很大程度上影響了最終解的“優化程度”,並且都沒有解析解。例如:

  • 使用什麼資料

  • 使用多少資料

  • 在建模前如何處理資料

  • 使用什麼模型或演算法

  • 如何給演算法調參

  • 如何評估演算法效果

客觀地講,以上這些是機器學習中的開放性問題的一部分。它們沒有解析解,你必須探索哪些元素的組合能最好地解決你的問題,對各種組合方案進行測試和評估,這個過程相當於一個巨大的搜尋問題。在這種情況下,你需要知道其他候選方案的得分,才能知道高分應當是多少。除了試錯法,還可以從其他已經得到解的相關問題中借鑑想法,除此以外沒有其他客觀路徑能解決這個問題。

這種憑經驗的方法經常被稱為“搜尋式機器學習”,後文提供的文獻中進行了進一步探索。

回答你的疑問

我們回到開頭的問題,在一個具體的建模預測問題中,什麼樣的資料、演算法和引數最合適呢。沒人能通過看你的資料或問題描述,就告訴你怎樣解決它最好,甚至是相對好。經驗可以幫助領域內的專家找到著手點,並幫助他們驗證早期猜測,但通常情況下早期猜測過於複雜或存在低階錯誤。

要找的足夠好的解,往往需要預測建模。並且作為機器學習從業者,這也是你的職責。這是應用機器學習的艱難工作,也是需要練習的部分。掌握好這個部分可以使你在業內更有競爭力。

拓展閱讀

關於本文如果想了解更多,可以參閱以下資源:

  • 基於資料驅動選擇機器學習演算法

https://machinelearningmastery.com/a-data-driven-approach-to-machine-learning/

  • 將應用機器學習問題歸為搜尋問題的簡介

https://machinelearningmastery.com/applied-machine-learning-as-a-search-problem/

  • 為什麼應用機器學習很難?

https://machinelearningmastery.com/applied-machine-learning-is-hard/

  • 解析法和數值法有什麼差別?

https://math.stackexchange.com/questions/935405/what-s-the-difference-between-analytical-and-numerical-approaches-to-problems

總結

通過本文的介紹,你應當明白瞭解析解和數值解之間的區別,以及應用機器學習的經驗性質。具體來說如下:

  • 解析解是得到精確解的邏輯過程

  • 數值解是更慢的試錯過程並且只能得到估計解。

  • 在對一個具體的預測建模問題選擇資料、演算法和引數時,應用機器學習的核心思想是尋找一個數值解

原文標題:Analytical vs Numerical Solutions in Machine Learning

原文連結:https://machinelearningmastery.com/analytical-vs-numerical-solutions-in-machine-learning/

譯者簡介


640?wx_fmt=png

王雨桐,統計學在讀,資料科學碩士預備,跑步不停,彈琴不止。夢想把資料視覺化當作藝術,目前日常是摸著下巴看機器學習。

翻譯組招募資訊

工作內容:需要一顆細緻的心,將選取好的外文文章翻譯成流暢的中文。如果你是資料科學/統計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。

你能得到:定期的翻譯培訓提高志願者的翻譯水平,提高對於資料科學前沿的認知,海外的朋友可以和國內技術應用發展保持聯絡,THU資料派產學研的背景為志願者帶來好的發展機遇。

其他福利:來自於名企的資料科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的夥伴。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

人工智慧賽博物理作業系統

AI-CPS OS

相關文章