kNN算法

理想环境下的kNN


计算距离 ->取最近的K个值 -> 选取占比高的类别

1. 计算距离

原始数据:9条数据,2个属性,2个类别

对于待分类的点**(61,20) **, 可以得到对于每个点的距离,使用曼哈顿距离公式.我不是为了偷懒,就是用这个

项目 X1 X2 X3 X4 X5 X6 X7 X8 X9
距离 11 20 6 14 3 81 68 86 71
类别 A A A A B B B B B

2. 最近k个

最近的三个依次是X5-B,X3-A,X1-A

3. 判断类别

A占66%,B占33%
所以待分类点**(61,20) **是A类别

4. 简单py实现

计算机负责计算,可以舍弃曼哈顿距离了,用最经典的欧几里得距离

# -*- coding: utf-8 -*-

__author__ = 'Matter-YYF'

from numpy import *
import operator

def createDataSet():
    # numpy的array可以初始化矩阵
    group = array([[50.0,20.0],[53.0,32.0],[60.0,25.0],
                  [65.0,30.0],[58.0,20.0],[10.0,50.0],
                  [20.0,47.0],[15.0,60.0],[25.0,55.0]])
    label = ['A','A','A','A','B','B','B','B','B',]
    return group,label

def classify0(inX, dataSet, labels, k):
    # shape属性是行列数
    dataSetSize = dataSet.shape[0]
    # 用tile创建重复数组,此处用于创建矩阵 tile([61.0,20.0],(9,1))
    diffMat = tile(inX,(dataSetSize,1))-dataSet

    sqDiffMat = diffMat ** 2
    # 矩阵每行相加
    sqDistance = sqDiffMat.sum(axis=1)
    distance = sqDistance ** 0.5
    # 字典key排序
    sortedDistIndex = distance.argsort()
    classCount = {}
    for i in range(k):
        voteLabel = labels[sortedDistIndex[i]]
        # XX.get(a,b):有key=a的则取对应value,没有则为b
        classCount[voteLabel] = classCount.get(voteLabel,0)+1
    # 前k个类别的排序
    sortedClassCount = sorted(classCount.iteritems(),
                              key=operator.itemgetter(1),
                              reverse=True)
    # 返回占比例最高的类别
    return sortedClassCount[0][0]

dataSet,label = createDataSet()
resultKNN = classify0([61.0,20.0],dataSet,label,3)
print resultKNN

欢迎回到现实世界


1. 手输数据是有多蛋疼...

劳资是程序猿,不干low活

得从文件读数据啊


def file2matrix(filename):
    fr = open(filename)
    arrayOfLines = fr.readlines()
    numberOfLines = len(arrayOfLines)
    returnMat = zeros((numberOfLines,3))    # 生成一个空白矩阵,3列
    classLabelVector = []
    index = 0
    for line in arrayOfLines:
        line = line.strip()                 # 删除空白符:'\n','\r','\t',' '
        listFromLine = line.split('\t')     # 以制表符为分割生成列表
        returnMat[index,:] = listFromLine[0:3]              # 前三个项目是数据属性
        classLabelVector.append(int(listFromLine[-1]))      # 最后是类别标签
        index+=1
    return returnMat, classLabelVector

2. 数据怎么跨度这么大...

10w和25在一起,好别扭

归归归归一化

线性函数归一化(Min-Max scaling)
def autoNorm(dataSet):
    minVals = dataSet.min(0)        # 所有列里各自最小值
    maxVals = dataSet.max(0)        # 所有列里各自最大值

    ranges = maxVals -minVals       # 归一化计算公式分母
    normDataSet = zeros(shape(dataSet))

    m = dataSet.shape[0]            # 数据行数
    normDataSet = dataSet-tile(minVals,(m,1))       # 分子
    normDataSet = normDataSet/tile(ranges,(m,1))    #计算结果
    return normDataSet, ranges, minVals
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容

  • KNN算法既可以解决分类问题,也可以解决预测问题。基础思想:通过计算每个训练样例到待分类样品的距离,取和待分类样品...
    apricoter阅读 2,136评论 0 7
  • 之前讲解的线性回归和逻辑回归的原理中,不免会引入大量的数学推导和证明过程,从预测函数的建立,到损失函数的偏导数求解...
    PrivateEye_zzy阅读 18,702评论 0 7
  • 0x00kNN思想 kNN(k-NearestNeighbor),也就是k最近邻算法。顾名思义,所谓K最近邻,就是...
    s0k0y阅读 509评论 0 0
  • 一、K近邻算法 1.k近邻法是一种基本的分类与回归方法。 1).分类问题:对新的样本,根据其k...
    当_下阅读 310评论 0 1
  • 什么是KNN 在解释KNN之前,我先给大家举个例子:假如现在院子里分别在不同的栅栏里饲养了10只鸡,8条狗,5只猫...
    rcoon阅读 1,146评论 0 3