KNN——机器学习入门算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习入门算法——KNN(K-Nearest Neighbor)最邻近分类算法。


提示:以下是本篇文章正文内容,下面案例可供参考

一、KNN是什么?

KNN是机器学习中最简单,最基础,也是最好理解思路的一种算法,其指导思想简单可以用一句老话来理解:“近朱者赤,近墨者黑”。

二丶实现原理

为了判断某未知样本的类别,以所有已知类别的样本作为参照,计算出未知样本与所有已知样本的距离,从中选出已知样本与未知样本距离最近的前K个已知样本,根据投票原则(即少数服从多数原则),将未知样本与K个最近邻的已知样本中所属类别最多的类别归为未知样本类别。
在这里插入图片描述

三丶实现关键点

1.样本数据量化

由于算法过程涉及距离的计算,那么就要求样本的所有属性数据均为数值型数据,非数值型数据(如字符串数据)需要转换为数值型数据,常用的方法有使用每种数据出现的频数代替数据,或者使用散列函数将非数值型数据量化

2.样本数据归一化

算法实现过程中距离的计算大多使用欧式距离(后文说明),比如现在我有两个属性的数据,一个属性A,属性值的取值区间为[0,1],而属性B的取值区间为[0,100000],那么我们在计算欧式距离时,无疑默认将数据B的权值加重,但我们在训练时并不知道属性A,B哪个对结果的影响更大,所以需要对所有属性的数据进行归一化处理。

3.距离函数

通常使用的距离函数有:欧氏距离(欧几里得距离)、余弦距离、汉明距离、曼哈顿距离等,一般选用欧式距离作为距离度量。下面给出欧式距离的定义:
欧式距离计算公式(来源于百度百科)

K值选取

K值作为KNN算法中最重要的一个参数,K值太大容易造成欠拟合,太小容易造成过拟合,所以需要对训练结果进行交叉验证以确定最适K值,交叉验证一般以数据集数量的平方根开始向两边验证。

三、代码实现

代码如下(以样本类别数量为2为例,输入train为二维数组,行数据为各个样本数据,列数据为每个属性数据,最后一列为类别属性,test同train,但缺少最后一列类别属性,输出result是长度为样本数量的一维类别数组):

class KNN:
    def __init__(self,train,test):
        self.train=train
        self.test=test
    @staticmethod
    def distance(x,y):
        dis=0.0
        for i in range(0,len(x)-1):
            dis+=(x[i]-y[i])**2
        return dis
    def knn(self):
        result=[]
        for i in range(0,len(self.test)):
            dis=[]
            for j in range(0,len(self.train)):
                temp=[]
                temp.append(self.distance(self.train[j],self.test[i]))
                temp.append(self.train[j][-1])
                dis.append(temp)
            dis.sort()
            dis=dis[0:K]
            class0=0
            class1=0
            for i in range(0,K):
                 if dis[i][1]==0:
                   class0+=1
                 else :
                    class1+=1
            if class0>class1:
                result.append(0)
            else :
                result.append(1)
        return result

总结

例如:以上就是今天要分享的内容,主要简单讲述了KNN算法的实现原理,注意事项,以及代码示例。本人机器学习入门者,若上述内容有误,欢迎交流指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值