Python代碼實現(xiàn)KNN算法
kNN算法是k-近鄰算法的簡稱,主要用來進行分類實踐,主要思路如下:
1.存在一個訓練數(shù)據(jù)集,每個數(shù)據(jù)都有對應的標簽,也就是說,我們知道樣本集中每一數(shù)據(jù)和他對應的類別。
2.當輸入一個新數(shù)據(jù)進行類別或標簽判定時,將新數(shù)據(jù)的每個特征值與訓練數(shù)據(jù)集中的每個數(shù)據(jù)進行比較,計算其到訓練數(shù)據(jù)集中每個點的距離(下列代碼實現(xiàn)使用的是歐式距離)。
3.然后提取k個與新數(shù)據(jù)最接近的訓練數(shù)據(jù)點所對應的標簽或類別。
4.出現(xiàn)次數(shù)最多的標簽或類別,記為當前預測新數(shù)據(jù)的標簽或類別。
歐式距離公式為:
distance= sqrt((xA0-XB0)^2+(xA1-XB1)^2+...+(xAn-XBn)^2)(若數(shù)據(jù)有n個特征項)
以下為代碼實現(xiàn):
#! /usr/bin/python
#coding=utf-8
from numpy import *
import operator
def createDataSet():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])#訓練數(shù)據(jù)樣本集合
labels = ['A','A','B','B']#訓練數(shù)據(jù)對應的類別
return group,labels
'''''
inX:用于分類的輸入向量
dataSet:訓練樣本集合
labels:標簽向量
k:k-近鄰算法中的k
'''
def classify0(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[0] #獲取數(shù)組的維度,也就是獲取訓練樣本的行數(shù)(樣本數(shù)),若獲取列數(shù),則為shape[1]
diffMat = tile(inX,(dataSetSize,1)) - dataSet # tile 表示inX在重復dataSetSize行,重復1列。為輸入向量與各個樣本求取歐式距離做準備。
sqDiddMat = diffMat**2 #diffMat是輸入向量與我們訓練樣本每個點相減得到的,**2表示值的結果取平方。
sqDistances = sqDiddMat.sum(axis=1)#默認為axis=0,axis=1以后就是將一個矩陣的每一行向量相加
distances = sqDistances**0.5 #對結果進行開平方,得到輸入向量與每個訓練樣本中點的歐式距離
sorteDistIndicies = distances.argsort()#將距離結果按照從小到大排序獲得索引值
classcount={} #這是一個字典,key為類別,value為距離最小的前k個樣本點里面為該類別的個數(shù)。
for i in range(k):
voteIlabel = labels[sorteDistIndicies[i]]#獲取距離最小的前k個樣本點對應的label值
classcount[voteIlabel] = classcount.get(voteIlabel,0)+1 #如果之前的樣本點label值與與現(xiàn)在的相同,則累計加1,否則,此次加1
sorteClassCount = sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=True) #針對calsscount獲取對象的第1個域的值進行降序排序。也就是說根據(jù)類別的個數(shù)從大到小排序。
return sorteClassCount[0][0] #返回排序的字典的第一個元素的key,即分類后的類別
createDataSet()
print classify0([0.9,0.9],group,labels,3)
結果為:A
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
編寫Python爬蟲抓取豆瓣電影TOP100及用戶頭像的方法
這篇文章主要介紹了編寫Python爬蟲抓取豆瓣電影TOP100及用戶頭像的方法,用到了Python的urllib和urllib2模塊,需要的朋友可以參考下2016-01-01
Python異步編程中asyncio.gather的并發(fā)控制詳解
在Python異步編程生態(tài)中,asyncio.gather是并發(fā)任務調(diào)度的核心工具,本文將通過實際場景和代碼示例,展示如何結合信號量機制實現(xiàn)精準并發(fā)控制,希望對大家有所幫助2025-03-03
python循環(huán)之彩色圓環(huán)實現(xiàn)示例
這篇文章主要為大家介紹了python循環(huán)之彩色圓環(huán)實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06

