K-近邻算法

来源:互联网 发布:中国出口构成 知乎 编辑:程序博客网 时间:2024/05/18 19:23

K-近邻算法

k-近邻算法简单、直观:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类。


优点:精度高、对异常值不敏感、无数据输入假定。

缺点:计算复杂度高、空间复杂度高。

适用数据范围:数值型和标称型(只在有限目标集中取值,如真与假,常用于分类问题。)。


算法

输入:训练数据集T={(x1,y1),(x2,y2),,(xN,yN)}。其中,xiχRn为实例的特征向量,yiY={c1,c2,,cK}为实例的类别,i=1,2,,N;实例特征向量x

输出:实例x所属的类y

(1) 根据给定的距离度量,在训练集T中找出与x最邻近的k个点,涵盖这k个点的x的邻域记作Nk(x)

(2) 在Nk(x)中根据分类决策规则(如多数表决)决定x的类别y:

y=argmaxcjxiNk(x)I(yi=cj),i=1,2,,N;j=1,2,,K

其中,I为指示函数,即当yi=cjI为1,否则I为0。

Python实现

  • 使用Python导入数据
def createDataSet():    '''    创建带标签的数据集    :return: 返回训练集和标签    '''    # 4*2的特征变量矩阵    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])    labels = ['A', 'A', 'B', 'B']    return group, labels

group矩阵包含4组数据,向量labels包含了每个数据点的标签信息。此处,我们将数据点(1, 1.1)和(1, 1)定义为类A,将数据点(0, 0)和(0, 0.1)定义为类B。

  • 实施KNN分类算法

算法伪代码如下:

(1) 计算已知类别数据集中的点与当前点之间的距离;
(2) 按照距离递增次序排列;
(3) 选取与当前点距离最小的k个点;
(4) 确定前k个点所在类别的出现频率;
(5) 返回前k个点出现频率最高的类别作为当前点的预测分类。

def classify0(inX, dataSet, labels, k):    '''    KNN算法    :param inX: 用于分类的输入向量    :param dataSet: 训练集    :param labels: 标签向量    :param k: 用于选择最近邻居的数目    :return: 返回分类类别    '''    # 距离计算    dataSetSize = dataSet.shape[0]  # 读取dataSet的第一维长度    diffMat = tile(inX, (dataSetSize, 1)) - dataSet    sqDiffMat = diffMat ** 2    sqDistances = sqDiffMat.sum(axis=1)  # 对矩阵的每一行求和    distances = sqDistances ** 0.5    # 将数据按照距离从小到大排序    sortedDistIndicies = distances.argsort()    classCount = {}    # 选择距离最小的k个点    for i in range(k):        voteIlabel = labels[sortedDistIndicies[i]]        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1    # 按照字典的第二个元素的大小对排序,此为逆序    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)    return sortedClassCount[0][0]
  • 测试代码
if __name__ == '__main__':    # KNN算法实现    group, labels = createDataSet()    label = classify0([0, 0], group, labels, 3)    print label

测试结果为:

B
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 报到证办理时间 报到证登报遗失声明多少钱 报到证可以让别人代办吗 怎么补办报到证 专科毕业报到证 怎么拿到报到证 专科毕业生就业报到证 学校没有发报到证 怎样才能拿到报到证 如何重新办理报到证 考公务员要报到证吗 派邦奴 派酒店 如家派柏云酒店 派柏云酒店 西安派酒店 派酒店怎么样 u派酒店 流云浦 茶云纹叶枯病 简约云纹图片 错金银云纹青铜犀尊 金刚不死诀 九流仙人 归云诀 上古辣椒 流产产假 流产假期 流产假期规定 流产休假规定 流产假 2018产假流产假新规 流产假工资怎么算 流产假几天 女性流产假 流产几天假 流产有多少天假 流产假15天从哪天开始算 流产有假吗 怀孕流产假 流产假15天包括周末吗 流产有假 法定流产假是多少天