【白话机器学习】算法理论+实战之EM聚类
1. 寫(xiě)在前面
如果想從事數(shù)據(jù)挖掘或者機(jī)器學(xué)習(xí)的工作,掌握常用的機(jī)器學(xué)習(xí)算法是非常有必要的,常見(jiàn)的機(jī)器學(xué)習(xí)算法:
監(jiān)督學(xué)習(xí)算法:邏輯回歸,線性回歸,決策樹(shù),樸素貝葉斯,K近鄰,支持向量機(jī),集成算法Adaboost等
無(wú)監(jiān)督算法:聚類,降維,關(guān)聯(lián)規(guī)則, PageRank等
已發(fā)布:
【白話機(jī)器學(xué)習(xí)】算法理論+實(shí)戰(zhàn)之K近鄰算法
【白話機(jī)器學(xué)習(xí)】算法理論+實(shí)戰(zhàn)之決策樹(shù)
【白話機(jī)器學(xué)習(xí)】算法理論+實(shí)戰(zhàn)之樸素貝葉斯
【白話機(jī)器學(xué)習(xí)】算法理論+實(shí)戰(zhàn)之支持向量機(jī)(SVM)
【白話機(jī)器學(xué)習(xí)】算法理論+實(shí)戰(zhàn)之AdaBoost算法
【白話機(jī)器學(xué)習(xí)】算法理論+實(shí)戰(zhàn)之K-Means聚類算法
【白話機(jī)器學(xué)習(xí)】算法理論+實(shí)戰(zhàn)之PCA降維
為了詳細(xì)的理解這些原理,曾經(jīng)看過(guò)西瓜書(shū),統(tǒng)計(jì)學(xué)習(xí)方法,機(jī)器學(xué)習(xí)實(shí)戰(zhàn)等書(shū),也聽(tīng)過(guò)一些機(jī)器學(xué)習(xí)的課程,但總感覺(jué)話語(yǔ)里比較深?yuàn)W,讀起來(lái)沒(méi)有耐心,并且理論到處有,而實(shí)戰(zhàn)最重要, 所以在這里想用最淺顯易懂的語(yǔ)言寫(xiě)一個(gè)白話機(jī)器學(xué)習(xí)算法理論+實(shí)戰(zhàn)系列。
個(gè)人認(rèn)為,理解算法背后的idea和使用,要比看懂它的數(shù)學(xué)推導(dǎo)更加重要。idea會(huì)讓你有一個(gè)直觀的感受,從而明白算法的合理性,數(shù)學(xué)推導(dǎo)只是將這種合理性用更加嚴(yán)謹(jǐn)?shù)恼Z(yǔ)言表達(dá)出來(lái)而已,打個(gè)比方,一個(gè)梨很甜,用數(shù)學(xué)的語(yǔ)言可以表述為糖分含量90%,但只有親自咬一口,你才能真正感覺(jué)到這個(gè)梨有多甜,也才能真正理解數(shù)學(xué)上的90%的糖分究竟是怎么樣的。如果這些機(jī)器學(xué)習(xí)算法是個(gè)梨,本文的首要目的就是先帶領(lǐng)大家咬一口。另外還有下面幾個(gè)目的:
檢驗(yàn)自己對(duì)算法的理解程度,對(duì)算法理論做一個(gè)小總結(jié)
能開(kāi)心的學(xué)習(xí)這些算法的核心思想, 找到學(xué)習(xí)這些算法的興趣,為深入的學(xué)習(xí)這些算法打一個(gè)基礎(chǔ)。
每一節(jié)課的理論都會(huì)放一個(gè)實(shí)戰(zhàn)案例,能夠真正的做到學(xué)以致用,既可以鍛煉編程能力,又可以加深算法理論的把握程度。
也想把之前所有的筆記和參考放在一塊,方便以后查看時(shí)的方便。
學(xué)習(xí)算法的過(guò)程,獲得的不應(yīng)該只有算法理論,還應(yīng)該有樂(lè)趣和解決實(shí)際問(wèn)題的能力!
今天是白話機(jī)器學(xué)習(xí)算法理論+實(shí)戰(zhàn)的第九篇之EM聚類。聽(tīng)到這個(gè)名字,就知道這是一個(gè)無(wú)監(jiān)督學(xué)習(xí)算法了,如果使用基于最大似然估計(jì)的模型,模型中存在隱變量的時(shí)候,就要用到EM算法去做估計(jì)。所以這個(gè)算法就是含有隱變量的概率模型參數(shù)的極大似然估計(jì)法,可能我說(shuō)的這些話你還聽(tīng)不太懂,什么隱變量,什么極大似然亂七八糟的?沒(méi)事,通過(guò)今天的學(xué)習(xí),就能夠快速的掌握EM算法的工作原理,還能理解極大似然,還能最后通過(guò)調(diào)用工具實(shí)現(xiàn)EM算法并完成一個(gè)王者榮耀英雄人物的聚類(玩游戲的時(shí)候,是不是會(huì)遇到對(duì)手搶了你擅長(zhǎng)的英雄的情況啊, 那你該如何選一個(gè)和這個(gè)英雄整體實(shí)力差不多的呢?)。哈哈 ,是不是迫不及待了啊??我們開(kāi)始吧。
大綱如下:
從一個(gè)生活場(chǎng)景引出EM算法的核心思想(分菜均勻,你該如何劃分?)
白話EM算法的工作原理,并舉例子說(shuō)明(拋硬幣都玩過(guò)吧)
看看EM聚類(和KMeans有何不同?)
EM算法實(shí)戰(zhàn) - 對(duì)王者榮耀的英雄角色進(jìn)行聚類(實(shí)行聚類之后,我們就可以找到可以互相替換的英雄,也就不怕你的對(duì)手選擇了你擅長(zhǎng)的英雄了)
OK, let's go!
2. EM算法,還是先從分菜開(kāi)始吧!
提起EM算法(英文叫做Expectation Maximization,最大期望算法),你可能是第一次聽(tīng)說(shuō)過(guò), 但是你知道嗎??你在生活中可能不止一次用過(guò)這個(gè)思想了吧, 正所謂我之前常說(shuō)的算法來(lái)源于生活。啥?不信??那我們看看下面這個(gè)場(chǎng)景:
★假設(shè),你炒了一份菜,我想要你把它平均分到兩個(gè)碟子里,該怎么分?
你一聽(tīng)平均分?總不能拿個(gè)稱來(lái)稱一稱,計(jì)算出一半的分量進(jìn)行平分吧,如果你真這樣做,那不得不承認(rèn)你是個(gè)天才,不用學(xué)機(jī)器學(xué)習(xí)了。?反正我感覺(jué)大部分人的方法是這樣做的:
先分一部分到碟子 A 中,然后再把剩余的分到碟子 B 中,再來(lái)觀察碟子 A 和 B 里的菜是否一樣多,哪個(gè)多就勻一些到少的那個(gè)碟子里,然后再觀察碟子 A 和 B 里的是否一樣多……
整個(gè)過(guò)程一直重復(fù)下去,直到份量不發(fā)生變化為止。
你是采用的哪種方法呢??如果是后者,那么恭喜你,你已經(jīng)初步認(rèn)識(shí)了EM算法,并且和它打交道不止一次了。下面的知識(shí)對(duì)你來(lái)說(shuō)已經(jīng)灑灑水了。輕松愉快的往下走吧。
在這個(gè)例子中你能看到三個(gè)主要的步驟:初始化參數(shù),觀察預(yù)期和重新估計(jì)。首先是先給每個(gè)碟子初始化一些菜量,然后再觀察預(yù)期,這兩個(gè)步驟實(shí)際上就是期望步驟(Expectation)簡(jiǎn)稱E步。如果結(jié)果存在偏差就需要重新估計(jì)參數(shù),這個(gè)就是最大化步驟(Maximization)簡(jiǎn)稱M步。這兩個(gè)步驟加起來(lái)也就是 EM 算法的過(guò)程。哈哈,是不是豁然開(kāi)朗了啊,趁著這個(gè)時(shí)候,看看EM算法的具體工作原理吧。
3. EM算法的工作原理
說(shuō)到 EM 算法,我們需要先來(lái)看一個(gè)概念“最大似然”,英文是 Maximum Likelihood,Likelihood 代表可能性,所以最大似然也就是最大可能性的意思。
什么是最大似然呢?
★舉個(gè)例子,有一男一女兩個(gè)同學(xué),現(xiàn)在要對(duì)他倆進(jìn)行身高的比較,誰(shuí)會(huì)更高呢?根據(jù)我們的經(jīng)驗(yàn),相同年齡下男性的平均身高比女性的高一些,所以男同學(xué)高的可能性會(huì)很大。這里運(yùn)用的就是最大似然的概念。
”那還有一個(gè)問(wèn)題:最大似然估計(jì)是什么呢?
★它指的就是一件事情已經(jīng)發(fā)生了,然后反推更有可能是什么因素造成的。還是用一男一女比較身高為例,假設(shè)有一個(gè)人比另一個(gè)人高,反推他可能是男性。最大似然估計(jì)是一種通過(guò)已知結(jié)果,估計(jì)參數(shù)的方法。
”上面說(shuō)的這些是啥?EM 算法到底是什么?它和最大似然估計(jì)又有什么關(guān)系呢?(你這三連問(wèn),我有點(diǎn)不知所措)
其實(shí),EM 算法是一種求解最大似然估計(jì)的方法,通過(guò)觀測(cè)樣本,來(lái)找出樣本的模型參數(shù)。
★再回過(guò)來(lái)看下開(kāi)頭我給你舉的分菜的這個(gè)例子,實(shí)際上最終我們想要的是碟子 A 和碟子 B 中菜的份量,你可以把它們理解為想要求得的模型參數(shù)。然后我們通過(guò) EM 算法中的 E 步來(lái)進(jìn)行觀察,然后通過(guò) M 步來(lái)進(jìn)行調(diào)整 A 和 B 的參數(shù),最后讓碟子 A 和碟子 B 的參數(shù)不再發(fā)生變化為止。
”然后,你恍然大悟,哦,原理EM算法就這么簡(jiǎn)單啊,哈哈,不要太高估自己了, 實(shí)際我們遇到的問(wèn)題,比分菜復(fù)雜的多。不行,那再看看我給你舉的下面這個(gè)例子:
拋硬幣大家都玩過(guò)吧,假設(shè)我們有 A 和 B 兩枚硬幣,我們做了 5 組實(shí)驗(yàn),每組實(shí)驗(yàn)投擲 10 次,每次只能只有A或者B一枚硬幣。那么我們統(tǒng)計(jì)出現(xiàn)每組實(shí)驗(yàn)正面的次數(shù),實(shí)驗(yàn)結(jié)果如下:我想問(wèn)你,你知道,A硬幣和B硬幣各自正面朝上的概率嗎?
怎么樣?蒙了吧, 你說(shuō)這咋求,每一組實(shí)驗(yàn),我都不知道用的是A或者B拋的。我怎么算??那么好,我假設(shè)把這個(gè)表再給你完善一下:這你能告訴我答案了吧?你說(shuō):這還不簡(jiǎn)單, 我們不就可以直接求了,令A(yù)正面朝上的概率是θA, B正面朝上的概率是θB,然后:哈哈, 漂亮!你知道嗎?一開(kāi)始我提到這樣一句話:
★如果使用基于最大似然估計(jì)的模型,模型中存在隱變量的時(shí)候,就要用到EM算法去做估計(jì)
”這里的第二列,就是隱含的數(shù)據(jù),而A和B就是隱變量。實(shí)際中我們是不知道這一列的,就是開(kāi)始給你的只有實(shí)驗(yàn)組數(shù)和正面的次數(shù), 那么你該怎么辦呢?
也就是說(shuō),我們?nèi)绻恢烂恳唤M扔的是A還是B,那么我們就無(wú)法去估計(jì)θA和θB, 而如果想知道每一組扔的是A還是B,我們就必須先知道A和B正面朝上的概率θA和θB,然后利用極大似然的思想,根據(jù)每一組實(shí)驗(yàn)正面朝上的次數(shù)去估計(jì)出這一輪究竟用的A還是B。?有點(diǎn)繞哈!?你會(huì)發(fā)現(xiàn)這是一個(gè)雞生蛋蛋生雞的問(wèn)題,無(wú)法求解!
那么說(shuō)了半天,應(yīng)該怎么辦呢??這里就采用了EM算法的思想。
★我先隨機(jī)初始化一個(gè)θA和θB, 有了這兩個(gè)參數(shù),我們就能按照極大似然估計(jì)出每一組用的是A還是B,然后基于每一組用的是A還是B,我們又能按照極大似然反過(guò)來(lái)計(jì)算出θA和θB,然后又能去估計(jì)新的用的是A還是B,然后又能計(jì)算新的θA和θB,這樣一輪輪的下去, ?當(dāng)計(jì)算出的新的θA和θB與我們前一輪θA和θB一樣的時(shí)候,說(shuō)明這個(gè)θA和θB有可能就是真實(shí)的值了。這個(gè)就是EM初級(jí)版。
”好了,根據(jù)我上面說(shuō)的,我們看看怎么實(shí)行吧。這里有兩個(gè)問(wèn)題需要解答一下:
★新估計(jì)出的θA和θB一定會(huì)更接近真實(shí)的θA和θB?答案是:沒(méi)錯(cuò),一定會(huì)更接近真實(shí)的θA和θB,數(shù)學(xué)可以證明,但這超出了本文的主題,請(qǐng)參閱其他書(shū)籍或文章。(這就類似你均勻分菜,總會(huì)有分好的那一個(gè)點(diǎn)吧)
迭代一定會(huì)收斂到真實(shí)的θA和θB嗎?答案是:不一定,取決于θA和θB的初始化值,一般是會(huì)的。
其實(shí),上面介紹的這個(gè)只是一個(gè)初始的版本,為什么這么說(shuō)呢?因?yàn)槲覀兩厦娴谝淮斡?jì)算概率的時(shí)候,我們算出:這時(shí)候我們直接取得第一次用硬幣A(下面幾組實(shí)驗(yàn)同理)。
你沒(méi)有發(fā)現(xiàn),這樣做決定太硬,太絕對(duì)了嗎??雖然B出現(xiàn)正面次數(shù)為5的概率比A的小,但是也不是0啊,就是也有可能出現(xiàn)啊。這時(shí)候我們應(yīng)該考慮進(jìn)這種可能的情況,那么這時(shí)候,第一輪實(shí)驗(yàn)用的A的概率就是: 0.246 / (0.246 + 0.015) = 0.9425;用B的概率就是1-0.9425 = 0.0575。
相比于前面的方法,我們按照最大似然概率,直接將第1輪估計(jì)為用的硬幣A,此時(shí)的我們更加謹(jǐn)慎,我們只說(shuō),有0.9425的概率是硬幣A,有0.0575的概率是硬幣B,不再是非此即彼。這樣我們?cè)诠烙?jì)θA和θB時(shí),就可以用上每一輪實(shí)驗(yàn)的數(shù)據(jù),而不是某幾輪實(shí)驗(yàn)的數(shù)據(jù),顯然這樣會(huì)更好一些。
這一步,我們實(shí)際上估計(jì)的是用A或者B的一個(gè)概率分布,這步就稱作E步。
這樣,每一輪實(shí)驗(yàn),我們會(huì)求出這樣一個(gè)表來(lái),分別有A和B的概率:然后,我們?cè)诮Y(jié)合著統(tǒng)計(jì)結(jié)果,按照最大似然概率的法則重新估計(jì)新的θA和θB:
★以硬幣A為例, 第一輪的正面次數(shù)為5相當(dāng)于 5次正面,5次反面
0.9425 * 5 = 4.7125(這是正面)
0.9425 * 5 = 4.7125(這是反面)
那么對(duì)于硬幣A來(lái)說(shuō), 可以把五輪的表格畫(huà)成下面的形式:這樣, 新的thetaA = 4.22 / (4.22+7.98)=0.35 ?這樣,改變了硬幣A和B的估計(jì)方法之后,會(huì)發(fā)現(xiàn),新估計(jì)的thetaA會(huì)更加接近真實(shí)的值,因?yàn)槲覀兪褂昧嗣恳惠喌臄?shù)據(jù),而不是某幾輪的數(shù)據(jù)。
PS:上面這個(gè)表我只是為了說(shuō)明意思,截取過(guò)來(lái)的一個(gè)圖,真實(shí)數(shù)據(jù)并不是這樣的數(shù)據(jù),看第一輪也能看出來(lái),真實(shí)數(shù)據(jù)是我上面計(jì)算的那個(gè),按照那個(gè)計(jì)算方法,計(jì)算出每一輪的硬幣A的時(shí)候正面和反面的數(shù)據(jù),硬幣B的正面和方面的數(shù)據(jù),然后求新的θA和θB會(huì)更加準(zhǔn)確一些。
這步中,我們根據(jù)E步求出了硬幣A和B在每一輪實(shí)驗(yàn)中的一個(gè)概率分布,依據(jù)最大似然法則結(jié)合所有的數(shù)據(jù)去估計(jì)新的θ1和θ2, 被稱作M步。
這個(gè)就是進(jìn)階版的EM算法。
說(shuō)到這,EM算法的工作原理可算是介紹完了, 你明白了嗎?
簡(jiǎn)單的總結(jié)下上面的步驟:
★你能看出 EM 算法中的 E 步驟就是通過(guò)舊的參數(shù)來(lái)計(jì)算隱藏變量。然后在 M 步驟中,通過(guò)得到的隱藏變量的結(jié)果來(lái)重新估計(jì)參數(shù)。直到參數(shù)不再發(fā)生變化,得到我們想要的結(jié)果。
”下面,我們看看EM算法聚類的原理,前面介紹過(guò)KMeans聚類,同是聚類,有什么區(qū)別?
4. EM聚類的工作原理
EM算法一般用于聚類,也就是無(wú)監(jiān)督模型里面,因?yàn)闊o(wú)監(jiān)督學(xué)習(xí)沒(méi)有標(biāo)簽(即y值),EM算法可以先給無(wú)監(jiān)督學(xué)習(xí)估計(jì)一個(gè)隱狀態(tài)(即標(biāo)簽),有了標(biāo)簽,算法模型就可以轉(zhuǎn)換成有監(jiān)督學(xué)習(xí),這時(shí)就可以用極大似然估計(jì)法求解出模型最優(yōu)參數(shù)。其中估計(jì)隱狀態(tài)流程應(yīng)為EM算法的E步,后面用極大似然估計(jì)為M步。
相比于 K-Means 算法,EM 聚類更加靈活,比如下面這兩種情況,K-Means 會(huì)得到下面的聚類結(jié)果。因?yàn)?K-Means 是通過(guò)距離來(lái)區(qū)分樣本之間的差別的,且每個(gè)樣本在計(jì)算的時(shí)候只能屬于一個(gè)分類,稱之為是硬聚類算法。而 EM 聚類在求解的過(guò)程中,實(shí)際上每個(gè)樣本都有一定的概率和每個(gè)聚類相關(guān),叫做軟聚類算法。
★你可以把 EM 算法理解成為是一個(gè)框架,在這個(gè)框架中可以采用不同的模型來(lái)用 EM 進(jìn)行求解。常用的 EM 聚類有 GMM 高斯混合模型和 HMM 隱馬爾科夫模型。GMM(高斯混合模型)聚類就是 EM 聚類的一種。比如上面這兩個(gè)圖,可以采用 GMM 來(lái)進(jìn)行聚類。
”和 K-Means 一樣,我們事先知道聚類的個(gè)數(shù),但是不知道每個(gè)樣本分別屬于哪一類。通常,我們可以假設(shè)樣本是符合高斯分布的(也就是正態(tài)分布)。每個(gè)高斯分布都屬于這個(gè)模型的組成部分(component),要分成 K 類就相當(dāng)于是 K 個(gè)組成部分。這樣我們可以先初始化每個(gè)組成部分的高斯分布的參數(shù),然后再看來(lái)每個(gè)樣本是屬于哪個(gè)組成部分。這也就是 E 步驟。
再通過(guò)得到的這些隱含變量結(jié)果,反過(guò)來(lái)求每個(gè)組成部分高斯分布的參數(shù),即 M 步驟。反復(fù) EM 步驟,直到每個(gè)組成部分的高斯分布參數(shù)不變?yōu)橹埂?/p>
這樣也就相當(dāng)于將樣本按照 GMM 模型進(jìn)行了 EM 聚類。所以說(shuō)很多KMeans解決不了的問(wèn)題,EM聚類是可以解決的。在 EM 框架中,我們將潛在類別當(dāng)做隱藏變量,樣本看做觀察值,把聚類問(wèn)題轉(zhuǎn)化為參數(shù)估計(jì)問(wèn)題,最終把樣本進(jìn)行聚類。
最后再多啰嗦一句,EM 算法相當(dāng)于一個(gè)框架,你可以采用不同的模型來(lái)進(jìn)行聚類,比如 GMM(高斯混合模型),或者 HMM(隱馬爾科夫模型)來(lái)進(jìn)行聚類。
GMM 是通過(guò)概率密度來(lái)進(jìn)行聚類,聚成的類符合高斯分布(正態(tài)分布)。
而 HMM 用到了馬爾可夫過(guò)程,在這個(gè)過(guò)程中,我們通過(guò)狀態(tài)轉(zhuǎn)移矩陣來(lái)計(jì)算狀態(tài)轉(zhuǎn)移的概率。HMM 在自然語(yǔ)言處理和語(yǔ)音識(shí)別領(lǐng)域中有廣泛的應(yīng)用。
好了,也說(shuō)了EM算法聚類的原理了,下面讓我們實(shí)戰(zhàn)吧!
5. EM算法實(shí)戰(zhàn) - 王者榮耀英雄的聚類
上面是EM算法的原理,懂了原理之后,趁熱打鐵,做一個(gè)實(shí)際的小項(xiàng)目,看看EM算法的威力吧!
5.1 如何使用EM工具包
在 Python 中有第三方的 EM 算法工具包。由于 EM 算法是一個(gè)聚類框架,所以你需要明確你要用的具體算法,比如是采用 GMM 高斯混合模型,還是 HMM 隱馬爾科夫模型。
我們主要是用GMM,所以需要引入工具包
from sklearn.mixture import GaussianMixture那么如何創(chuàng)建GMM聚類呢?
★gmm = GaussianMixture(n_components=1, covariance_type='full', max_iter=100)來(lái)創(chuàng)建, 參數(shù)如下:
n_components:即高斯混合模型的個(gè)數(shù),也就是我們要聚類的個(gè)數(shù),默認(rèn)值為 1。如果你不指定 n_components,最終的聚類結(jié)果都會(huì)為同一個(gè)值。
covariance_type:代表協(xié)方差類型。一個(gè)高斯混合模型的分布是由均值向量和協(xié)方差矩陣決定的,所以協(xié)方差的類型也代表了不同的高斯混合模型的特征。協(xié)方差類型有 4 種取值:
covariance_type=full,代表完全協(xié)方差,也就是元素都不為 0;
covariance_type=tied,代表相同的完全協(xié)方差;
covariance_type=diag,代表對(duì)角協(xié)方差,也就是對(duì)角不為 0,其余為 0;
covariance_type=spherical,代表球面協(xié)方差,非對(duì)角為 0,對(duì)角完全相同,呈現(xiàn)球面的特性。
max_iter:代表最大迭代次數(shù),EM 算法是由 E 步和 M 步迭代求得最終的模型參數(shù),這里可以指定最大迭代次數(shù),默認(rèn)值為 100。
創(chuàng)建完GMM聚類器之后,可以傳入數(shù)據(jù)讓它進(jìn)行迭代擬合。
我們使用 fit 函數(shù),傳入樣本特征矩陣,模型會(huì)自動(dòng)生成聚類器,然后使用 prediction=gmm.predict(data) 來(lái)對(duì)數(shù)據(jù)進(jìn)行聚類,傳入你想進(jìn)行聚類的數(shù)據(jù),可以得到聚類結(jié)果 prediction。
你能看出來(lái)擬合訓(xùn)練和預(yù)測(cè)可以傳入相同的特征矩陣,這是因?yàn)榫垲愂菬o(wú)監(jiān)督學(xué)習(xí),你不需要事先指定聚類的結(jié)果,也無(wú)法基于先驗(yàn)的結(jié)果經(jīng)驗(yàn)來(lái)進(jìn)行學(xué)習(xí)。只要在訓(xùn)練過(guò)程中傳入特征值矩陣,機(jī)器就會(huì)按照特征值矩陣生成聚類器,然后就可以使用這個(gè)聚類器進(jìn)行聚類了。
5.2如何用 EM 算法對(duì)王者榮耀數(shù)據(jù)進(jìn)行聚類
首先我們知道聚類的原理是“人以群分,物以類聚”。通過(guò)聚類算法把特征值相近的數(shù)據(jù)歸為一類,不同類之間的差異較大,這樣就可以對(duì)原始數(shù)據(jù)進(jìn)行降維。通過(guò)分成幾個(gè)組(簇),來(lái)研究每個(gè)組之間的特性。或者我們也可以把組(簇)的數(shù)量適當(dāng)提升,這樣就可以找到可以互相替換的英雄,比如你的對(duì)手選擇了你擅長(zhǎng)的英雄之后,你可以選擇另一個(gè)英雄作為備選。
5.2.1 數(shù)據(jù)集的介紹
看看數(shù)據(jù)的樣子:數(shù)據(jù)集在這里下載這里我們收集了 69 名英雄的 20 個(gè)特征屬性,這些屬性分別是最大生命、生命成長(zhǎng)、初始生命、最大法力、法力成長(zhǎng)、初始法力、最高物攻、物攻成長(zhǎng)、初始物攻、最大物防、物防成長(zhǎng)、初始物防、最大每 5 秒回血、每 5 秒回血成長(zhǎng)、初始每 5 秒回血、最大每 5 秒回藍(lán)、每 5 秒回藍(lán)成長(zhǎng)、初始每 5 秒回藍(lán)、最大攻速和攻擊范圍等。
5.2.2執(zhí)行流程
在這里插入圖片描述首先加載數(shù)據(jù)源
在準(zhǔn)備階段,我們需要對(duì)數(shù)據(jù)進(jìn)行探索,包括采用數(shù)據(jù)可視化技術(shù),讓我們對(duì)英雄屬性以及這些屬性之間的關(guān)系理解更加深刻,然后對(duì)數(shù)據(jù)質(zhì)量進(jìn)行評(píng)估,是否進(jìn)行數(shù)據(jù)清洗,最后進(jìn)行特征選擇方便后續(xù)的聚類算法
聚類階段:選擇適合的聚類模型,這里我們采用 GMM 高斯混合模型進(jìn)行聚類,并輸出聚類結(jié)果,對(duì)結(jié)果進(jìn)行分析。
5.2.3 實(shí)戰(zhàn)操作
首先導(dǎo)入包
加載數(shù)據(jù)
數(shù)據(jù)可視化的探索 我們將 20 個(gè)英雄屬性之間的關(guān)系用熱力圖呈現(xiàn)了出來(lái),中間的數(shù)字代表兩個(gè)屬性之間的關(guān)系系數(shù),最大值為 1,代表完全正相關(guān),關(guān)系系數(shù)越大代表相關(guān)性越大。從圖中你能看出來(lái)“最大生命”“生命成長(zhǎng)”和“初始生命”這三個(gè)屬性的相關(guān)性大,我們只需要保留一個(gè)屬性即可。同理我們也可以對(duì)其他相關(guān)性大的屬性進(jìn)行篩選,保留一個(gè)。你在代碼中可以看到,我用 features_remain 數(shù)組保留了特征選擇的屬性,這樣就將原本的 20 個(gè)屬性降維到了 13 個(gè)屬性。
結(jié)果如下:
特征工程
數(shù)據(jù)規(guī)范化 我們能看到“最大攻速”這個(gè)屬性值是百分?jǐn)?shù),不適合做矩陣運(yùn)算,因此我們需要將百分?jǐn)?shù)轉(zhuǎn)化為小數(shù)。我們也看到“攻擊范圍”這個(gè)字段的取值為遠(yuǎn)程或者近戰(zhàn),也不適合矩陣運(yùn)算,我們將取值做個(gè)映射,用 1 代表遠(yuǎn)程,0 代表近戰(zhàn)。然后采用 Z-Score 規(guī)范化,對(duì)特征矩陣進(jìn)行規(guī)范化。
建模并產(chǎn)生結(jié)果,寫(xiě)入文件
我們采用了 GMM 高斯混合模型,并將結(jié)果輸出到 CSV 文件中。這里我將輸出的結(jié)果截取了一段(設(shè)置聚類個(gè)數(shù)為 30):第一列代表的是分組(簇),我們能看到張飛、程咬金分到了一組,牛魔、白起是一組,老夫子自己是一組,達(dá)摩、典韋是一組。聚類的特點(diǎn)是相同類別之間的屬性值相近,不同類別的屬性值差異大。因此如果你擅長(zhǎng)用典韋這個(gè)英雄,不防試試達(dá)摩這個(gè)英雄。同樣你也可以在張飛和程咬金中進(jìn)行切換。這樣就算你的英雄被別人選中了,你依然可以有備選的英雄可以使用。
聚類和分類不一樣,聚類是無(wú)監(jiān)督的學(xué)習(xí)方式,也就是我們沒(méi)有實(shí)際的結(jié)果可以進(jìn)行比對(duì),所以聚類的結(jié)果評(píng)估不像分類準(zhǔn)確率一樣直觀,那么有沒(méi)有聚類結(jié)果的評(píng)估方式呢?這里我們可以采用 Calinski-Harabaz 指標(biāo),代碼如下:
from sklearn.metrics import calinski_harabaz_score print(calinski_harabaz_score(data, prediction))指標(biāo)分?jǐn)?shù)越高,代表聚類效果越好,也就是相同類中的差異性小,不同類之間的差異性大。當(dāng)然具體聚類的結(jié)果含義,我們需要人工來(lái)分析,也就是當(dāng)這些數(shù)據(jù)被分成不同的類別之后,具體每個(gè)類表代表的含義。
另外聚類算法也可以作為其他數(shù)據(jù)挖掘算法的預(yù)處理階段,這樣我們就可以將數(shù)據(jù)進(jìn)行降維了。
6. 總結(jié)
到這終于寫(xiě)完了, 我的天啊,每次寫(xiě)都是這么多,這可以慢慢的干貨啊,雖然多,但真的可以學(xué)到東西。?趕緊來(lái)總結(jié)一下,今天首先從分菜的例子出發(fā),感受了一下EM算法。
然后,我們從拋硬幣的例子,知道了初級(jí)EM和升級(jí)版EM。然后解釋了EM的工作原理,EM 算法中的 E 步驟就是通過(guò)舊的參數(shù)來(lái)計(jì)算隱藏變量。然后在 M 步驟中,通過(guò)得到的隱藏變量的結(jié)果來(lái)重新估計(jì)參數(shù)。直到參數(shù)不再發(fā)生變化,得到我們想要的結(jié)果。
接下來(lái),就是對(duì)比了EM和KMeans的區(qū)別,知道了EM可以解決Kmeans不能解決的一些問(wèn)題,并且EM是個(gè)框架,具體實(shí)現(xiàn)包括高斯混合模型和隱馬爾可夫模型,后期會(huì)具體講隱馬爾可夫。
最后,調(diào)用sklearn的EM算法工具完成了一個(gè)王者榮耀英雄的聚類任務(wù), 知道了一個(gè)衡量聚類結(jié)果的函數(shù)。
希望通過(guò)今天的學(xué)習(xí)可以對(duì)EM算法在感性上有一個(gè)了解,至于理性方面, 可以看看西瓜書(shū)或者統(tǒng)計(jì)學(xué)習(xí)方法進(jìn)行深一步的學(xué)習(xí)了。
參考:
http://note.youdao.com/noteshare?id=2949a4c56e27b97df5fa282dc75060e7&sub=B08633D2250849F2B33A5947351E8389
https://www.cnblogs.com/coshaho/p/9573367.html
https://blog.csdn.net/taka_is_beauty/article/details/88095032
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)在線手冊(cè)AI基礎(chǔ)下載(pdf更新到25集)本站qq群1003271085,加入微信群請(qǐng)回復(fù)“加群”獲取一折本站知識(shí)星球優(yōu)惠券,請(qǐng)回復(fù)“知識(shí)星球”喜歡文章,點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的【白话机器学习】算法理论+实战之EM聚类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【科普】国内外高质量数据科学竞赛平台有哪
- 下一篇: 【数据挖掘】视频版权检测优胜解决方案