机器学习系列2 | k近邻分类算法

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 算法思想

准备上方所说的数据
输入新数据后,将新数据复制成与训练数据集一样的矩阵,然后每条向量与训练数据集计算欧式距离
对计算出的欧式距离的数据进行从小到大的排序(欧式距离中数值越小,越相似),获取一个由索引位置组成的数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值