1. 程式人生 > >詳細解釋資料探勘中的 10 大演算法(上)

詳細解釋資料探勘中的 10 大演算法(上)

在一份調查問卷中,三個獨立專家小組投票選出的十大最有影響力的資料探勘演算法,今天我打算用簡單的語言來解釋一下。

一旦你知道了這些演算法是什麼、怎麼工作、能做什麼、在哪裡能找到,我希望你能把這篇博文當做一個跳板,學習更多的資料探勘知識。

還等什麼?這就開始吧!

1.C4.5演算法

C4.5是做什麼的?C4.5 以決策樹的形式構建了一個分類器。為了做到這一點,需要給定 C4.5 表達內容已分類的資料集合。

等下,什麼是分類器呢? 分類器是進行資料探勘的一個工具,它處理大量需要進行分類的資料,並嘗試預測新資料所屬的類別。

舉個例子吧,假定一個包含很多病人資訊的資料集。我們知道每個病人的各種資訊,比如年齡、脈搏、血壓、最大攝氧量、家族病史等。這些叫做資料屬性。

現在:

給定這些屬性,我們想預測下病人是否會患癌症。病人可能會進入下面兩個分類:會患癌症或者不會患癌症。 C4.5 演算法會告訴我們每個病人的分類。

做法是這樣的:

用一個病人的資料屬性集和對應病人的反饋型別,C4.5 構建了一個基於新病人屬性預測他們型別的決策樹。

這點很棒,那麼什麼是決策樹呢?決策樹學習是建立一種類似與流程圖的東西對新資料進行分類。使用同樣的病人例子,一個特定的流程圖路徑可以是這樣的:

  • 病人有癌症的病史
  • 病人有和癌症病人高度相似的基因表達
  • 病人有腫瘤
  • 病人的腫瘤大小超過了5cm

基本原則是:

流程圖的每個環節都是一個關於屬性值的問題,並根據這些數值,病人就被分類了。你可以找到很多決策樹的

例子

演算法是監督學習還是無監督學習呢?這是一個監督學習演算法,因為訓練資料是已經分好類的。使用分好類的病人資料,C4.5演算法不需要自己學習病人是否會患癌症。

那 C4.5 演算法和決策樹系統有什麼區別呢?

首先,C4.5 演算法在生成資訊樹的時候使用了資訊增益。

其次,儘管其他系統也包含剪枝,C4.5使用了一個單向的剪枝過程來緩解過渡擬合。剪枝給結果帶來了很多改進。

再次,C4.5演算法既可以處理連續資料也可以處理離散資料。我的理解是,演算法通過對連續的資料指定範圍或者閾值,從而把連續資料轉化為離散的資料。

最後,不完全的資料用演算法自有的方式進行了處理。

為什麼使用 C4.5演算法呢?可以這麼說,決策樹最好的賣點是他們方便於翻譯和解釋。他們速度也很快,是種比較流行的演算法。輸出的結果簡單易懂。

哪裡可以使用它呢? 在 OpenTox 上可以找到一個很流行的開源 Java實現方法。Orange 是一個用於資料探勘的開源資料視覺化和分析工具,它的決策樹分類器是用 C4.5實現的。

分類器是很棒的東西,但也請看看下一個聚類演算法….

2. k 均值聚類演算法

它是做什麼的呢?K-聚類演算法從一個目標集中建立多個組,每個組的成員都是比較相似的。這是個想要探索一個數據集時比較流行的聚類分析技術。

等下,什麼是聚類分析呢?聚類分析屬於設計構建組群的演算法,這裡的組成員相對於非組成員有更多的相似性。在聚類分析的世界裡,類和組是相同的意思。

舉個例子,假設我們定義一個病人的資料集。在聚類分析裡,這些病人可以叫做觀察物件。我們知道每個病人的各類資訊,比如年齡、血壓、血型、最大含氧量和膽固醇含量等。這是一個表達病人特性的向量。

請看:

你可以基本認為一個向量代表了我們所知道的病人情況的一列資料。這列資料也可以理解為多維空間的座標。脈搏是一維座標,血型是其他維度的座標等等。

你可能會有疑問:

