最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于python實(shí)現(xiàn)KNN分類算法

 更新時(shí)間:2020年04月23日 15:44:56   作者:諾坎普奇跡  
這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)KNN分類算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

kNN算法的核心思想是如果一個(gè)樣本在特征空間中的k個(gè)最相鄰的樣本中的大多數(shù)屬于某一個(gè)類別,則該樣本也屬于這個(gè)類別,并具有這個(gè)類別上樣本的特性。該方法在確定分類決策上只依據(jù)最鄰近的一個(gè)或者幾個(gè)樣本的類別來決定待分樣本所屬的類別。 kNN方法在類別決策時(shí),只與極少量的相鄰樣本有關(guān)。由于kNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對(duì)于類域的交叉或重疊較多的待分樣本集來說,kNN方法較其他方法更為適合。

通俗簡單的說,就是將這個(gè)樣本進(jìn)行分類,怎么分類,就是用該樣本的特征與空間中其他樣本做計(jì)算距離,當(dāng)出現(xiàn)大多數(shù)距離偏向于某個(gè)樣本類時(shí),我們認(rèn)為該樣本屬于這個(gè)類別。

舉例說明:淘寶商品是按類進(jìn)行售賣的,對(duì)于零食類商品a,b,c,價(jià)格與銷量分別對(duì)應(yīng)(19,1000),(89,500),(9.9,3000)對(duì)與電器類商品d,e,f,價(jià)格與銷量分別為(1000,10),(499,30),(999,100),對(duì)于一個(gè)未知的產(chǎn)品(300,80),我們使用kNN算法進(jìn)行求解,我們假設(shè)k=3(k的值要時(shí)情況而定,沒有確定的),分別求出未知產(chǎn)品到這六個(gè)點(diǎn)的歐式距離,即:sqrt((x1-y1)**2+(x2-y2)**2)計(jì)算出結(jié)果進(jìn)行倒序排序,我們得出前三的點(diǎn)分別為:e,b,f。所以我們認(rèn)為未知產(chǎn)品是電器類產(chǎn)品,當(dāng)然實(shí)際生活中不能僅僅有價(jià)格,銷量這兩個(gè)二維數(shù)據(jù),可能是n維數(shù)據(jù),歐式距離的公式也是一樣的,現(xiàn)實(shí)中也不僅僅有這兩個(gè)分類,kNN提供了一種簡單的解決思路。其中a,b,c,d,e,f稱為訓(xùn)練數(shù)據(jù),未知數(shù)據(jù)稱為測(cè)試數(shù)據(jù)。

還有在進(jìn)行計(jì)算時(shí)有時(shí)需要格式化一下數(shù)據(jù),例如對(duì)于c產(chǎn)品與未知產(chǎn)品,明顯計(jì)算銷量所產(chǎn)生的數(shù)據(jù)要遠(yuǎn)大于價(jià)格,為了減小這個(gè)帶來的誤差,可以使用以下:

參考鏈接

def normData(dataSet):
 maxVals = dataSet.max(axis=0)#按列獲取最大值,并返回?cái)?shù)組
 minVals = dataSet.min(axis=0)
 ranges = maxVals - minVals
 retData = (dataSet - minVals) / ranges
 return retData, ranges, minVals

代碼

#!/user/bin/env python
#-*- coding:utf-8 -*-
import numpy as np
import operator as opt

def normData(dataSet):#標(biāo)準(zhǔn)化訓(xùn)練集數(shù)據(jù)
 maxVals = dataSet.max(axis=0)
 minVals = dataSet.min(axis=0)
 ranges = maxVals - minVals
 retData = (dataSet - minVals) / ranges
 return retData, ranges, minVals

def kNN(dataSet, labels, testData, k):
 distSquareMat = (dataSet - testData) ** 2 # 計(jì)算差值的平方
 distSquareSums = distSquareMat.sum(axis=1) # 求每一行的差值平方和,axis=0則按列計(jì)算
 distances = distSquareSums ** 0.5 # 開根號(hào),得出每個(gè)樣本到測(cè)試點(diǎn)的距離
 sortedIndices = distances.argsort() # 排序,得到排序后的下標(biāo)
 indices = sortedIndices[:k] # 取最小的k個(gè)
 labelCount = {} # 存儲(chǔ)每個(gè)label的出現(xiàn)次數(shù),出現(xiàn)次數(shù)最多的就是我們要選擇的類別
 for i in indices:
 label = labels[i]
 labelCount[label] = labelCount.get(label, 0) + 1 # 次數(shù)加一,使用字典的get方法,第一次出現(xiàn)時(shí)默認(rèn)值是0
 sortedCount = sorted(labelCount.items(), key=opt.itemgetter(1), reverse=True) # 對(duì)label出現(xiàn)的次數(shù)從大到小進(jìn)行排序
 return sortedCount[0][0] # 返回出現(xiàn)次數(shù)最大的label

