knn.py
1#!/usr/bin/python2#
-*- coding:utf8 -*-34
from numpy import *
5import
operator67
#創造資料集
8def
createdataset():
9 group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
10 labels = ['
a', '
a', '
b', 'b'
]11return
group, labels
1213
"""14
#將inx擴充套件到和訓練樣本集dataset一樣的行數
15diffmat = tile(inx, (datasetsize, 1)) - dataset
16tile(inx, n):拓展長度
17tile(inx, (m, n):m-拓展個數,拓展長度
1819
sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)
20以排出的每組資料的第乙個元素的大小為準,按降序排列。
21e.g:[('a', 2), ('b', 1)]
22"""
23def
classify0(inx, dataset, labels, k):
24 datasetsize = dataset.shape[0] #
訓練樣本行數(矩陣第一維度的長度)
25 diffmat = tile(inx, (datasetsize, 1)) -dataset
26 sqdiffmat = diffmat**2
27 sqdistances = sqdiffmat.sum(axis=1)
28 distances = sqdistances**0.5 #
歐氏距離計算
29 sorteddistindicies = distances.argsort()#
按元素大小公升序,將無數對應的索引(index)輸出
30 classcount ={}
31for i in
range(k):
32 voteilabel = labels[sorteddistindicies[i]] #
輸出上面相應索引(index)對應的label
33 classcount[voteilabel] = classcount.get(voteilabel, 0) + 1 #
統計label個數
34 sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)
35return sortedclasscount[0][0]
knn_test.py
1import
knn2
3 group, labels =knn.createdataset()
4print
(group)
5print
(labels)
67 inx = [2, 1]
8 testresult = knn.classify0(inx, group, labels, 3)
9print (testresult)
result:
1 [[ 1. 1.1]2 [ 1. 1. ]
3[ 0. 0. ]
4 [ 0. 0.1]]
5 ['
a', '
a', '
b', 'b'
]6 a
KNN k近鄰演算法
現在假如我們已經擁有了一些資料 稱為訓練資料集 ts,並且擁有所有資料的類別名 即每條資料應該歸於哪個類別。當我們要判斷一條不知類別的資料時,首先讓這條資料m和已經擁有的所有的資料ts中的每一條資料進行比較,然後根據比較結果選擇出和m最相似 一般是基於距離 的k條資料 k是個整數,並且通常是小於20...
k 近鄰演算法
此文章參考機器學習實戰一書,具體的理論知識可以參考該書。本文的初衷只是為了做乙個複習,將學過的知識加以整理,其中不免有一定的錯誤。2.k 近鄰演算法的原理介紹 k 近鄰演算法通過測量不同的特徵值之間的距離進行分類。它的工作原理如下 存在乙個樣本的資料集合,也成為訓練樣本集合。並且樣本集中的每個資料都...
K 近鄰演算法
k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定 缺點 計算複雜度高 空間複雜度高 適用資料範圍 數值型和標稱型 工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入...