給定這個向量集合,我們怎麼把具有相似年齡、脈搏和血壓等資料的病人聚類呢?

想知道最棒的部分是什麼嗎?

你告訴 k-means 演算法你想要多少種類。K-means 演算法會處理後面的部分。

那它是怎麼處理的呢?k-means 演算法有很多優化特定資料型別的變數。

Kmeans演算法更深層次的這樣處理問題:

  1. k-means 演算法在多維空間中挑選一些點代表每一個 k 類。他們叫做中心點。
  2. 每個病人會在這 k 箇中心點中找到離自己最近的一個。我們希望病人最靠近的點不要是同一個中心點,所以他們在靠近他們最近的中心點周圍形成一個類。
  3. 我們現在有 k 個類,並且現在每個病人都是一個類中的一員。
  4. 之後k-means 演算法根據它的類成員找到每個 k 聚類的中心(沒錯,用的就是病人資訊向量)
  5. 這個中心成為類新的中心點。
  6. 因為現在中心點在不同的位置上了,病人可能現在靠近了其他的中心點。換句話說,他們可能會修改自己的類成員身份。
  7. 重複2-6步直到中心點不再改變,這樣類成員也就穩定了。這也叫做收斂性。

這演算法是監督的還是非監督的呢?這要看情況了,但是大多數情況下 k-means 會被劃分為非監督學習的型別。並不是指定分類的個數,也沒有觀察物件該屬於那個類的任何資訊,k-means演算法自己“學習”如何聚類。k-means 可以是半監督的。

為什麼要使用 k-means 演算法呢?我認為大多數人都同意這一點:

k-means 關鍵賣點是它的簡單。它的簡易型意味著它通常要比其他的演算法更快更有效,尤其是要大量資料集的情況下更是如此。

他可以這樣改進:

k-means 可以對已經大量資料集進行預先聚類處理,然後在針對每個子類做成本更高點的聚類分析。k-means 也能用來快速的處理“K”和探索資料集中是否有被忽視的模式或關係。

但用k-means 演算法也不是一帆風順的:

k means演算法的兩個關鍵弱點分別是它對異常值的敏感性和它對初始中心點選擇的敏感性。最後一個需要記住的是, K-means 演算法是設計來處理連續資料的。對於離散資料你需要使用一些小技巧後才能讓 K-means 演算法奏效。

Kmeans 在哪裡使用過呢? 網上有很多可獲得的 kmeans 聚類演算法的語言實現:

Julia

R

SciPy

Weka

SAS

如果決策樹和聚類演算法還沒有打動你,那麼你會喜歡下一個演算法的。

3.支援向量機

它是做什麼的呢?支援向量機(SVM)獲取一個超平面將資料分成兩類。以高水準要求來看,除了不會使用決策樹以外,SVM與 C4.5演算法是執行相似的任務的。

咦?一個超..什麼? 超平面(hyperplane)是個函式,類似於解析一條線的方程。實際上,對於只有兩個屬性的簡單分類任務來說,超平面可以是一條線的。

其實事實證明:

SVM 可以使用一個小技巧,把你的資料提升到更高的維度去處理。一旦提升到更高的維度中,SVM演算法會計算出把你的資料分離成兩類的最好的超平面。

有例子麼?當然,舉個最簡單的例子。我發現桌子上開始就有一堆紅球和藍球,如果這這些球沒有過分的混合在一起,不用移動這些球,你可以拿一根棍子把它們分離開。

你看,當在桌上加一個新球時,通過已經知道的棍字的哪一邊是哪個顏色的球,你就可以預測這個新球的顏色了。

最酷的部分是什麼呢?SVM 演算法可以算出這個超平面的方程。

如果事情變得更復雜該怎麼辦?當然了,事情通常都很複雜。如果球是混合在一起的,一根直棍就不能解決問題了。

下面是解決方案:

快速提起桌子,把所有的球拋向空中,當所有的球以正確的方式拋在空中是,你使用一張很大的紙在空中分開這些球。

你可能會想這是不是犯規了。不,提起桌子就等同於把你的資料對映到了高維空間中。這個例子中,我們從桌子表面的二維空間過度到了球在空中的三維空間。