if __name__ == "__main__":#測(cè)試程序
 dataSet = np.array([[2, 3], [6, 8]])#訓(xùn)練集
 normDataSet, ranges, minVals = normData(dataSet)
 labels = ['a', 'b']#訓(xùn)練集分別為a和b類
 testData = np.array([3.9, 5.5])#測(cè)試數(shù)據(jù)
 normTestData = (testData - minVals) / ranges#同樣需要將測(cè)試數(shù)據(jù)標(biāo)準(zhǔn)化
 result = kNN(normDataSet, labels, normTestData, 1)#k=1
 print(result)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中exit、return、sys.exit()等使用實(shí)例和區(qū)別

    Python中exit、return、sys.exit()等使用實(shí)例和區(qū)別

    這篇文章主要介紹了Python中exit、return、sys.exit()等使用實(shí)例和區(qū)別,本文是一個(gè)實(shí)際項(xiàng)目中的總結(jié),需要的朋友可以參考下
    2015-05-05
  • python實(shí)現(xiàn)給數(shù)組按片賦值的方法

    python實(shí)現(xiàn)給數(shù)組按片賦值的方法

    這篇文章主要介紹了python實(shí)現(xiàn)給數(shù)組按片賦值的方法,實(shí)例分析了Python在指定位置進(jìn)行賦值的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案

    pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案

    這篇文章主要介紹了pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 詳解pycharm的python包opencv(cv2)無代碼提示問題的解決

    詳解pycharm的python包opencv(cv2)無代碼提示問題的解決

    這篇文章主要介紹了詳解pycharm的python包opencv(cv2)無代碼提示問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 淺談Python程序與C++程序的聯(lián)合使用

    淺談Python程序與C++程序的聯(lián)合使用

    這篇文章主要介紹了淺談Python程序與C++程序的聯(lián)合使用,主要包括6中方案,需要的朋友可以參考下
    2015-04-04
  • 深入理解Python對(duì)Json的解析

    深入理解Python對(duì)Json的解析

    Json是一種常用的數(shù)據(jù)交換結(jié)構(gòu),由于輕量、易于閱讀和編寫等特點(diǎn),在網(wǎng)絡(luò)方面應(yīng)用很廣。下面這篇文章主要介紹了Python對(duì)Json解析的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • pyqt環(huán)境搭建教程

    pyqt環(huán)境搭建教程

    pyqt是一個(gè)用于創(chuàng)建GUI應(yīng)用程序的跨平臺(tái)工具包,它將python與qt庫融為一體,本文給大家分享pyqt環(huán)境搭建教程,感興趣的朋友一起看看吧
    2023-11-11
  • Python中列表的各種操作方法詳解

    Python中列表的各種操作方法詳解

    這篇文章主要介紹了Python中列表的各種操作方法詳解,列表都可以進(jìn)行的操作包括索引、切片、加、乘、檢查成員,此外,Python 已經(jīng)內(nèi)置確定序列的長度以及確定最大和最小的元素的方法,需要的朋友可以參考下
    2023-08-08
  • pycharm沒有找到manage?repositories按鈕的解決辦法

    pycharm沒有找到manage?repositories按鈕的解決辦法

    這篇文章主要給大家介紹了關(guān)于pycharm沒有找到manage?repositories按鈕的解決辦法,pycharm是用來寫python的可視化代碼軟件,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • python重試裝飾器的簡單實(shí)現(xiàn)方法

    python重試裝飾器的簡單實(shí)現(xiàn)方法

    今天小編就為大家分享一篇python重試裝飾器的簡單實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評(píng)論

昔阳县| 孙吴县| 渝中区| 苏尼特左旗| 修文县| 平武县| 贵溪市| 西平县| 郯城县| 莱州市| 长治县| 兴海县| 贺州市| 湟中县| 石家庄市| 武定县| 信丰县| 兴安县| 武邑县| 开鲁县| 镇安县| 铜川市| 安福县| 湖州市| 隆回县| 莒南县| 黄石市| 都安| 梧州市| 繁峙县| 西盟| 荣成市| 望奎县| 衡阳市| 阿拉善盟| 平阳县| 江山市| 湖南省| 梁河县| 抚顺县| 桓台县|