k-近邻算法
- 优点:精度高、对异常值不敏感、无数据输入假定
- 缺点:计算复杂度高、空间复杂度高
- 适用数据范围:数值型和标称型
1.1 约会数据
数据集:datingTestSet2.txt
size:1000x3
主要包括以下三种特征:1)每年获得的飞行常客里程数 2)玩视频游戏所耗时间百分比 3)每周消费的冰淇淋公升数
# kNN.py
from numpy import *
import operator
import matplotlib
import matplotlib.pyplot as plt
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
'''
K-近邻算法:对未知类别属性的数据集中的每个点依次执行以下操作:
(1)计算已知类别数据集中的点与当前点之间的距离
(2)按照距离递增次序排序
(3)选取与当前点距离最小的k个点
(4)确定前k个点所在类别的出现频率
(5)返回前k个点出现频率最高的类别作为当前点的预测分类
'''
'''
Input: 用于分类的输入向量inX,训练样本集dataSet,标签向量labels,选择最近邻居的数目k
Output:当前点的预测分类
'''
def classify0(inX, dataSet, labels, k):
'''距离计算
'''
dataSetSize = dataSet.shape[0] #数据集大小
diffMat = tile(inX, (dataSetSize, 1)) - dataSet #tile函数:由inX生成的dataSetSize X 1大小的数组
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
'''argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y
'''
sortedDistIndices = distances.argsort()
classCount={}
for i