菜鳥初學第二週之kNN分類演算法

2021-08-21 13:37:44 字數 1546 閱讀 5674

from numpy import *

import operator

def createdataset():#給定4組資料

group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])#點的集合

labels=['a','a','b','b']#點標籤

return group,labels

def classify(inx,dataset,labels,k):#knn演算法:4個輸入引數:

datasetsize=dataset.shape[0] #datasetsize是dataset的行數 shape是用來取矩陣維度的長度的函式

diffmat=tile(inx,(datasetsize,1))-dataset

#diffmat得到了目標與訓練陣列的差值

# tile函式是在numpy。lib。shape_base裡的,作用是重複某個陣列

# 比如tile(a,n),功能是將陣列a重複n次,構成乙個新的陣列

# 前面用tile,把一行inx變成4行一模一樣的

# tile有重複的功能,datasetsize是重複4遍,後面的1保證重複完了是4行,而不是一行裡有四個一樣的

# 然後再減去dataset,是為了求兩點的距離,先要座標相減,這個就是座標相減

sqdiffmat=diffmat**2 #元素平方

sqdistances=sqdiffmat.sum(axis=1)#axis=1是列相加,,這樣得到了(x1-x2)^2+(y1-y2)^2

distances=sqdistances**0.5 #開方求距離

sorteddistances=distances.argsort()#公升序排序,將元素按照由小到大的順序返回下標,比如([3,1,2]),它返回的就是([1,2,0]

classcount={}

for i in range(k):#選擇距離最小的k個點

voteilabel=labels[sorteddistances[i]]

classcount[voteilabel]=classcount.get(voteilabel,0)+1

# get是取字典裡的元素

# 如果之前這個voteilabel是有的,那麼就返回字典裡這個voteilabel裡的值

# 如果沒有就返回0(後面寫的),這行**的意思就是算離目標點距離最近的k個點的類別

# 這個點是哪個類別哪個類別就加1

sortedclasscount=sorted(classcount.items(),key=operator.itemgetter(1),reverse=true)

# key=operator.itemgetter(1)的意思是按照字典裡的第乙個排序

# ,要按照第1個(ab是第0個),即『1』『2』排序。

# reverse=true是降序排序

return sortedclasscount[0][0]#返回類別最多的類別

學習機器學習實戰那本書的第乙個演算法。必須得記錄一下這麼重要的first 哈哈

分類 KNN分類演算法之Python實現

knn稱為k最近鄰。對於待分類資料,它先計算出與其最相近的k個的樣本,然後判斷這k個樣本中最多的類標籤,並將待分類資料標記為這個最多的類標籤。python樣例 import numpy as np from sklearn.neighbors import kneighborsclassifier ...

機器學習分類演算法之KNN演算法

knn演算法為按距離進行分類的,對於已知的分類,根據歐式距離,最靠近那個分類就被 為那個分類。本文只是簡單展示一下實現 具體的特徵和分類,還得自己根據實際場景去調整。在開始之前注意看看匯入的包是否都存在,如不存在的化,請先安裝相應的包 coding utf 8 import numpy asnp f...

分類演算法之鄰近演算法 KNN(應用篇)

這次使用的訓練集由sklearn模組提供,關於虹膜 一種鳶尾屬植物 的資料。資料儲存在.data成員中,它是乙個 n samples,n features numpy陣列 print iris.data 5.1 3.5 1.4 0.2 4.9 3.1.4 0.2 它有四個特徵,萼片長度,萼片寬度,花...