那麼 SVM該怎麼做呢?通過使用核函式(kernel),我們在高維空間也有很棒的操作方法。這張大紙依然叫做超平面,但是現在它對應的方程是描述一個平面而不是一條線了。根據 Yuval 的說法,一旦我們在三維空間處理問題,超平面肯定是一個面而不是線了。

關於 SVM的解釋思路,Reddit 的 ELI5 和 ML 兩個子版塊上也有兩個很棒的討論帖。

那麼在桌上或者空中的球怎麼用現實的資料解釋呢?桌上的每個球都有自己的位置,我們可以用座標來表示。打個比方,一個球可能是距離桌子左邊緣20cm 距離底部邊緣 50 cm,另一種描述這個球的方式是使用座標(x,y)或者(20,50)表達。x和 y 是代表球的兩個維度。

可以這樣理解:如果我們有個病人的資料集,每個病人可以用很多指標來描述,比如脈搏,膽固醇水平,血壓等。每個指標都代表一個維度。

基本上,SVM 把資料對映到一個更高維的空間然後找到一個能分類的超平面。

類間間隔(margin)經常會和 SVM 聯絡起來,類間間隔是什麼呢?它是超平面和各自類中離超平面最近的資料點間的距離。在球和桌面的例子中,棍子和最近的紅球和藍球間的距離就是類間間隔(margin)。

SVM 的關鍵在於,它試圖最大化這個類間間隔,使分類的超平面遠離紅球和藍球。這樣就能降低誤分類的可能性。

那麼支援向量機的名字是哪裡來的?還是球和桌子的例子中,超平面到紅球和藍球的距離是相等的。這些球或者說資料點叫做支援向量,因為它們都是支援這個超平面的。

那這是監督演算法還是非監督的呢?SVM 屬於監督學習。因為開始需要使用一個數據集讓 SVM學習這些資料中的型別。只有這樣之後 SVM 才有能力對新資料進行分類。

為什麼我們要用 SVM 呢? SVM 和 C4.5大體上都是優先嚐試的二類分類器。根據“沒有免費午餐原理”,沒有哪一種分類器在所有情況下都是最好的。此外,核函式的選擇和可解釋性是演算法的弱點所在。

在哪裡使用 SVM?有什麼 SVM 的實現方法,比較流行的是用scikit-learnMATLAB 和 libsvm實現的這幾種。

下面要介紹的演算法是我最喜歡的演算法之一:

4. Apriori 關聯演算法

它是做什麼的?Apriori演算法學習資料的關聯規則(association rules),適用於包含大量事務(transcation)的資料庫。

什麼是關聯規則?關聯規則學習是學習資料庫中不同變數中的相互關係的一種資料探勘技術。

舉個 Apriori 演算法的例子:我們假設有一個充滿超市交易資料的資料庫,你可以把資料庫想象成一個巨大的電子資料表,表裡每一行是一個顧客的交易情況,每一列代表不用的貨物項。

精彩的部分來了:通過使用 Apriori 演算法,我們就知道了同時被購買的貨物項,這也叫做關聯規則。它的強大之處在於,你能發現相比較其他貨物來說,有一些貨物更頻繁的被同時購買—終極目的是讓購物者買更多的東西。這些常被一起購買的貨物項被稱為項集(itemset)。

舉個例子,你大概能很快看到“薯條+蘸醬”和“薯條+蘇打水”的組合頻繁的一起出現。這些組合被稱為2-itemsets。在一個足夠大的資料集中,就會很難“看到”這些關係了,尤其當還要處理3-itemset 或者更多項集的時候。這正是 Apriori 可以幫忙的地方!

你可能會對 Apriori 演算法如何工作有疑問,在進入演算法本質和細節之前,得先明確3件事情:

  1.     第一是你的項集的大小,你想看到的模式是2-itemset或3-itemset 還是其他的?
  2.     第二是你支援的項集,或者是從事務的總數劃分出的事務包含的項集。一個滿足支援度的項集叫做頻繁項集。
  3.     第三是根據你已經統計的項集中某些資料項,計算其他某個資料項出現的信心水準或是條件概率。例如項集中出現的薯片的話,有67%的信心水準這個項集中也會出現蘇打水。

