美文网首页
01-knn k临近算法

01-knn k临近算法

作者: 子无不语 | 来源:发表于2017-08-29 18:42 被阅读0次

一、knn简介

k临近算法采用测量不同特征值之间的距离来分类,在样本数据及中找出k个待分类数据最相似的样本,这k个样本中出现最多的类别作为待分类样本的类别

算法流程


遍历所有样本

对输入数据计算和每一个样本数据的误差

找出k个误差最小的样本

统计k个最相似的样本中出现最多的类别作为待分类样本类别

二、代码实现

样本数据

这是一份约会网站数据,

数据有三种分类:

  1. largeDoses 极具魅力的人

  2. smallDoses 魅力一般的人

  3. didntlike 不喜欢的人

每条数据共有三种特征:

  1. 每年乘飞机飞行里程数

  2. 玩游戏时间百分比

  3. 每周消耗冰欺凌公升数


40920    8.326976    0.953952    largeDoses

14488    7.153469    1.673904    smallDoses

26052    1.441871    0.805124    didntLike

75136    13.147394    0.428964    didntLike

38344    1.669788    0.134296    didntLike

72993    10.141740    1.032955    didntLike

35948    6.830792    1.213192    largeDoses

42666    13.276369    0.543880    largeDoses

67497    8.631577    0.749278    didntLike

35483    12.273169    1.508053    largeDoses

... ...

这些数据保存在datingTestData.txt中。

读取数据

将数据文件中特征值读取为numpy 3*n数组ret_mat

标签去读取为1*n数组labels


for line in lines:

line = line.strip()

l = line.split('\t')

ret_mat[index] = l[0:3]

labels.append(l[-1])

index += 1


数据归一化

不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价.

常用的归一化方法有:

  • min-max标准化法

  • Z-score标准化方法

这里我们使用min-max标准化法。

$\frac{x-minval}{maxval-minval}$

分类

knn与其他机器学习方法不同的是,没有训练过程,直接对数据集上所有数据计算。分类时需要计算待分类样本与每一个样本数据的相似度,这里相似度我们用L2距离(就是我们常见的欧氏距离)表示

$L_2 = \sqrt{\sum_{k=1}^n x_{ik} - x_{jk}}$

简单的说就是向量每个元素平方和再开根,距离越小误差越小,即相似度越大


def classify0(in_x,dataset,labels,k):

dataset_size = dataset.shape[0]

diff_mat = in_x - dataset # numpy Broadcasting

sq_mat = diff_mat**2

sq_distance = sq_mat.sum(axis=1)

distances = sq_distance**0.5

sort_distance_index = distances.argsort()

class_count = {}

for i in range(k):

cur_label = labels[sort_distance_index[i]]

class_count[cur_label] = class_count.get(cur_label,0) + 1

sort_class_cout = sorted(class_count.iteritems(),key = operator.itemgetter(1),reverse=True)

return sort_class_cout[0][0]

测试我们的分类器

文本中有1000条数据,我们将其中一部分用来做测试数据,一部分用来做样本库,每隔1/10 取一条数据作为测试数据


test_data = dataset[0:data_size/10:1,0:]

test_labels = labels[0:data_size/10:1]

剩下的作为样本库


dataset = dataset[data_size/10:data_size:1,0:]

labels = labels[data_size/10:data_size:1]

完整代码

相关文章

  • 01-knn k临近算法

    一、knn简介 k临近算法采用测量不同特征值之间的距离来分类,在样本数据及中找出k个待分类数据最相似的样本,这k个...

  • knn k临近算法

    ## 一、knn简介 k临近算法采用测量不同特征值之间的距离来分类,在样本数据及中找出k个待分类数据最相似的样本,...

  • 实现k临近算法

    欧式距离 给定一个训练数据集,对新的输入实例,计算两者之间的距离,与k个最小距离的标签进行分类。通俗来说即是点到直...

  • K-NN算法

    什么叫做K-Nearest Neighbours? K临近算法是一个简单的分类算法,它也可以用来做回归。 K-NN...

  • 人工智能算法(一)K临近算法

    M小白 2018/1/28完整python代码:关注“技术杂学铺”微信公众号,回复 k临近算法 获取 k临...

  • 《机器学习(周志华)》学习笔记(十)

    Q:什么是K临近学习? A:K临近学习是一种监督学习算法。与以往的监督学习,如线性回归、决策树、支持向量机等不同,...

  • ML-k近邻最近邻

    1.KNN介绍 k临近算法 也叫Knn 是一种基于样本的模型,当K取值为1时算法原理是 对于新的实例, 在训练集中...

  • 机器学习代码实现 KNN(二)

    k-临近算法是采用测量不同特征值之间的距离方法进行分类。 计算步骤

  • #机器学习#kNN近邻分类算法的原理及实例

    k临近法(k-Nearest Neighbor, kNN)是最简单的机器学习算法之一,但它仍然被广泛应用在面部识别...

  • knn算法

    knn算法 knn算法简介 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法。所谓K...

网友评论

      本文标题:01-knn k临近算法

      本文链接:https://www.haomeiwen.com/subject/guladxtx.html