KNN近隣アルゴリズム
2272 ワード
kNN近隣アルゴリズムの原理:訓練サンプルセットとも呼ばれるサンプルデータセットが存在し、サンプルセットの各データにはラベルが存在し、すなわち、サンプルセットの各データと所属分類のチームメイトとの関係を知っている.ラベルのない新しいデータを入力した後、新しいデータの各特徴をサンプルセットのデータと比較し、アルゴリズムはサンプルセットの特徴が最も類似しているデータ(最も隣接している)の分類ラベルを抽出する.
アルゴリズムの流れ:
1.データの収集
2. データの準備
3.データの分析
4. トレーニングアルゴリズム
5. テストデータ
6. アルゴリズムの使用
出力結果:
-----------------------------
上記の入力データを例として中間の出力:
これにより、近隣のAはBよりも2つ大きいので出力Aが表示される
『機械学習実戦』という本を参考にする
アルゴリズムの流れ:
1.データの収集
2. データの準備
3.データの分析
4. トレーニングアルゴリズム
5. テストデータ
6. アルゴリズムの使用
# -*- coding: utf-8 -*-
'''
Created on Mar 15, 2016
@author: fky
k-
'''
from numpy import array
import operator
from numpy.lib.shape_base import tile
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
def classify(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[0] #
diffMat = tile(inX,(dataSetSize,1)) -dataSet #
sqDiffMat = diffMat**2 #
sqDistances = sqDiffMat.sum(axis=1) #
distances = sqDistances**0.5 #
sortedDistIndicies = distances.argsort()
classCount = {}
for i in range(k): # k
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #
return sortedClassCount[0][0]
if __name__=='__main__':
group, labels = createDataSet()
print(classify([1,1], group, labels, 3))
出力結果:
A
-----------------------------
diffMat = tile(inX,(dataSetSize,1)) -dataSet #
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1) #
distances = sqDistances**0.5
上記の入力データを例として中間の出力:
diffMat = [[ 0. -0.1]
[ 0. 0. ]
[ 1. 1. ]
[ 1. 0.9]]
sqDistances = [ 0.01 0. 2. 1.81]
sortedClassCount=[('A', 2), ('B', 1)]
これにより、近隣のAはBよりも2つ大きいので出力Aが表示される
『機械学習実戦』という本を参考にする