1 概述
k-近邻算法采用测量不同特征值之间的距离的方法进行分类。
2 优缺点
优点:精度高,对异常值不敏感,无数据输入假定
缺点:计算复杂度该,空间复杂度高,不能保存成模型
适用数据范围:数值型和标称型
3 数据准备
3.1 数据准备
要测试的向量。是我们要进行预测的数据
训练数据集,是不包含目标向量的特征数据集
标签组成的向量(目标变量组成的向量)
k,就是我们所要查找的前多少个相似的,一般不大于20
3.2 数据整理
在上一篇文章我们讲到了归一化,下面提供一个较为简单的归一化公式:
new_value=(old_value-min)/(max-min)
old_value:原来的值
min:在数据集中该特征最小的值
max:在数据集中该特征最大的值
那我们看看如何用代码进行实现这个归一化吧。
import numpy
class Normalization(object):
def auto_norm(self, matrix):
"""
数据清洗,归一化
new_value=(old_value-min)/(max-min)
:param matrix: 矩阵
:return: 归一化的矩阵,范围数据,最小值
"""
# 0表示从列中选值
# 每列的最小值组成一个向量
min_value = matrix.min(0)
# 每列的最大值组成一个向量
max_value = matrix.max(0)
# 每列的范围值
ranges = max_value - min_value
m = matrix.shape[0]
norm_matrix = numpy.zeros(numpy.shape(matrix))
# 分子
norm_matrix = matrix - numpy.tile(min_value, (m, 1))
# 不是矩阵除法,矩阵除法是linalg.solve(matA,matB)
norm_matrix = norm_matrix / numpy.tile(ranges, (m, 1))
return norm_matrix, ranges, min_value
4 原理
4.1 算法思想
准备上方所说的数据
输入新数据后,将新数据复制成与训练数据集一样的矩阵,然后每条向量与训练数据集计算欧式距离
对计算出的欧式距离的数据进行从小到大的排序(欧式距离中数值越小,越相似),获取一个由索引位置组成的数组