機械学習----K-近隣アルゴリズム(Pythonコード詳細)
3750 ワード
このブログの内容は主に「Machine Learning in Action」の中国語版「マシン学習実戦」の結節を独学で勉強しています.原書では呼び出したモジュールの機能についてあまり説明していません.本稿ではまとめと補足を行いました.
K-近隣アルゴリズム
一、アルゴリズムの概要
K‐近隣アルゴリズムは,異なる固有値間の距離を測定して分類することである.距離は欧式距離計算式を採用して、二つのベクトル点xAとxBの間の距離を計算します.
d=(xA 0−xB 0)2+(xA 1−xB 1)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
例えば、点(0、0)と点(1、2)の間の距離は、次のように計算される.
(1−0)2+(2−0)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
データセットが4つの特徴値がある場合、ポイント(1,0,0,1)と(7,6,9,4)の間の距離は次のように計算される.
(7−1)2+(6−0)2+(9−0)2+(4−1)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−の利点:精度が高く、異常値に敏感ではなく、データ入力の仮定がない. 欠点:計算の複雑さが高く、空間の複雑さが高い. Pythonコード実現
基本アルゴリズムの実装 Pythonを使用してデータを準備する K−近隣アルゴリズムは、K−近隣アルゴリズムの原理に従って、コード論理は以下の通りである. は、既知のクラス属性のデータセットの各点と現在の点との間の距離を計算する. 距離に従って小さい時から順に並べ替えます. は、現在の距離と最小のK個の点を選択する. は、K個のポイントがあるカテゴリの出現頻度を決定する. は、前のK点の出現頻度が最も高いカテゴリを現在のポイントの予測カテゴリとして返す.
K-近隣アルゴリズム
一、アルゴリズムの概要
K‐近隣アルゴリズムは,異なる固有値間の距離を測定して分類することである.距離は欧式距離計算式を採用して、二つのベクトル点xAとxBの間の距離を計算します.
d=(xA 0−xB 0)2+(xA 1−xB 1)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
例えば、点(0、0)と点(1、2)の間の距離は、次のように計算される.
(1−0)2+(2−0)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
データセットが4つの特徴値がある場合、ポイント(1,0,0,1)と(7,6,9,4)の間の距離は次のように計算される.
(7−1)2+(6−0)2+(9−0)2+(4−1)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
基本アルゴリズムの実装
from numpy import *
import operator
def creatDataset():
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) #
labels=['A','A','B','B'] #
return group,labels
def classify0(intX,dataSet,labels,k):
#1.1 dataSet
dataSetSize=dataSet.shape[0]
#1.1tile
diffMat=tile(intX,(dataSetSize,1))-dataSet
#1.1
sqDiffMat=diffMat ** 2
#1.1
sqDistances=sqDiffMat.sum(axis=1)
distances=sqDistances ** 0.5 #1.1
#2.1
sortedDistIndicies=distances.argsort()
classCount={}
#3.1
for i in range(k):
#4.1
voteIlabel = labels[sortedDistIndicies[i]]
#4.2 K ,classCount
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
#4.3
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse = True)
#5
return sortedClassCount[0][0]
パラメータintX=[0,0]を入力すると、このプログラムの分類結果はBです.