基本的 Apriori 演算法有三步:

  1. 參與,掃描一遍整個資料庫,計算1-itemsets 出現的頻率。
  2. 剪枝,滿足支援度和可信度的這些1-itemsets移動到下一輪流程,再尋找出現的2-itemsets。
  3. 重複,對於每種水平的項集 一直重複計算,知道我們之前定義的項集大小為止。

這個演算法是監督的還是非監督的?Apriori 一般被認為是一種非監督的學習方法,因為它經常用來挖掘和發現有趣的模式和關係。

但是,等下,還有呢…對Apriori 演算法改造一下也能對已經標記好的資料進行分類。

為什麼使用Apriori 演算法?它易於理解,應用簡單,還有很多的派生演算法。

但另一方面…

當生成項集的時候,演算法是很耗費記憶體、空間和時間。

大量的 Apriori 演算法的語言實現可供使用。比較流行的是 ARtoolWeka, and Orange

下一個演算法對我來說是最難的,一起來看下吧。

5.EM 最大期望演算法 Expectation Maximization

EM 演算法是做什麼的?在資料探勘領域,最大期望演算法(Expectation-Maximization,EM) 一般作為聚類演算法(類似 kmeans 演算法)用來知識挖掘。

在統計學上,當估算帶有無法觀測隱藏變數的統計模型引數時,EM 演算法不斷迭代和優化可以觀測資料的似然估計值。

好,稍等讓我解釋一下…

我不是一個統計學家,所以希望我的簡潔表達能正確並能幫助理解。

下面是一些概念,能幫我們更好的理解問題。

什麼事統計模型?我把模型看做是描述觀測資料是如何生成的。例如,一場考試的分數可能符合一種鐘形曲線,因此這種分數分佈符合鐘形曲線(也稱正態分佈)的假設就是模型。

等下,那什麼是分佈?分佈代表了對所有可測量結果的可能性。例如,一場考試的分數可能符合一個正態分佈。這個正態分佈代表了分數的所有可能性。換句話說,給定一個分數,你可以用這個分佈來預計多少考試參與者可能會得到這個分數。

這很不錯,那模型的引數又是什麼呢?作為模型的一部分,分佈屬性正是由引數來描述的。例如,一個鐘形曲線可以用它的均值和方差來描述。

還是使用考試的例子,一場考試的分數分佈(可測量的結果)符合一個鐘形曲線(就是分佈)。均值是85,方差是100.

那麼,你描述正態分佈需要的所有東西就是這兩個引數:

  1. 平均值
  2. 方差

那麼,似然性呢?回到我們之前的鐘形曲線例子,假設我們已經拿到很多的分數資料,並被告知分數符合一個鐘形曲線。然而,我們並沒有給到所有的分數,只是拿到了一個樣本。

可以這樣做:

我們不知道所有分數的平均值或者方差,但是我們可以使用樣本計算它們。似然性就是用估計的方差和平均值得到的鐘形曲線在算出很多分數的概率。

換句話說,給定一系列可測定的結果,讓我們來估算引數。再使用這些估算出的引數,得到結果的這個假設概率就被稱為似然性。

記住,這是已存在分數的假設概率,並不是未來分數的概率。

你可能會疑問,那概率又是什麼?

還用鐘形曲線的例子解釋,假設我們知道均值和方差。然我們被告知分數符合鐘形曲線。我們觀察到的某些分數的可能性和他們多久一次的被觀測到就是概率。

更通俗的講,給定引數,讓我們來計算可以觀察到什麼結果。這就是概率為我們做的事情。

很好,現在,觀測到的資料和未觀測到的隱藏資料區別在哪裡?觀測到的資料就是你看到或者記錄的資料。未觀測的資料就是遺失的資料。資料丟失的原因有很多(沒有記錄,被忽視了,等等原因)。

演算法的優勢是:對於資料探勘和聚類,觀察到遺失的資料的這類資料點對我們來說很重要。我們不知道具體的類,因此這樣處理丟失資料對使用 EM 演算法做聚類的任務來說是很關鍵的。

再說一次,當估算帶有無法觀測隱藏變數的統計模型引數時,EM 演算法不斷迭代和優化可以觀測資料的似然估計值。 希望現在再說更容易理解了。

