成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python數(shù)據(jù)分析:KNN算法(k-近鄰算法)

Tychio / 569人閱讀

摘要:算法是一種數(shù)據(jù)分類算法,以距離樣本個(gè)最鄰近數(shù)據(jù)的類別代表樣本的類別,因此也叫作近鄰算法。排序后訪問(wèn)元素的方式與訪問(wèn)二維數(shù)組元素的方式一致

KNN算法是一種數(shù)據(jù)分類算法,以距離樣本k個(gè)最鄰近數(shù)據(jù)的類別代表樣本的類別,因此也叫作k-近鄰算法。KNN算法是數(shù)據(jù)挖掘中最簡(jiǎn)單的方法之一,大致可分為以下幾個(gè)步驟:

訓(xùn)練數(shù)據(jù):原數(shù)據(jù)集中所有數(shù)據(jù)類別的數(shù)據(jù)。

測(cè)試數(shù)據(jù):我們將要拿來(lái)測(cè)試的數(shù)據(jù)樣本。

處理數(shù)據(jù)

我們得到的測(cè)試數(shù)據(jù),通常和訓(xùn)練數(shù)據(jù)是不同維的,這時(shí)候就需要我們將測(cè)試數(shù)據(jù)升維到和訓(xùn)練數(shù)據(jù)相同,python的numpy中自帶了一個(gè)tile()函數(shù)可以幫助我們將測(cè)試數(shù)據(jù)升維。

將數(shù)據(jù)向量化

測(cè)試數(shù)據(jù)升維后,我們?yōu)榱擞?jì)算距離樣本點(diǎn)的距離,此時(shí)需要將數(shù)據(jù)向量化,所謂的向量化就很簡(jiǎn)單了,即將兩個(gè)同維數(shù)據(jù)相減。

計(jì)算歐式距離

歐式距離,即歐幾里得距離,運(yùn)用勾股定理即可求出,將升維后的測(cè)試數(shù)據(jù)和訓(xùn)練數(shù)據(jù)相減獲得的向量組的每一個(gè)向量的平方和開方即可得到由距離組成的向量組。

根據(jù)距離進(jìn)行分類

選擇k個(gè)距離樣本點(diǎn)距離最小的數(shù)據(jù),統(tǒng)計(jì)在這k個(gè)數(shù)據(jù)中哪類數(shù)據(jù)類別出現(xiàn)的頻率最高,樣本點(diǎn)的數(shù)據(jù)類別即可確定。

算法實(shí)現(xiàn):

1.首先我們需要引入numpy以及operator,輸入from numpy import *import operator。

2.接下來(lái)我們需要定義一個(gè)knn函數(shù),在knn函數(shù)中我們需要引入四個(gè)參數(shù),分別為k、訓(xùn)練數(shù)據(jù)、測(cè)試數(shù)據(jù)和數(shù)據(jù)類別。

3.接下來(lái)我們需要先對(duì)數(shù)據(jù)進(jìn)行升維操作,需要用到numpy下的tile(a,(b,c))函數(shù),a為要進(jìn)行升維操作的數(shù)據(jù),也就是測(cè)試數(shù)據(jù),b為要對(duì)測(cè)試數(shù)據(jù)升維的行數(shù)據(jù),c為要對(duì)測(cè)試數(shù)據(jù)升維的列數(shù)據(jù)。

4.在上一操作中,我們一般需要獲得訓(xùn)練數(shù)據(jù)的行數(shù)和列數(shù),這時(shí)需要用到shape()函數(shù),shape()函數(shù)返回的是由訓(xùn)練數(shù)據(jù)的行和列組成的元組,我們想要知道訓(xùn)練數(shù)據(jù)的行數(shù)或列數(shù)只需通過(guò)數(shù)組元素下標(biāo)的方式引用。

5.數(shù)據(jù)的維度相同后,我們要將兩數(shù)據(jù)相減得到一個(gè)向量,再計(jì)算這個(gè)向量每個(gè)值的平方和的開方即得測(cè)試數(shù)據(jù)到訓(xùn)練數(shù)據(jù)的距離,再調(diào)用argsort()函數(shù)將距離按照升序排列,不過(guò)該函數(shù)返回的是數(shù)組元素的下標(biāo)。

6.接下來(lái)我們?yōu)榱酥庇^的看到不同數(shù)據(jù)類別的出現(xiàn)次數(shù),需要設(shè)置一個(gè)空字典來(lái)存放這些數(shù)據(jù),在得到字典后,我們需要將字典按照不同數(shù)據(jù)類別的出現(xiàn)次數(shù)降序排列,進(jìn)而返回字典的第一個(gè)值即得到測(cè)試數(shù)據(jù)的數(shù)據(jù)類別。

7.算法代碼如下:

from numpy import *
import operator
def knn(k, test_data, train_data, labels):
    train_size = train_data.shape[0]    #獲取訓(xùn)練數(shù)據(jù)的行數(shù)
    test_size = tile(test_data, (train_size, 1))    #將測(cè)試數(shù)據(jù)的行升維
    minus = test_size-train_data    #得到向量
    sq_minus = minus**2
    sum_sq_minus = sq_minus.sum(axis=1)        #得到平方后的每個(gè)數(shù)組內(nèi)元素的和
    distc = sum_sq_minus**0.5
    sort_distc = distc.argsort()    #將距離按升序排列
    static = {}
    for i in range(0, k):
        vote = labels[sort_distc[i]]    #獲取數(shù)據(jù)類型
        static[vote] = static.get(vote, 0)+1    #統(tǒng)計(jì)每個(gè)數(shù)據(jù)類型的出現(xiàn)次數(shù)
    sort_static = sorted(static.items(), key=operator.itemgetter(1), reverse=True)    #將字典中的元素按出現(xiàn)次數(shù)降序排列
    return sort_static[0][0]    #返回出現(xiàn)次數(shù)最多的數(shù)據(jù)類型

