-
1 # 丁丁金服理財分析師
-
2 # 機器之心Pro
近段時間以來,我們頻頻聽到「機器學習(machine learning)」這個詞。幾十年來,機器學習實際上已經變成了一門獨立的領域。由於現代計算能力的進步,我們最近才能夠真正大規模地利用機器學習。而實際上機器學習是如何工作的呢?答案很簡單:演算法(algorithm)。
機器學習是人工智慧的一種,從本質上講,就是計算機可以在無需程式設計的情況下自己學習概念(concept)。這些計算機程式一旦接觸新的資料,就將會改變它們的「思考」(或者輸出)。為了實現機器學習,演算法是必需的。演算法被寫入計算機並在其剖析資料時給與其需要遵循的規則。
機器學習演算法經常被用於預測分析。在商業中,預測分析可以用於告訴企業未來最有可能發生什麼。例如,使用預測分析演算法,線上 T 恤零售商可以使用當前的資料來預測下個月他們將會售出多少 T 恤。
迴歸或分類雖然機器學習也可以用於其它的用途,但是我們將在本指南中著重於預測,並基本涵蓋了機器學習的主要演算法。預測是一種基於輸入變數來估計輸出變數的過程。比如,如果我們輸入特定房子的特徵,則可以預測售價。預測問題分為兩大類:
迴歸問題(Regression Problems):我們想要預測的變數是數字(例如,房子的價格)分類問題(Classification Problems):我們想要預測的變數是「是/否」的答案(例如,某一裝置是否會經歷裝置故障)現在我們已經介紹了機器學習在預測方面的應用,我們可以討論機器學習演算法,其分為 3 個組別:線性模型(linear models)、樹型模型(tree-based models)、和神經網路(neural networks)。
什麼是線性模型演算法線性模型使用簡單的公式透過一組資料點來查詢「最優擬合」線。透過你已知的變數方程(比如,原料),你可以求出你想要預測的變數(例如,烘烤蛋糕需要多長時間)。為了求出預測量,我們輸入已知的變數得到答案。換句話說,為了求出烘烤蛋糕需要多長時間,我們只需要輸入原料。
例如,要烘烤蛋糕,分析過後我們得到這個方程:t = 0.5x + 0.25y,其中 t 烤蛋糕的時間,x 為蛋糕糊的重量,y = 1 表示為巧克力蛋糕而 0 表示為非巧克力蛋糕。所以讓我們假設,我們有 1kg 的蛋糕糊並且我們想要一個巧克力蛋糕,我們輸入我們的數字來建立這個方程:t = 0.5(1) + (0.25)(1) = 0.75,即 45 分鐘。
線性迴歸
線性迴歸,也稱為「最小二乘迴歸(least squares regression)」,是線性模型的最標準的形式。對於迴歸問題(我們設法預測的變數是數字),線性迴歸是最簡單的線性模型。
邏輯迴歸
邏輯迴歸是為分類問題進行簡單調整過的線性迴歸(我們設法預測的變數是「是/否」的答案)。由於其構造,邏輯迴歸非常適合於分類問題
線性迴歸和邏輯迴歸的缺點
線性迴歸和邏輯迴歸都有著相同的缺點。兩者都具有「過擬合(overfit)」的趨勢,這意味著模型太適應於資料而犧牲了推廣到先前未知的資料的能力。因此,這兩個模型經常需要進行規範,這意味著它們有一定的懲罰(penalty)以防止過擬合。另一個線性模型的缺點是,因為它們太簡單了,所以往往不能預測更復雜的行為。
什麼是樹型模型樹型模型有助於探索資料集,並可視化預測的決策規則。當你聽到關於樹型模型的東西時,你可以將其想成是決策樹或分支操作序列。樹型模型高度精確、穩定且更易於解釋。與線性模型相反,它們可以對映非線性關係以求解問題。
決策樹(decision tree)
決策樹是一種使用分支方法(branching method)來顯示決策的每個可能結果的圖。例如,如果你想要訂購萵苣、澆頭和沙拉醬,決策樹可以繪製出所有可能的結果(或者你可能最終得到的沙拉的品種)。為了建立或者訓練決策樹,我們採用我們過去訓練模型的資料,並找出哪些屬性可以最佳分割目標訓練集。例如,我們在信用卡欺詐中使用決策樹。我們可以發現最佳的欺詐風險預測的屬性是消費明細(例如,有信用卡使用者有非常大的消費)。這可能是第一次分割(或分支)——那些有著異常高消費的卡和沒有的卡。然後我們使用第二個最佳屬性(例如,經常使用的信用卡)來建立下一次分割。然後我們可以繼續直到我們有足夠的屬性來滿足我們的需要。
隨機森林(random forest)
隨機森林是許多決策樹的平均,每個決策樹都用資料的隨機樣本訓練。森林中的每個獨立的樹都比一個完整的決策樹弱,但是透過將它們結合,我們可以透過多樣性獲得更高的整體表現。隨機森林是當今機器學習中非常流行的演算法。它非常容易訓練(或構建),且它往往表現良好。它的缺點是,相比於其他演算法,其輸出預測可能較慢。所以當你需要快如閃電般地預測,你也許不會使用它。
梯度提升(gradient boosting)
梯度提升和隨機森林類似,都是由「弱」決策樹構成的。最大的區別是,在梯度提升中樹是被一個接一個相繼訓練的。每個隨後的樹主要用被先前樹錯誤識別的資料進行訓練。這使得梯度提升更少地集中在容易預測的情況並更多地集中在困難的情況。梯度提升訓練速度也很快且表現非常好。然而,訓練資料的小變化可以在模型中產生徹底的改變,因此它可能不會產生最可解釋的結果。
什麼是神經網路生物學中的神經網路是互相交換資訊的相互連線的神經元。這個想法現在已經適用於機器學習的世界,並被稱為人工神經網路(ANN)。深度學習(deep learning)是一個經常出現的詞,是指幾層連續放置的人工神經網路。人工神經網路(ANN)包含了許多可以學習類似人腦的認知能力的模型。其它演算法不能處理的極其複雜的任務(如影象識別),神經網路就可以辦到。然而,就像人類的大腦,它需要很長時間來訓練模型,且需要很多的能量(想一想我們為了保持大腦的工作,我們吃了多少東西)。
再次,關於你的第二個問題:哪個平臺學習機器演算法比較好呢?Deeplearning4j 在自己的官方網站發表了一篇對比 Deeplearning4j 與 Torch、Theano、Caffe、TensorFlow 的部落格文章,對比了主要的深度學習學習框架並列出各自的優缺點,專業與通用機器學習平臺都有所涵蓋。如果只是想學習機器學習平臺入門知識,則目錄中 Speed 以下的部分可以略去不看。以下是回答:
目錄
Theano & EcosystemTorchTensorflowCaffeCNTKDSSTNESpeedDL4J: Why the JVM?DL4S: Deep Learning in ScalaMachine-Learning FrameworksFurther ReadingTheano 與生態系統
深度學習領域內的很多學術研究人員依賴於 Theano,這個用 Python 編寫的框架可謂是深度學習框架的老祖宗。Theano 像 Numpy 一樣,是一個處理多維陣列的庫。與其他庫一起使用,Theano 很適合於資料探索和進行研究。在 Theano 之上,已經有很多的開源的深度庫建立起來,包括 Keras、Lasagne 和 Blocks。這些庫的建立是為了在 Theano 偶爾的非直覺介面上更簡單地使用 API。(截止到 2016 年 3 月,另一個與 Theano 相關的庫 Pylearn2 可能即將死亡。)
優缺點
(+)Python+Numpy
(+)計算圖是很好的抽象
(+)RNN 完美適配計算圖
(-)原始 Theano 在某種程度上有些低水平
(+)高層次 wrappers(Keras,Lasange)減輕了這種痛苦
(-)錯誤資訊沒有幫助
(-)大型模型有較長的編譯時間
(-)比 Torch 更「臃腫」
(-)對預訓練模型支援不佳
(-)在 AWS 上有很多 bug
Torch
Torch 是一個用 Lua 編寫的支援機器學習演算法的計算框架。其中的一些版本被 Facebook、Twitter 這樣的大型科技公司使用,為內部團隊專門化其深度學習平臺。Lua 是一種在上世紀 90 年代早期在巴西開發出來的多正規化的指令碼語言。Torch 7 雖然強大,卻並未被基於 Python 的學術社群和通用語言為 Java 的企業軟體工程師普遍使用。
優缺點
(+)很多容易結合的模組碎片
(+)易於編寫自己的層型別和在 GPU 上執行
(+)Lua(大部分庫程式碼是 Lua 語言,易於讀取)
(+)大量的預訓練模型
(-)Lua(小眾)
(-)你總是需要編寫自己的訓練程式碼(更不能即插即用)
(-)對迴圈神經網路不太好
(-)沒有商業化支援
(-)糟糕的文件支援
TensorFlow
谷歌創造 TensorFlow 取代 Theano,其實這兩個庫相當類似。Theano 的一些創造者,比如 Ian Goodfellow 在去 OpenAI 之前就是在谷歌打造 TensorFlow。目前,TensorFlow 還不支援所謂的「inline」矩陣運算,但會強迫你按序 copy 一個矩陣,並在其上進行運算。copy 大型矩陣非常耗費成本,相比於其他先進的深度學習工具 TensorFlow 要花費 4 倍的時間。谷歌說他們正在解決這個問題。像大部分深度學習框架一樣,TensorFlow 在 C/C++ 引擎之上使用 Python API 編寫,從而加速其執行。對 Java 和 Scala 社群而言,它並非一個合適的解決方案。TensorFlow 不只是面向深度學習,也有支援強化學習和其它演算法的工具。谷歌開放 TensorFlow 的目標看起來是想吸引更多的人,共享他們研究人員的程式碼,標準化軟體工程師進行深度學習的方式,並吸引他人對谷歌雲服務的興趣——TensorFlow 針對谷歌雲服務進行了最佳化。TensorFlow 並非商業支援下的,而且看起來谷歌也不可能成為支援開源企業軟體的企業。它只為研究者提供新工具。如同 Theano,TensorFlow 生成一個計算圖(比如一系列矩陣運算,像 z=Simoid(x), 其中 x 和 z 都是矩陣)並進行自動微分。自動微分很重要,因為每次實驗一個新的神經網路的時候,你肯定不想手動編寫一個反向傳播新變體的程式碼。在谷歌的生態系統中,計算圖後來被 Google Brain 使用進行一些繁重工作,但谷歌還未開源其中一些工具。TensorFlow 只是谷歌內部的深度學習解決方案的一半。從企業的角度來看,一些公司需要考慮的是他們是否想依賴谷歌的這些工具。Caveat:在 TensorFlow 中的所有運算並不都像在 Numpy 中一樣。優缺點
(+)Python+Numpy
(+)計算圖抽象,如同 Theano
(+)比 Theano 更快的編譯速度
(+)進行視覺化的 TensorBoard
(+)資料和模型並行
(-)比其它框架慢
(-)比 Torch 更「臃腫」;更神奇;
(-)預訓練模型不多
(-)計算圖是純 Python 的,因此更慢
(-)無商業化支援
(-)需要退出到 Python 才能載入每個新的訓練 batch
(-)不能進行太大的調整
(-)在大型軟體專案上,動態鍵入易出錯
Caffe
Caffe 是一個知名的、被普遍使用的機器視覺庫,其將 Matlab 的快速卷積網介面遷移到了 C 和 C++ 中。Caffe 不面向其他深度學習應用,比如文字、聲音或時序資料。如同其他框架一樣,Caffe 選擇 Python 作為 API。
優缺點:
(+)在前饋網路和影象處理上較好
(+)在微調已有網路上較好
(+)不寫任何程式碼就可訓練模型
(+)Python 介面相當有用
(-)需要為新的 GPU 層編寫 C++/CUDA
(-)不擅長迴圈網路
(-)面對大型網路有點吃力(GoogLeNet,ResNet)
(-)不可擴充套件
(-)無商業化支援
CNTK
CNTK 是微軟的開源深度學習框架,是「Computational Network Toolkit(計算網路工具包)」的縮寫。這個庫包括前饋 DNN、卷積網路和迴圈網路。CNTK 提供一個 C++ 程式碼上的 Python API。雖然 CNTK 有一個許可證,但它還未有更多的傳統許可,比如 ASF2.0,BSD,或 MIT。
DSSTNE
亞馬遜的 Deep Scalable Sparse Tensor Network Engine(DSSTNE)是一個為機器學習、深度學習構建模型的庫。它是最近才開源的一個深度學習庫,在 TensorFlow 和 CNTK 之後才開源。大部分使用 C++ 編寫,DSSTNE 似乎很快,儘管它如今沒有其它庫那樣吸引大量關注。 (+) 處理稀疏的編碼 (-) 亞馬遜可能不會共享要得到其樣本的最好結果所必需的所有資訊
Speed
Deeplearning4j 使用 ND4J 執行的線性代數計算展現出了在大型矩陣相乘上的至少比 Numpy 快兩倍的速度。這也是為什麼我們的 Deeplearning4j 被 NASA 噴氣推進實驗室裡的團隊採用的原因之一。此外,Deeplearning4j 在多種晶片上的執行已經被最佳化,包括 x86、CUDA C 的 GPU。儘管 Torch7 和 DL4J 都可並行,但 DL4J 的並行是自動化的。也就是說,我們對工作節點和連線進行了自動化,在 Spark、Hadoop 或者與 Akka 和 AWS 上建立大規模並行的時候,能讓使用者對庫進行分流。Deeplearning4j 最適合於解決特定問題,而且速度很快。
為什麼要用 JVM(Java 虛擬機器)?
我們常被問到我們為什麼要為 JVM 實現一個開源深度學習專案,畢竟現在深度學習社群的相當大一部分的重點都是 Python。Python 有很好的句法元素(syntactic elements)讓你可以不用建立明確的類就能進行矩陣相加,而 Java 卻需要這麼做。另外,Python 還有豐富的科學計算環境,帶有 Theano 和 Numpy 這樣的原生擴充套件。但 JVM 及其主要語言(Java 和 Scala)也有一些優勢。首先,大部分主要的企業和大型政府機構嚴重依賴於 Java 或基於 JVM 的系統。他們已經進行了巨大的投資,他們可以透過基於 JVM 的人工智慧利用這些投資。Java 仍然是企業中使用最廣泛的語言。Java 是 Hadoop、ElasticSearch、Hive、Lucene 和 Pig 的語言,而這些工具正好對機器學習問題很有用。另一種 JVM 語言 Scala 也是 Spark 和 Kafka 的程式語言。也就是說,許多正在解決真實世界問題的程式設計師可以從深度學習中受益,但它們卻被一些語言上的障礙隔開了。我們想要使深度學習對許多新的受眾更有用,讓他們可以直接將其拿來使用。在全世界 1000 萬開發者中,他們使用得最多的語言就是 Java。第二,Java 和 Scala 實際上比 Python 更快。任何使用 Python 本身寫成的東西——不管其是否依賴 Cython——都會更慢。當然啦,大多數計算成本較高的運算都是使用 C 或 C++ 編寫的。(當我們談論運算時,我們也考慮字串等涉及到更高層面的機器學習過程的任務。)大多數最初使用 Python 編寫的深度學習專案如果要被投入生產,就不得不被重寫。Deeplearning4j 可以依靠 JavaCPP 來呼叫預編譯的原生 C++,這能極大地加快訓練速度。許多 Python 程式設計師選擇使用 Scala 做深度學習,因為當在一個共享程式碼基礎上與其他人合作時,他們更喜歡靜態型別和函數語言程式設計。第三,雖然 Java 缺乏穩健的科學計算庫,但把它們編寫出來不就好了,這個我們可以透過 ND4J 完成。ND4J 執行在分散式 GPU 或 CPU 上,可以透過 Java 或 Scala API 接入。最後,Java 是一種安全的、網路的語言,本身就能在 Linux 伺服器、Windows 和 OS X 桌面、安卓手機和使用嵌入式 Java 的物聯網的低記憶體感測器上跨平臺工作。儘管 Torch 和 Pylearn2 可以透過 C++ 最佳化,但其最佳化和維護卻比較困難;而 Java 是一種「一次程式設計,到處使用」的語言,適合那些需要在許多平臺上使用深度學習的公司。
生態系統
Java 的普及只能透過其生態系統加強。Hadoop 是用 Java 實現的;Spark 在 Hadoop 的 Yarn 執行時間內執行;Akka 這樣的庫使得為 Deeplearning4j 構建分散式系統是可行的。總的來說,Java 擁有經過了高度檢驗的基礎設施,擁有大量各種各樣的應用,而且使用 Java 編寫的深度學習網路也能與資料保持緊密,這可以讓程式設計師的工作更簡單。Deeplearning4j 可作為一種 YARN 應用而執行和供應。Java 也可以從 Scala、Clojure、Python 和 Ruby 等流行的語言中被原生地使用。透過選擇 Java,我們能儘可能最少地排除主要的程式設計社群。儘管 Java 並不如 C/C++ 快,但其比其它語言快得多。而且我們已經構建一種可以透過加入更多節點來進行加速的分散式系統——不管是用 CPU 或是 GPU 都可以。也就是說,如果你想要更快,就加入更多卡吧!最後,我們正在使用 Java 為 DL4J 開發 Numpy 的基本應用(包括 ND-Array)。我們相信 Java 的許多缺點可以被很快地克服,而它的許多優點也還將繼續持續一段時間。
SCALA
在開發 Deeplearning4j 和 ND4J 的過程中,我們對 Scala 給予了特別的關注,因為我們相信 Scala 有望變成資料科學的主導語言。使用 Scala API 為 JVM 編寫數值計算、向量化和深度學習庫能推動該社群向這一目標邁進。要真正理解 DL4J 和其它框架之間的差異,你必須真正試一試。
機器學習框架
上面列出的機器學習框架更多是專用框架,而非通用機器學習框架,當然,通用機器學習框架也有很多,下面列出幾個主要的:
sci-kit learn:Python 的預設開源機器學習框架Apache Mahout:Apache 上的旗艦機器學習框架。Mahout 可用來進行分類、聚類和推薦。SystemML:IBM 的機器學習框架,可用來執行描述性統計、分類、聚類、迴歸、矩陣分解和生存分析(Survival Analysis),而且也包含支援向量機。Microsoft DMTK:微軟的分散式機器學習工具包。分散式詞嵌入和 LDA。 -
3 # Watt資料探勘
前面的大牛們都回答了第一個問題,我來回答第二個。學習機器學習演算法有兩個要點,有兩個要點:一個是前面幾位大牛不斷更新的國際頂尖演算法,另外一個是你自己的業務領域。大部分平臺都能解決前一個問題,像 機器之心 這個號就是權威級的(還用你說),而業務領域其實才是廣大愛好者比較容易解決的問題,也許你把機器學習用在爐石傳說上,弄出個爐石go也挺有意思的哈。
-
4 # 西線學院
如果你想學習機器演算法,要從何下手呢?
監督學習
1. 決策樹:決策樹是一種決策支援工具,使用的決策及其可能產生的後果,包括隨機事件的結果,資源消耗和效用的樹狀圖或模型。
從業務決策的角度來看,決策樹是人們必須要選擇是/否的問題,以評估大多數時候作出正確決策的機率。它允許您以結構化和系統的方式來解決問題,以得出邏輯結論。
2.樸素貝葉斯分類:樸素貝葉斯分類器是一種簡單的機率分類器,基於貝葉斯定理,其特徵之間具有強大(樸素)的獨立性假設。
特徵影象是方程 - P(A | B)是後驗機率,P(B | A)是似然度,P(A)是類先驗機率,P(B)是預測先驗機率。
一些現實世界的例子是:
判斷郵件是否為垃圾郵件
分類技術,將新聞文章氛圍政治或體育類
檢查一段表達積極情緒或消極情緒的文字
用於面部識別軟體
3.普通最小二乘迴歸:如果你瞭解統計學,你可能已經聽說過線性迴歸。最小二乘法是一種執行線性迴歸的方法。
您可以將線性迴歸視為擬合直線穿過點狀分佈的任務。有多種可能的策略可以做到這一點,“普通最小二乘法”策略就像這樣 -你可以畫一條線,然後把每個資料點,測量點和線之間的垂直距離,新增上去;擬合線將是距離總和的儘可能小的線。
線性是指您正在使用的模型來迎合資料,而最小二乘可以最小化線性模型誤差。
4.邏輯迴歸: Logistic迴歸是一個強大的統計學方法,用一個或多個解釋變數建模二項式結果。它透過使用邏輯函式估計機率,來衡量分類因變數與一個或多個獨立變數之間的關係,後者是累積邏輯分佈。
邏輯迴歸用於生活中:
信用評級
衡量營銷活動的成功率
預測某一產品的收入
某一天會有地震嗎
5.支援向量機: SVM是二元分類演算法。給定N維空間中兩種種類型的點,SVM生成(N-1)維的超平面將這些點分成2組。
假設你有一些可以線性分離的紙張中的兩種型別的點。SVM將找到一條直線,將這些點分成兩種型別,並儘可能遠離所有這些點。
在規模上,使用SVM解決的一些特大的問題(包括適當修改的實現)是:廣告、人類基因剪接位點識別、基於影象的性別檢測,大規模影象分類...
6.整合方法:整合方法是構建一組分類器的學習演算法,然後透過對其預測進行加權投票來對新的資料點進行分類。原始的整合方法是貝葉斯平均法,但更新的演算法包括糾錯輸出編碼、bagging和boosting。
那麼整合方法如何工作,為什麼它們優於單個模型?
均衡偏差:如果你均衡了大量的傾向民主黨的投票和大量傾向共和黨的投票,你總會得到一個不那麼偏頗的結果。
降低方差:集合大量模型的參考結果,噪音會小於單個模型的單個結果。在金融領域,這被稱為投資分散原則(diversification)——一個混搭很多種股票的投資組合,比單獨的股票更少變故。
不太可能過度擬合:如果您有單個模型不完全擬合,您以簡單的方式(平均,加權平均,邏輯迴歸)結合每個模型建模,那麼一般不會發生過擬合。
無監督學習
7. 聚類演算法:聚類是對一組物件進行分組的任務,使得同一組(叢集)中的物件彼此之間比其他組中的物件更相似。
每個聚類演算法是不同的,比如:
基於Centroid的演算法
基於連線的演算法
基於密度的演算法
機率
降維
神經網路/深度學習
8. 主成分分析: PCA是使用正交變換將可能相關變數的觀察值轉換為主成分的線性不相關變數值的一組統計過程。
PCA的一些應用包括壓縮、簡化資料、便於學習、視覺化。請注意,領域知識在選擇是否繼續使用PCA時非常重要。資料嘈雜的情況(PCA的所有元件都有很大差異)的情況不適用。
9.奇異值分解:線上性代數中,SVD是真正複雜矩陣的因式分解。對於給定的m * n矩陣M,存在分解,使得M =UΣV,其中U和V是酉矩陣,Σ是對角矩陣。
PCA實際上是SVD的簡單應用。在計算機視覺技術中,第一個人臉識別演算法使用PCA和SVD,以將面部表示為“特徵臉”的線性組合,進行降維,然後透過簡單的方法將面部匹配到身份;雖然這種方法更復雜,但仍然依賴於類似的技術。
10.獨立成分分析: ICA是一種統計技術,用於揭示隨機變數、測量或訊號集合的隱藏因素。ICA定義了觀察到的多變數資料的生成模型,通常將其作為大型樣本資料庫。
在模型中,假設資料變數是一些未知潛在變數的線性混合,混合系統也是未知的。潛變數被假定為非高斯和相互獨立的,它們被稱為觀測資料的獨立成分。
ICA與PCA相關,但它是一種更強大的技術,能夠在這些經典方法完全失敗時找到潛在的源因素。其應用包括數字影象、文件資料庫、經濟指標和心理測量。
-
5 # 小AI諮詢
作者曾經寫過系列文章介紹機器學習和資料探勘入門常用的演算法,在這裡給出簡介,有需要的讀者,可以到作者的主頁檢視具體的內容。
《常用資料探勘演算法從入門到精通》系列共21篇文章,主要向大家介紹了包括 K-means聚類,決策樹分類, 人工神經網路以及支援向量機等10多種常用的資料探勘算法理論和具體的案例。
CONTENT
第一篇:《常用資料探勘演算法從入門到精通 第一章資料預處理(1)資料預處理簡介》介紹了資料預處理的目的;常用的資料預處理方法;一般資料預處理流程。
第二篇:《常用資料探勘演算法從入門到精通 第一章資料預處理(2)資料清理》介紹了填充缺失值,光滑噪聲資料的資料清理方法。
第三篇:《常用資料探勘演算法從入門到精通 第一章資料預處理(3)資料整合》介紹了資料整合的概念;資料整合的內容;模式整合和物件匹配,冗餘資料的處理,數值衝突的檢測和解決的資料整合方法。
第四篇:《常用資料探勘演算法從入門到精通 第一章資料預處理(4)資料變換》介紹了平滑/光滑處理,聚集操作,資料泛化,資料規範化,屬性構造/特徵構造的資料變換方法。
第五篇:《常用資料探勘演算法從入門到精通 第一章資料預處理(5)資料歸約》介紹了資料歸約的概念;資料立方體聚集,維歸約,資料壓縮,數值規約,直方圖的資料規約方法。
第六篇:《常用資料探勘演算法從入門到精通 第一章資料預處理(6)資料離散化和概念分層》介紹了資料離散化和概念分層的概念;數值資料的離散化和概念分層建立的方法;分箱方法:一種簡單的離散化技術,離散化:直方圖方法,離散化:聚類分析方法的資料離散化和概念分層方法。
第七篇:《常用資料探勘演算法從入門到精通 第二章 K-means聚類演算法》介紹了K-means聚類演算法簡介;相似度準則與聚類效能評價準則;K-means聚類演算法原理和步驟;K-means聚類演算法例項。
第八篇:《常用資料探勘演算法從入門到精通 第三章 K-中心點聚類演算法》介紹了K-中心點聚類演算法簡介;K-中心點聚類演算法原理;四種情況的代價函式;K-中心點聚類演算法步驟;K-中心點聚類演算法例項。
第九篇:《常用資料探勘演算法從入門到精通 第四章SOM神經網路聚類(上)》介紹了SOM神經網路簡介;SOM神經網路的結構;相似性測量;競爭學習規則WTA(Winner-Take-All);競爭學習步驟。
第十篇:《常用資料探勘演算法從入門到精通 第四章SOM神經網路聚類(下)》介紹了SOM網路的拓撲結構;SOM網的權值調整域;SOM網路的執行原理;SOM網路的演算法流程;SOM網路演算法例項;SOM神經網路聚類演算法的簡單理解。
第十一篇:《常用資料探勘演算法從入門到精通 第五章 貝葉斯分類演算法》介紹了分類分析;貝葉斯機率—主觀機率;機率基礎知識;Bayes 決策理論;貝葉斯分類案例。
第十二篇:《常用資料探勘演算法從入門到精通 第六章 決策樹分類演算法概述》介紹了決策樹分類模型簡介;決策樹的結構;決策樹分類模型學習;分類特徵選擇;決策樹的剪枝。
第十三篇:《常用資料探勘演算法從入門到精通 第七章 ID3決策樹分類演算法》介紹了ID3演算法原理介紹;熵和資訊增益;ID3演算法的資訊增益演算法;ID3演算法例項分析。
第十四篇:《常用資料探勘演算法從入門到精通 第八章 C4.5決策樹分類演算法》介紹了C4.5分類演算法介紹;資訊增益比(Information Gain Ratio);對連續型屬性的處理;對樣本缺失值的處理;C4.5演算法步驟;C4.5演算法例項分析。
第十五篇:《常用資料探勘演算法從入門到精通 第九章 CART決策樹分類演算法》介紹了CART演算法簡介(Classification And Regression Tree);Gini指數;對缺失值和連續屬性的處理;CART決策樹的演算法步驟;CART演算法例項分析。
第十六篇:《常用資料探勘演算法從入門到精通 第十章 支援向量機理論基礎》介紹了統計學習理論;經驗風險和結構風險;函式集的VC維。
第十七篇:《常用資料探勘演算法從入門到精通 第十一章 支援向量機演算法》介紹了結構風險最小化(Structural Risk Minimization,SRM);分類問題的數學表示;分類問題的學習方法;線性可分情形:最大間隔原理;近似線性可分情形;線性不可分情形;核函式K(xi,xj)。
第十八篇:《常用資料探勘演算法從入門到精通 第十二章 人工神經網路演算法》介紹了人工神經網路簡介;人工神經元模型;神經網路模型的三個要素;前饋(forward)神經網路;BP神經網路模型;BP神經網路訓練的兩個階段;BP神經網路引數設定;BP網路的正向傳遞過程;BP網路的反向傳播過程;BP神經網路的演算法步驟。
第十九篇:《資料探勘演算法之關聯規則挖掘Apriori演算法詳細過程》介紹了關聯規則挖掘的概念;關聯規則的種類;支援度與置信度;頻繁項集;Apriori定理;Apriori演算法關聯規則挖掘詳細過程。
第二十篇:《資料探勘技術之迴歸分析超全總結,常見迴歸模型介紹及應用場景》介紹了迴歸分析介紹;簡單線性迴歸;簡單多項式迴歸;多元線性迴歸;多元多項式迴歸;多變量回歸;Logistic邏輯迴歸;Poison泊松迴歸;Cox比例風險迴歸。
第二十一篇:《資料探勘關鍵技術、步驟與演算法發展歷史,超全總結!》介紹了資料探勘關鍵技術;資料探勘主要步驟;資料探勘發展歷史及各階段的主要演算法簡介;未來發展。
-
6 # 資料學習DataLearner
對於不同的任務一般有不同的常用的演算法。我們按照任務來說明常用的演算法包括哪些。目前機器學習主要解決的問題(任務)包括:
一、分類或者回歸這是一個古老的問題,就是判斷某個物件所屬的類別或者預測某個東西的值是多少,前者是類似“圓形深色的西瓜甜不甜”,後者類似“合肥濱湖明年的房價大約多少”等。分類的類標籤是離散的,迴歸的類標籤是連續的。一般是透過有標籤的資料集訓練模型後做預測。對於分類的問題,經典的演算法包括樸素貝葉斯、決策樹、組合演算法如隨機森林等。現在很火的深度學習的演算法,是來自於神經網路,也是做這種任務常見的演算法。迴歸的演算法從線性迴歸和邏輯迴歸開始,也有很多改進。
二、聚類聚類任務是將一群物件按照某種特性分別放到一起。比如一個班級學生你可以按照某種標準劃分成幾類,比如按照興趣劃分,可以分成足球愛好者,籃球愛好者等等。聚類任務不知道類標籤,是按照某種方法去度量物件之間的相似性的。常用的演算法有K-means、C-means等,這些方法需要指定類別數量。現在有一種非參的聚類方法,叫做DPMM,可以根據資料自動劃分類別。
三、關聯規則挖掘又稱購物籃資料探勘,常見於超市購買記錄中規律的發現,比如週五下午經常買尿布的男性也會同時購買啤酒。最開始使用Apriori演算法,後來基於這個思想出現了比較多的改進。
四、個性化推薦個性化推薦的任務是指按照不同個體的行為特徵去預測他們的興趣偏好,進而推薦一些產品或者服務。早先的個性化推薦思想主要是基於“相似度”的方法,如協同過濾、最近鄰等,後來出現了以機率矩陣分解和SVD++為代表的矩陣分解方法,現在比較火熱的是利用深度學習做個性化推薦。但還是起步階段。
五、主題抽取主題抽取是指從一組文件中抽取一些主題。這裡的主題主要是包含一種有順序的單詞集合。排序靠前的是描述這個主題經常用到的詞語,比如體育主題靠前的單詞可能是得分、轉會、比賽、進球等。早起的演算法有pLSA等,後來很火的是LDA,基於LDA有很多改進的方法,包括非參LDA、時序LDA等。
六、影象/影片識別這個目前最火的肯定是深度學習的方法了,包括卷積神經網路(CNN)及其改進,還有生成對抗網路(GAN)也是另一種比較火的。
對於學習的平臺的話有不少,有數學基礎和英文基礎的同學可以去看吳恩達的機器學習課程,講得很好(不能放連結大家自己搜尋吧),基礎不太好的話可以去看七月線上,不過是收費的,但是好在有人指導。自己學習的話有一定難度,主要是涉及的方法太多。建議看基礎方法,重點朝著一個領域學習可能比較好。
回覆列表
透過本篇文章大家可以對ML的常用演算法形成常識性的認識。沒有程式碼,沒有複雜的理論推導,僅是圖解,介紹這些演算法是什麼以及如何應用(例子主要是分類問題)。以後有機會再對單個演算法做深入地解析。
今天的演算法如下:
決策樹
隨機森林演算法
邏輯迴歸
SVM
樸素貝葉斯
K最近鄰演算法
K均值演算法
Adaboost 演算法
神經網路
馬爾可夫
1. 決策樹
根據一些 feature 進行分類,每個節點提一個問題,透過判斷,將資料分為兩類,再繼續提問。這些問題是根據已有資料學習出來的,再投入新資料的時候,就可以根據這棵樹上的問題,將資料劃分到合適的葉子上。
2. 隨機森林
在源資料中隨機選取資料,組成幾個子集:
S 矩陣是源資料,有 1-N 條資料,A B C 是feature,最後一列C是類別:
由 S 隨機生成 M 個子矩陣:
這 M 個子集得到 M 個決策樹,
將新資料投入到這 M 個樹中,得到 M 個分類結果,計數看預測成哪一類的數目最多,就將此類別作為最後的預測結果:
3. 邏輯迴歸
當預測目標是機率這樣的,值域需要滿足大於等於0,小於等於1的,這個時候單純的線性模型是做不到的,因為在定義域不在某個範圍之內時,值域也超出了規定區間。
所以此時需要這樣的形狀的模型會比較好。
那麼怎麼得到這樣的模型呢?
這個模型需要滿足兩個條件 大於等於0,小於等於1
大於等於0 的模型可以選擇 絕對值,平方值,這裡用 指數函式,一定大於0
小於等於1 用除法,分子是自己,分母是自身加上1,那一定是小於1的了。
再做一下變形,就得到了 logistic regression 模型。
透過源資料計算可以得到相應的係數了。
最後得到 logistic 的圖形:
4. SVM
support vector machine
要將兩類分開,想要得到一個超平面,最優的超平面是到兩類的 margin 達到最
大,margin就是超平面與離它最近一點的距離,如下圖,Z2>Z1,所以綠色的
超平面比較好。
將這個超平面表示成一個線性方程,在線上方的一類,都大於等於1,另一類小於等於-1。
點到面的距離根據圖中的公式計算。
所以得到 total margin 的表示式如下,目標是最大化這個 margin,就需要最小化分母,於是變成了一個最佳化問題。
舉個栗子,三個點,找到最優的超平面,定義了 weight vector=(2,3)-(1,1)。
得到 weight vector 為(a,2a),將兩個點代入方程,代入(2,3)另其值=1,代入(1,1)另其值=-1,求解出 a 和 截矩 w0 的值,進而得到超平面的表示式。
a 求出來後,代入(a,2a)得到的就是 support vector,
a 和 w0 代入超平面的方程就是 support vector machine。
5. 樸素貝葉斯
舉個在 NLP 的應用:
給一段文字,返回情感分類,這段文字的態度是positive,還是negative。
為了解決這個問題,可以只看其中的一些單詞。
這段文字,將僅由一些單詞和它們的計數代表。
原始問題是:給你一句話,它屬於哪一類,
透過 bayes rules 變成一個比較簡單容易求得的問題。
問題變成,這一類中這句話出現的機率是多少,當然,別忘了公式裡的另外兩個機率。
栗子:單詞 love 在 positive 的情況下出現的機率是 0.1,在 negative 的情況下出現的機率是 0.001。
6. K最近鄰
k nearest neighbours
給一個新的資料時,離它最近的 k 個點中,哪個類別多,這個資料就屬於哪一類。
栗子:要區分 貓 和 狗,透過 claws 和 sound 兩個feature來判斷的話,圓形和三角形是已知分類的了,那麼這個 star 代表的是哪一類呢?
k=3時,這三條線連結的點就是最近的三個點,那麼圓形多一些,所以這個star就是屬於貓。
7. K均值
想要將一組資料,分為三類,粉色數值大,黃色數值小。
最開心先初始化,這裡面選了最簡單的 3,2,1 作為各類的初始值。
剩下的資料裡,每個都與三個初始值計算距離,然後歸類到離它最近的初始值所在類別。
分好類後,計算每一類的平均值,作為新一輪的中心點。
幾輪之後,分組不再變化了,就可以停止了。
8. Adaboost
adaboost 是 bosting 的方法之一,
bosting就是把若干個分類效果並不好的分類器綜合起來考慮,會得到一個效果比較好的分類器。
下圖,左右兩個決策樹,單個看是效果不怎麼好的,但是把同樣的資料投入進去,把兩個結果加起來考慮,就會增加可信度。
adaboost 的栗子,手寫識別中,在畫板上可以抓取到很多 features,例如 始點的方向,始點和終點的距離等等。
training 的時候,會得到每個 feature 的 weight,例如 2 和 3 的開頭部分很像,這個 feature 對分類起到的作用很小,它的權重也就會較小。
而這個 alpha 角 就具有很強的識別性,這個 feature 的權重就會較大,最後的預測結果是綜合考慮這些 feature 的結果。
9. 神經網路
Neural Networks 適合一個input可能落入至少兩個類別裡,
NN 由若干層神經元,和它們之間的聯絡組成,
第一層是 input 層,最後一層是 output 層,
在 hidden 層 和 output 層都有自己的 classifier。
input 輸入到網路中,被啟用,計算的分數被傳遞到下一層,啟用後面的神經
層,最後output 層的節點上的分數代表屬於各類的分數,下圖例子得到分類結果為 class 1。
同樣的 input 被傳輸到不同的節點上,之所以會得到不同的結果是因為各自節點有不同的weights 和 bias。
這也就是 forward propagation。
10. 馬爾可夫
Markov Chains 由 state 和 transitions 組成,
栗子,根據這一句話 ‘the quick brown fox jumps over the lazy dog’,要得到 markov chain。
步驟,先給每一個單詞設定成一個狀態,然後計算狀態間轉換的機率。
這是一句話計算出來的機率,當你用大量文字去做統計的時候,會得到更大的狀態轉移矩陣,例如 the 後面可以連線的單詞,及相應的機率。
生活中,鍵盤輸入法的備選結果也是一樣的原理,模型會更高階。