演算法的精髓在於:

通過優化似然性,EM 生成了一個很棒的模型,這個模型可以對資料點指定型別標籤—聽起來像是聚類演算法!

EM 演算法是怎麼幫助實現聚類的呢?EM 演算法以對模型引數的猜測開始。然後接下來它會進行一個迴圈的3步:

  1. E 過程:基於模型引數,它會針對每個資料點計算對聚類的分配概率。
  2. M 過程:基於 E 過程的聚類分配,更新模型引數。
  3. 重複知道模型引數和聚類分配工作穩定(也可以稱為收斂)。

EM 是監督演算法還是非監督演算法呢?因為我們不提供已經標好的分類資訊,這是個非監督學習演算法。

為什麼使用它?EM 演算法的一個關鍵賣點就是它的實現簡單直接。另外,它不但可以優化模型引數,還可以反覆的對丟失資料進行猜測。

這使演算法在聚類和產生帶引數的模型上都表現出色。在得知聚類情況和模型引數的情況下,我們有可能解釋清楚有相同屬性的分類情況和新資料屬於哪個類之中。

不過EM 演算法也不是沒有弱點…

第一,EM 演算法在早期迭代中都執行速度很快,但是越後面的迭代速度越慢。

第二,EM 演算法並不能總是尋到最優引數,很容易陷入區域性最優而不是找到全域性最優解。

EM 演算法實現可以在  Weka中找到,mclust package裡面有 R 語言對演算法的實現,scikit-learn的gmm module裡也有對它的實現。

相關推薦

詳細解釋資料10 演算法

在一份調查問卷中,三個獨立專家小組投票選出的十大最有影響力的資料探勘演算法,今天我打算用簡單的語言來解釋一下。 一旦你知道了這些演算法是什麼、怎麼工作、能做什麼、在哪裡能找到,我希望你能把這篇博文當做一個跳板,學習更多的資料探勘知識。 還等什麼?這就開始吧! 1.

資料的模式發現頻繁項集、頻繁閉項集、最頻繁項集

