前言
這篇筆記是StatQuest系列視頻教程的第50節(jié)定拟,主要內(nèi)容是講K鄰近算法(K-Nearest neighbors algorithm偶宫,縮寫為KNN)蒋畜。K鄰近算法是一種對(duì)數(shù)據(jù)進(jìn)行分類的蹦魔,非常簡單的算法饶号。例如我們已經(jīng)有了很多對(duì)細(xì)胞進(jìn)行分類的數(shù)據(jù)铁追,那么我們要研究某個(gè)細(xì)胞屬于這些分類中的哪個(gè)類別,就需要使用這種算法茫船,如下所示:
K鄰近算法基本思想
先看一個(gè)簡單的案例琅束。
第一步,我們擁有一批數(shù)據(jù)算谈,這批數(shù)據(jù)已經(jīng)進(jìn)行了分類涩禀,在下圖中,來源于小腸腫瘤中的這些細(xì)胞擁有不同的分類然眼,我們使用PCA對(duì)這些細(xì)胞進(jìn)行聚類艾船,如下圖所示:
第二步,當(dāng)我們?cè)偻@批數(shù)據(jù)中添加一個(gè)新的細(xì)胞時(shí),我們此時(shí)并不清楚這個(gè)新細(xì)胞的分類屿岂,因?yàn)檫@個(gè)細(xì)胞是從另外的一個(gè)腫瘤中取出來的践宴,不好歸類,如下所示:
第三步:我們計(jì)算這個(gè)新的細(xì)胞離它最近的那個(gè)分類(也就是最近的領(lǐng)居“nearest neighbors”)爷怀,這個(gè)細(xì)胞就屬于這個(gè)分類阻肩。如果“K最近的鄰居(K-nearest neighbors)”中的這個(gè)K等于1(這個(gè)K表示的是鄰居的數(shù)目),那么我們就能把這個(gè)新的細(xì)胞歸于這個(gè)離它最近的分類中运授,在這個(gè)案例中烤惊,這個(gè)最近的分類是綠色的。如果K等于11吁朦,那我們就需要使用11個(gè)最近的鄰居撕氧,如下所示:
假如這個(gè)新的細(xì)胞在其它的地方,如下所示:
如果K=11(這個(gè)意思表示喇完,最這個(gè)點(diǎn)最近的鄰居有11個(gè)),那么這個(gè)新的細(xì)胞就位于兩類或更多的類中間剥啤,我們就把它歸于得到“票數(shù)”最多的那個(gè)類別锦溪,那么在這個(gè)案例中,有7個(gè)最近的鄰居是紅色府怯,3個(gè)最近的鄰居是橘黃色刻诊,有1個(gè)最近的鄰居是綠色,由于紅色得到的票數(shù)最多牺丙,那么這個(gè)新的細(xì)胞就屬于紅色這一類则涯,如下所示:
熱圖案例
K鄰近算法同樣適用于熱圖,下面的這個(gè)熱圖是用采用層次聚類算法得到的冲簿,如下所示:
此時(shí)如果我們有一個(gè)新的細(xì)胞粟判,它的基因表達(dá)模式位于熱圖中淺藍(lán)色區(qū)域的中央,如果K=1峦剔,那么我們僅僅需要看一下離它最近的細(xì)胞档礁,我們就知道這個(gè)新的細(xì)胞是屬于哪個(gè)類型的,這種情況下吝沫,它屬于淺藍(lán)色區(qū)域的分類呻澜,如果K=5,我們看一下離個(gè)細(xì)胞最近的鄰居惨险,它還是屬于這個(gè)淺藍(lán)色區(qū)域(仔細(xì)數(shù)一下羹幸,淺藍(lán)色區(qū)域中有17列),如下所示:
假如這個(gè)新的細(xì)胞的基因表達(dá)模式位于淺藍(lán)色區(qū)域的偏左側(cè)的話辫愉,如果此時(shí)K=11栅受,我們就需要進(jìn)行一個(gè)投票,如下所示:
經(jīng)過投票發(fā)現(xiàn),在這11個(gè)最近的鄰居中窘疮,有7個(gè)位于淺藍(lán)色區(qū)域袋哼,有4個(gè)位于淺綠色區(qū)域,因此闸衫,我們把這個(gè)新細(xì)胞類型歸于淺藍(lán)色區(qū)域涛贯,如下所示:
如果這個(gè)新的細(xì)胞分類正好位于兩個(gè)區(qū)域中央,這個(gè)細(xì)胞的歸類就有兩種解決方法:
第一蔚出,如果K值是奇數(shù)弟翘,那么我們就很容易進(jìn)行計(jì)算;
第二骄酗,(如果K值是偶數(shù))稀余,那么我們就會(huì)得到一個(gè)比較很麻煩的投票,此時(shí)就要靠投硬幣來決定這個(gè)細(xì)胞屬于哪個(gè)分類了趋翻,或者就是不歸類睛琳,如下所示:
訓(xùn)練數(shù)據(jù)
在這里我們講一些簡單的機(jī)器學(xué)習(xí)方面的內(nèi)容,我們把那些用于最初始聚類的數(shù)據(jù)(這些數(shù)據(jù)我們已經(jīng)知道它們是什么分類了)稱為“訓(xùn)練數(shù)據(jù)”(training data)踏烙,如下所示:
如何選擇K值
K值只是算法意義上的數(shù)字师骗,它無關(guān)生理學(xué)或生物學(xué)方面的意義,因此在設(shè)置K值之前讨惩,你或許會(huì)嘗試設(shè)置多設(shè)幾個(gè)K值辟癌。在多設(shè)幾個(gè)K值時(shí),此時(shí)假定你不清楚一部分訓(xùn)練數(shù)據(jù)(實(shí)際上是知道的)的分類荐捻,那么通過K鄰近算法(KNN)黍少,你對(duì)這些未知的訓(xùn)練數(shù)據(jù)進(jìn)行分類,進(jìn)而查看你的數(shù)據(jù)(此處是非訓(xùn)練數(shù)據(jù))的分類情況处面。
上面的這一段是完全翻譯視頻中的文字厂置,我是不太理解,但就我自己的理解而言鸳君,就先找一批訓(xùn)練數(shù)據(jù)农渊,這些數(shù)據(jù)的分類已經(jīng)很明確了,把這些數(shù)據(jù)分成2份或颊,分別定義為A和B砸紊,其中A用于聚類(這部分?jǐn)?shù)據(jù)通常比較大),另外一份B用KNN進(jìn)行分類(也就是A中分好的類)囱挑,此時(shí)能找出最佳的K值醉顽,然后再使用一批新的數(shù)據(jù)C進(jìn)行KNN分類。
如果K值比較低(例如K=1或K=2)平挑,那么噪音就會(huì)比較大游添,會(huì)受到異常值的影響系草。如果K值過大,雖然會(huì)解決K值過小的問題唆涝,但是找都,你也不會(huì)想讓K值太大,因?yàn)槿绻阒挥袔讉€(gè)樣本廊酣,那么運(yùn)算時(shí)間會(huì)過長能耻,如下所示: