最近学习机器学习算法,用python实现。
这里记录k近邻算法的python源码实现和一些理解。
文章参考了zouxy09的博文,代码参考machine learning in action.
k近邻分类算法原理:
1、根据k近邻,计算K个离待分类物品最近的物品,这K个最近的物品已经分类。
2、统计K个近邻的分类结果,按照降序排列。
3、分类结果值最大的,即是待分类物品类别。
代码如下(根据手写数字0-9,判断未知手写数字的分类):
#!/usr/bin/env python
# coding=utf-8
'''
Created on Sep 16, 2010
kNN: k Nearest Neighbors
Input: inX: vector to compare to existing dataset (1xN)
dataSet: size m data set of known vectors (NxM)
labels: data set labels (1xM vector)
k: number of neighbors to use for comparison (should be an odd number)
Output: the most popular class label
@author: pbharrin
'''
from numpy import *
import operator
from os import listdir
#每个dataSet数组元素,对应一个labels数组元素,根据K邻域分类
#k应该是奇数,偶数不好比较。举例:分类结果A:2;B:2.就不能正确分类了
def classify0(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