python机器学习---1. K近邻算法
機(jī)器學(xué)習(xí)的方法是基于數(shù)據(jù)產(chǎn)生的"模型" (model) 的算法,也稱(chēng)"學(xué)習(xí)算法" (learning algorithm)。包括有監(jiān)督學(xué)習(xí)(supervised learning)、無(wú)監(jiān)督學(xué)習(xí)(unsupervised learning)、半監(jiān)督學(xué)習(xí)(semi-supervised learning)、強(qiáng)化學(xué)習(xí)(reinforcement learning)。
1. 有監(jiān)督學(xué)習(xí)
- 數(shù)據(jù)集中有X也有Y
指對(duì)數(shù)據(jù)的若干特征與若干標(biāo)簽(類(lèi)型)之間的關(guān)聯(lián)性進(jìn)行建模的過(guò)程;只要模型被確定,就可以應(yīng)用到新的末知數(shù)據(jù)上。這類(lèi)學(xué)習(xí)過(guò)程可以進(jìn)一步分為「分類(lèi)] (classification) 任務(wù)和「回歸」
(regression)任務(wù)。在分類(lèi)任務(wù)中,標(biāo)簽都是離散值;而在回歸任務(wù)中,標(biāo)簽都是連續(xù)值。
2. 無(wú)監(jiān)督學(xué)習(xí)
- 數(shù)據(jù)集中有X沒(méi)有Y
指對(duì)不帶任何標(biāo)簽的數(shù)據(jù)特征進(jìn)行建模,通常被看成是一種“讓數(shù)據(jù)自己介紹自己”的過(guò)程。 這類(lèi)模型包括**「聚類(lèi)」(clustering)** 任務(wù)和 「降維」(dimensionality reduction) 任務(wù)。聚類(lèi)算法可以講數(shù)據(jù)分成不同的組別,而降維算法追求用更簡(jiǎn)潔的方式表現(xiàn)數(shù)據(jù)。
3.半監(jiān)督學(xué)習(xí)
- 數(shù)據(jù)集有X也有Y但是Y只有一部分
另外,還有一種半監(jiān)督學(xué)習(xí)(semi-supervisedlearning)方法,介于有監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)之間。通常可以在數(shù)據(jù)不完整時(shí)使用。
4.強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)不同于監(jiān)督學(xué)習(xí),它將學(xué)習(xí)看作是試探評(píng)價(jià)過(guò)程,以**"試錯(cuò)"的方式進(jìn)行學(xué)習(xí),并與環(huán)境進(jìn)行交互已獲得獎(jiǎng)懲指導(dǎo)行為**,以其作為評(píng)價(jià)。此時(shí)系統(tǒng)靠自身的狀態(tài)和動(dòng)作進(jìn)行學(xué)習(xí),從而改進(jìn)行動(dòng)方案以適應(yīng)環(huán)境。
5. K-NN算法原理
這就是k-近鄰算法,它的本質(zhì)是通過(guò)距離判斷兩個(gè)樣本是否相似,如果距離夠近就認(rèn)為他們足夠相似屬于同一類(lèi)別。
當(dāng)然只對(duì)比一個(gè)樣本是不夠的,誤差會(huì)很大,我們需要找到離其最近的k個(gè)樣本,并將這些樣本稱(chēng)之為 「近鄰」(nearest neighbor) 。對(duì)這k個(gè)近鄰,查看它們的都屬于何種類(lèi)別(這些類(lèi)別我們稱(chēng)作 「標(biāo)簽」(labels) )。
然后根據(jù)“少數(shù)服從多數(shù),一點(diǎn)算一 票”原則進(jìn)行判斷,數(shù)量最多的的標(biāo)簽類(lèi)別就是新樣本的標(biāo)簽類(lèi)別。其中涉及到的原理是”越相近越相似”,這也是KNN的基本假設(shè)。
可以看到k-近鄰算法就是通過(guò)距離來(lái)解決分類(lèi)問(wèn)題。這里我們解決的二分類(lèi)問(wèn)題,整個(gè)算法結(jié)構(gòu)如下:
- 算距離
給定測(cè)試對(duì)象Item,計(jì)算它與訓(xùn)練集中每個(gè)對(duì)象的距離。
依據(jù)公式計(jì)算Item與D1. D2. … … D;之間的相似度,得到Sim(ltem, D1), Sim(ltem, D2), Sim(item, D;). - 找鄰居
圈定距離最近的k個(gè)訓(xùn)練對(duì)象,作為測(cè)試對(duì)象的近鄰。
將Sim(Item, D1), Sim(tem, D2), Sim(Item, Dj )排序,若是超過(guò)相似度閾值t,則放入鄰居集合NN. - 做分類(lèi)
根據(jù)這k個(gè)近鄰歸屬的主要類(lèi)別,來(lái)對(duì)測(cè)試對(duì)象進(jìn)行分類(lèi)。
自鄰居集合NN中取出前k名,查看它們的標(biāo)簽,對(duì)這k個(gè)點(diǎn)的標(biāo)簽求和,以多數(shù)決,得到Item可能類(lèi)別。 - 距離類(lèi)模型中距離的確認(rèn)
k-NN算法基本思想我們已經(jīng)知道了,其模型的表示形式是整個(gè)數(shù)據(jù)集。除了對(duì)整個(gè)數(shù)據(jù)集進(jìn)行存儲(chǔ)之外,k-NN沒(méi)有其他模型。因此,k-NN不具有顯式的學(xué)習(xí)過(guò)程,在做「分類(lèi)」時(shí),對(duì)新的實(shí)例,根據(jù)其k個(gè)最近鄰的訓(xùn)練實(shí)例的類(lèi)別,通過(guò)多數(shù)表決等方式進(jìn)行預(yù)測(cè)。k-近鄰法實(shí)際上利用了訓(xùn)練數(shù)據(jù)集對(duì)特征向量空間進(jìn)行劃分,并作為其分類(lèi)的"模型"。該算法的「距離J在二維坐標(biāo)軸就表示兩點(diǎn)之間的距離,計(jì)算距離的公式有很多,我們常用歐拉公式,即"歐氏距離”。回憶一下,-個(gè)平面直角坐標(biāo)系上,如何計(jì)算兩點(diǎn)之間的距離? 一個(gè)立體直角坐標(biāo)系上,又如何計(jì)算兩點(diǎn)之間
的距離?
空間中A和B兩個(gè)點(diǎn),它們的距離等于x和y兩坐標(biāo)差的平方和再開(kāi)
根號(hào)。如果在三維坐標(biāo)中,多了Z坐標(biāo),距離計(jì)算公式也相同。
當(dāng)特征數(shù)量有很多個(gè)形成多維空間時(shí),再用上述的寫(xiě)法就不方便了,我們換一個(gè)寫(xiě)法, 用X加下角標(biāo)的方式表示特征維度。則在n維空間中,有兩個(gè)點(diǎn)A和B,它們的坐標(biāo)分別為:
則A和B兩點(diǎn)之間的歐氏距離的基本計(jì)算公式如下:
而在我們的機(jī)器學(xué)習(xí)中,坐標(biāo)軸上的值x1, x… xn正是我們樣本數(shù)據(jù)上的n個(gè)特征。
6. python代碼實(shí)現(xiàn)
使用軟件:jupyter notebook 或者 jupyter lab
- 導(dǎo)入需要的包
總結(jié)
以上是生活随笔為你收集整理的python机器学习---1. K近邻算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python的matplotlib问题
- 下一篇: python爬虫取腾讯视频评论