Frequent Itemset(頻繁項集) 稱I={i1,i2,...,im}I=\{i_1, i_2, ..., i_m\}I={i1​,i2​,...,im​}為項(Item)的集合,D={T1,T2,...,Tn}D=\{T_1, T_2, ...,T_

資料的模式發現挖掘序列模式

序列模式挖掘 序列模式挖掘(sequence pattern mining)是資料探勘的內容之一,指挖掘相對時間或其他模式出現頻率高的模式,典型的應用還是限於離散型的序列。。 其涉及在資料示例之間找到統計上相關的模式,其中資料值以序列被遞送。通常假設這些值是

資料的模式發現挖掘多樣頻繁模式

挖掘多層次的關聯規則(Mining Multi-Level Associations) 定義 項經常形成層次。 如圖所示 那麼我們可以根據項的細化分類得到更多有趣的模式,發現更多細節的特性。 Level-reduced min-support

資料的模式發現軌跡模式挖掘、空間模式挖掘

這是模式挖掘、資料探勘的一部分應用。 空間模式挖掘(Mining Spatiotemporal Patterns) 兩個空間實體之間存在若干拓撲關係,這些關係基於兩個實體的位置: 分離 相交 包含 如圖所示地表示位置資訊,可以提取類似下面的規

資料的模式發現GSP演算法、SPADE演算法、PrefixSpan演算法

這前兩個演算法真是出人意料地好理解 GSP演算法 GSP演算法是AprioriAll演算法的擴充套件演算法,其演算法的執行過程和AprioriAll類似。 其核心思想是:在每一次掃描(pass)資料庫時,利用上一次掃描時產生的大序列生成候選序列,並在掃

資料的模式發現Apriori演算法

基本概念 對於A→B 支援度(support): P(A∩B),既有A又有B的概率 置信度(Confidence Strength): conf(A→B)=sup(A∪B)sup(A)=P(B|A) 即,在A發生的事件中同時發生B的概率 例如

資料導論》讀書筆記—— 緒論

書名:資料探勘導論(Introduction to Data Mining) 作者: Pang-Ning Tan / Michael Steinbach / Vipin Kumar 出版社: 人民郵電出版社 譯者: 範明 / 範巨集建 出版年: 2010-12-10 ISBN: 978711524100

吳裕雄 資料與分析案例實戰3——python數值計算工具:Numpy

# 匯入模組,並重命名為npimport numpy as np# 單個列表建立一維陣列arr1 = np.array([3,10,8,7,34,11,28,72])print('一維陣列:\n',arr1)# 一維陣列元素的獲取print(arr1[[2,3,5,7]]) # 巢狀元組建立二維陣列ar

吳裕雄 資料與分析案例實戰4——python資料處理工具:Pandas

# 匯入模組import pandas as pdimport numpy as np # 構造序列gdp1 = pd.Series([2.8,3.01,8.99,8.59,5.18])print(gdp1)# 取出gdp1中的第一、第四和第五個元素print('行號風格的序列:\n',gdp1[[0,3,

吳裕雄 資料與分析案例實戰5——python資料視覺化

# 餅圖的繪製# 匯入第三方模組import matplotlibimport matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['Simhei']plt.rcParams['axes.unicode_minus']=Falseziti =

吳裕雄 資料與分析案例實戰6——線性迴歸預測模型

# 工作年限與收入之間的散點圖# 匯入第三方模組import pandas as pdimport seaborn as snsimport matplotlib.pyplot as plt # 匯入資料集income = pd.read_csv(r'F:\\python_Data_analysis_and

吳裕雄 資料與分析案例實戰9——決策樹與隨機深林

# 匯入第三方模組import pandas as pd# 讀入資料Titanic = pd.read_csv(r'F:\\python_Data_analysis_and_mining\\10\\Titanic.csv')print(Titanic.shape)print(Titanic.head())#

吳裕雄 資料與分析案例實戰12——SVM模型的應用

import pandas as pd # 匯入第三方模組from sklearn import svmfrom sklearn import model_selectionfrom sklearn import metrics # 讀取外部資料letters = pd.read_csv(r'F:\\py

吳裕雄 資料與分析案例實戰14——Kmeans聚類分析

# 匯入第三方包import pandas as pdimport numpy as np import matplotlib.pyplot as pltfrom sklearn.cluster import KMeansfrom sklearn import metrics # 隨機生成三組二元正態分佈隨

python資料實戰筆記——文字挖掘1:語料庫構建

什麼是文字挖掘 ?   文字挖掘是抽取有效、新穎、有用、可理解的、散佈在文字檔案中的有價值知識,並且利用這些知識更好地組織資訊的過程。 一、搭建語料庫 語料庫:要進行文字分析的所有文件的集合。 需要用到的模組:os、os.path、codecs、pandas 程

python資料實戰筆記——文字挖掘4:詞雲繪製

概念: 詞雲:詞雲是指對文字中詞頻較高的分詞,給予視覺上的突出,形成“關鍵詞渲染”,從而過濾掉大量的文字資訊,使瀏覽者一眼掃過就可以領略文字的主旨。 需要用到的包:wordcloud、matplotlib wordcloud包下載地址:http://www.l

python資料實戰筆記——文字分析6:關鍵詞提取

緊接上篇的文件,這節學習關鍵字的提取,關鍵詞——keyword,是人們快速瞭解文件內容,把握主題的重要內容。 #匯入需要的模組 import os import codecs import pandas import jieba import jieba.ana

python資料入門與實踐--------電離層Ionosphere, scikit-learn估計器,K近鄰分類器,交叉檢驗,設定引數

ionosphere.data下載地址:http://archive.ics.uci.edu/ml/machine-learning-databases/ionosphere/ 原始碼及相關資料下載  https://github.com/xxg1413/MachineLea

資料基礎導論學習筆記

第五章 分類 其他分類 貝葉斯分類器 貝葉斯定理:把類的先驗知識和從資料中收集的新證據相結合的統計原理。 公式: P(Y|X)=P(X|Y)*P(Y)/P(X) X是屬性集,Y是類變數 把X和Y看成隨機變數,用P(Y|X)以概率的方式捕捉二者之間的關係,這個條件