1、k-近鄰演算法概述
k-近鄰演算法採用
測量不同特徵值之間的距離的方法進行分類。
優點:精度高、對異常值不敏感、無資料輸入假定;
缺點:計算複雜度高、空間複雜度高;
適用資料範圍:數值型和標稱型。
2、工作原理:
存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最鄰近)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。
3、流程
*收集資料
*準備資料:距離計算所需要的數值,最好是結構化的資料格式。
*分析資料:
*訓練演算法:此步驟不適用於k-近鄰演算法
*測試演算法:計算錯誤率
*使用演算法:首先需要輸入樣本資料和結構化的輸出結果,然後執行k-近鄰演算法判定輸入資料分別屬於哪個分類,最後應用對計算出的分類執行後續的處理。
python實現:
# -*- coding: utf-8 -*-
'''created on sun aug 21 18:44:27 2016
knn: k nearest neighbors
input:
inx:用於分類的輸入向量
dataset:輸入的訓練樣本集
labels:標籤向量
k:表示用於選擇最近鄰居的數目
標籤向量的元素數目和矩陣dataset的行數相同
output: 分類結果
@author: gnahznib
'''# 匯入科學計算包numpy
from numpy import *
# 匯入運輸符模組
import operator
from os import listdir
# k-鄰近演算法實現
def classify0(inx, dataset, labels, k):
# 已知分類的資料集(訓練集)的行數
datasetsize = dataset.shape[0]
# 1、計算歐式距離
# tile函式將輸入點拓展成與訓練集相同維數的矩陣,再計算歐氏距離
diffmat = tile(inx, (datasetsize,1)) - dataset # 樣本與訓練集的差值矩陣
sqdiffmat = diffmat**2 # 差值矩陣平方
sqdistances = sqdiffmat.sum(axis=1) # 計算每一行上元素的和
distances = sqdistances**0.5 # 開方得到尤拉距離矩陣
sorteddistindicies = distances.argsort() # 按distances中元素進行公升序排序後得到的對應下標的列表
# 2、選擇距離最小的k個點
classcount={}
for i in range(k):
voteilabel = labels[sorteddistindicies[i]]
classcount[voteilabel] = classcount.get(voteilabel,0) + 1
# 按classcount字典的第2個元素(即類別出現的次數)從大到小排序
sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)
return sortedclasscount[0][0]
4、示例:
1)使用python匯入資料
in [
12]: from numpy import *
in [
13]: import operator
in [
14]: 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
...:
in [
15]: import knn
in [
16]: group,labels = knn.createdataset()
in [
17]: group
out[
17]:
array([[ 1. , 1.1],
[ 1. , 1. ],
[ 0. , 0. ],
[ 0. , 0.1]])
in [
18]: labels
out[
18]: ['a', 'a', 'b', 'b']
2)實施knn演算法
in [
19]: knn.classify0([0, 0], group, labels, 3)
out[
19]: 'b'
in [
20]: knn.classify0([1.5, 0.5], group, labels, 3)
out[
20]: 'a'
3)測試分類器
分類器錯誤率=分類器給出錯誤結果的次數 / 測試執行的總數
《機器學習實戰》 k近鄰分類演算法kNN
knn全稱為k nearest neighbors,是模式識別中比較簡單的一種演算法,可以用於分類和回歸。使用時,輸入的訓練樣本帶有標籤,輸出根據是用於分類還是回歸 分類問題的輸出為 找出k個和要 物件最近鄰的樣本,這k個樣本中,大多數 屬於哪一類即為 物件的分類標籤。回歸問題的輸出為 找出k個和回...
機器學習 k 近鄰 kNN 演算法
一 基本原理 存在乙個樣本資料集合 也稱訓練樣本集 並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的分類標籤。我們一般只選擇樣本集中前k k通常是不大於20的整數 個最相似的資料,最後選擇k個...
機器學習 k近鄰演算法 kNN
knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...