2.1 K-近邻算法概述
k-近邻算法
- 优点:
- 精度高、对异常值不敏感、无数据输入假定
- 缺点
- 计算复杂度高、空间复杂度高
- 使用数据范围:
- 数值型和标称型
k-近邻算法的工作原理:
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即知道样本集中每一数据与所属分类的关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,只选择样本数据集中前k个最相似的数据,通常k不大于20,选择k个最相似数据中出现次数最多的分类,作为数据的分类。
k-近邻算法的一般流程:
- 收集数据:可以使用任何方法
- 准备数据:距离计算所需要的数值,最好是结构化的数据格式
- 分析数据:可以使用任何方法
- 训练算法:此步骤不适用于k-近邻算法
- 测试算法:计算错误率
- 使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理
# -*- coding: utf-8 -*-
"""
Created on Wed May 24 21:42:55 2017
@name: kNN.py
@author: L. D. Xiao
"""
from numpy import *
import operator
#==============================================================================
# 创建数据集和标签
#==============================================================================
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
#================================ kNN算法 ======================================
# kNN对未知类别属性的数据集中的每个点依次执行以下操作:
# 计算已知类别数据集中的点与当前点之间的距离;
# 按照距离递增次序排序;
# 选取与当前点距离最小的k个点;
# 确定前k个点所在类别的出现频率;
# 返回前k个点出现频率最高的类别作为当前点的预测分类
#==============================================================================
def classify0(inX, dataSet, labels,k)