k最近邻算法(K-Nearest Neighbor,KNN)

  1. KNN算法介绍
    k最近邻算法(K-Nearest Neighbor,KNN)是最基本的分类算法,其基本思想是:从最近的K个邻居(样本)中,选择出现次数最多的类别作为判定类别。

实现KNN算法核心的一般思路为:

  • 计算距离(测试数据与训练数据之间的距离)

  • 将距离排序

  • 得到距离最小的前K个样本

  • 确认K个点它所在类别出现的频率

  • 出现次数最多的标签即为最终类别

案例

import numpy as np

class KNN:
    def __init__(self,k):
        self.K = k

    # 准备数据
    def createData(self):
        feature = np.array([[180,76],[158,43],[176,78],[161,69]])
        labels = ['男','女','男','女']
        return feature,labels

    # 数据进行Min-Max标准化
    def Normalization(self,data):
        maxs = np.max(data,axis=0)
        mins = np.min(data,axis=0)
        new_data = (data-mins)/(maxs-mins)
        return new_data,maxs,mins

    # 计算K近邻
    def classify(self,one,data,labels):
        # 计算新样本与数据集中每个样本之间的距离,这里采用的欧氏距离计算方法
        differenceData = data - one
        squareData = (differenceData**2).sum(axis=1)
        distance = squareData**0.5
        sortDistanceIndex = distance.argsort()
        # 统计k最近邻的label
        labelCount = dict()
        for i in range(self.K):
            label = labels[sortDistanceIndex[i]]
            labelCount.setdefault(label,0)
            labelCount[label] += 1
        # 计算结果
        sortLabelCount = sorted(labelCount.items(),key=lambda x:x[1],reverse=True)
        print(sortLabelCount)
        return sortLabelCount[0][0]

if __name__ == '__main__':
    # 初始化类对象
    knn = KNN(3)
    # 创建数据集
    features,labels = knn.createData()
    # 数据集标准化
    new_data,maxs,mins = knn.Normalization(features)
    print('.....',new_data)
    # 新数据的标准化
    one = np.array([176,76])
    new_one = (one-mins)/(maxs-mins)
    # 计算新数据的性别
    result = knn.classify(new_one,new_data,labels)
    print('数据 {} 的预测性别为:{}'.format(one,result))

参考文章:

机器学习之kNN算法实战详解

机器学习实战之KNN算法

你可能感兴趣的:(TensorFlow)