8.算法中需要對(duì)字典進(jìn)行排序,因此需要用到sorted()函數(shù),sorted()函數(shù)共有三個(gè)參數(shù),分別為items(),operator.itemgetter(),reverse,默認(rèn)的排序?yàn)樯颍覀円氚凑战敌蚺帕行枰畹谌齻€(gè)參數(shù)為True,在這里我們是按照字典的values進(jìn)行排序的,因此我們需要輸入sorted(static.items(), key=operator.itemgetter(1), reverse=True),operator.itemgetter()函數(shù)中的值為1時(shí),是按照字典的values進(jìn)行排序,值為0時(shí),是按照字典的key進(jìn)行排序。

9.排序后訪問(wèn)元素的方式與訪問(wèn)二維數(shù)組元素的方式一致

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43003.html

相關(guān)文章

  • 【機(jī)器學(xué)習(xí)實(shí)戰(zhàn) Task1】 (KNNk近鄰算法的應(yīng)用

    摘要:背景近鄰算法的概述近鄰算法的簡(jiǎn)介近鄰算法是屬于一個(gè)非常有效且易于掌握的機(jī)器學(xué)習(xí)算法,簡(jiǎn)單的說(shuō)就是采用測(cè)量不同特征值之間距離的方法對(duì)數(shù)據(jù)進(jìn)行分類的一個(gè)算法。完美的分類器的錯(cuò)誤率為,而最差的分類器的錯(cuò)誤率則為。 1 背景 1.1 k近鄰算法的概述 (1)k近鄰算法的簡(jiǎn)介 k-近鄰算法是屬于一個(gè)非...

    toddmark 評(píng)論0 收藏0
  • 以??簡(jiǎn)單易懂??的語(yǔ)言帶你搞懂有監(jiān)督學(xué)習(xí)算法【附Python代碼詳解】機(jī)器學(xué)習(xí)系列之KNN

    必須要看的前言 本文風(fēng)格:以??簡(jiǎn)單易懂??的語(yǔ)言帶你徹底搞懂KNN,了解什么是有監(jiān)督學(xué)習(xí)算法。 認(rèn)真看完這篇文章,徹底了解KNN、了解監(jiān)督學(xué)習(xí)算法絕對(duì)是一樣很簡(jiǎn)單的事情。 注:本篇文章非常詳細(xì),同時(shí)我也附加了Python代碼,歡迎收藏后慢慢閱讀。 目錄 必須要看的前言監(jiān)督學(xué)習(xí)算法KNN/K近鄰算法1 算法原理1.1 實(shí)現(xiàn)過(guò)程1.2 距離的確定 2 算法的優(yōu)缺點(diǎn)3 算法的變種3.1 變...

    MoAir 評(píng)論0 收藏0
  • 機(jī)器學(xué)習(xí)(六)-基于KNN分類算法的自動(dòng)劃分電影的題材類型實(shí)現(xiàn)

    摘要:算法及工作原理近鄰算法采用測(cè)量不同特征值之間的距離方法進(jìn)行分類。最后選擇個(gè)最相似數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類作為新數(shù)據(jù)的分類。 1 分類算法引言 眾所周知,電影可以按照題材分類,然而題材本身是如何定義的?由誰(shuí)來(lái)判定某部電影屬于哪個(gè)題材?也就是說(shuō)同一題材的電影具有哪些公共特征?這些都是在進(jìn)行電影分類時(shí)必須要考慮的問(wèn)題。 動(dòng)作片中也會(huì)存在接吻鏡頭,愛情片中也會(huì)存在打斗場(chǎng)景,我們不能單純依靠是...

    MkkHou 評(píng)論0 收藏0
  • 機(jī)器學(xué)習(xí)分享——KNN算法及numpy實(shí)現(xiàn)

    摘要:是一種非參數(shù)的懶惰的監(jiān)督學(xué)習(xí)算法非參數(shù)的意思是,模型不會(huì)對(duì)基礎(chǔ)數(shù)據(jù)分布做出任何假設(shè)。電腦端查看源碼參考資料網(wǎng)址是一個(gè)支持的人工智能建模平臺(tái),能幫助你快速開發(fā)訓(xùn)練并部署應(yīng)用。 KNN 是一種非參數(shù)的懶惰的監(jiān)督學(xué)習(xí)算法. 非參數(shù)的意思是,模型不會(huì)對(duì)基礎(chǔ)數(shù)據(jù)分布做出任何假設(shè)。換句話說(shuō),模型的結(jié)構(gòu)是根據(jù)數(shù)據(jù)確定的。懶惰的意思是沒有或者只有很少的訓(xùn)練過(guò)程. KNN 算法既可以處理分類問(wèn)題,測(cè)試數(shù)...

    U2FsdGVkX1x 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<