1.k-近鄰演算法偽**:
①計算已知類別資料集中的點與當前點之間的距離
②按照距離遞增次序排序
③選擇與當前點距離最小的k個點
④確定前k個點所在類別(標籤)的出現頻率
⑤返回前k個點出現頻率最高的類別作為當前點的**分類
2.k-近鄰演算法程式清單:
knn.py
# coding:utf-8
# python interpreter: 3.6.5
# author: admain_maxin
from numpy import *
import operator
def createdataset():
group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ["a", "a", "b", "b"]
return group, labels
02_k-近鄰演算法.py
# coding:utf-8
# python interpreter: 3.6.5
# author: admain_maxin
from numpy import *
from knn import createdataset
import operator
# 1.knn演算法清單
def classify(inx, dataset, labels, k):
# 2.距離計算
datasetsize = dataset.shape[0] # 讀取矩陣第一維的長度 datasetsize=4
diffmat = tile(inx, (datasetsize, 1)) - dataset # inx行重複4次 陣列對應元素相減(屬性值對應相減)
sqdiffmat = diffmat**2 # 每個元素平方
sqdistances = sqdiffmat.sum(axis=1) # 行元素求和
distances = sqdistances**0.5 # 求和每個元素分別開根號
# 3.選擇距離最小的k個點
sorteddistindicies = distances.argsort() # 將distance陣列中的元素從小到大排列,提取其索引輸出到sorteddistindicies
classcount = {}
for i in range(k): # range(3):0,1,2
voteilabel = labels[sorteddistindicies[i]] # 獲取最小距離對應的labels中的「標籤」
classcount[voteilabel] = classcount.get(voteilabel, 0) + 1 # 查詢並統計距離最近的k個標籤中a和b出現的頻度
# 4.排序
# 按照字典中的值進行排序
# sorted函式可用於任何迭代器物件進行排序
# sorted(iterable, cmp, key, revrese=false) # 預設為公升序
# reverse = true:降序
# key為待排序元素
# dict.items()返回乙個dict_items物件,物件內部每乙個元素都是乙個元組
# operator.itemgetter(1):獲取物件第乙個域的值
sortedclasscount = sorted(classcount.items(), key=operator.itemgetter(1), reverse=true)
return sortedclasscount[0][0] # 返回第域的「標籤」
if "__main__" == __name__:
group, labels = createdataset()
print(classify([0, 0], group, labels, 3))
# print(classify([1, 1], group, labels, 3))
3.使用k-近鄰演算法改進約會**的配對效果 K 近鄰演算法 KNN
knn k nearest neighbor 假設訓練集有記錄 r1 r2,rn共n條,訓練集的特徵向量及其對應的類別都是已知的,每個記錄的特徵向量為 t1 t2,tk共k個特徵,待測試的記錄為ru 1 計算ru 的特徵向量與訓練集的每條記錄 即r1 r2,rn 的特徵向量的歐式距離,選取距離最小的...
k近鄰演算法 kNN
核心思想 前k個最相似資料中出現次數最多的類別,作為新資料的類別。核心函式 計算距離函式,投票函式 coding utf 8 import random import sys from collections import counter from operator import itemgette...
K近鄰演算法 KNN
k近鄰演算法 knn 何謂k近鄰演算法,即k nearest neighbor algorithm,簡稱knn演算法,單從名字來猜想,可以簡單粗暴的認為是 k個最近的鄰居,當k 1時,演算法便成了最近鄰演算法,即尋找最近的那個鄰居。為何要找鄰居?打個比方來說,假設你來到乙個陌生的村莊,現在你要找到與...