机器学习——knn算法

一、knn算法概述

1.算法简介

k-近邻算法是一种用于分类和回归的非参数方法。在分类问题中,它通过测量不同特征之间的距离来对数据进行分类。k-近邻算法不同于传统的基于参数模型的算法,它不会对数据进行假设,而是直接利用数据之间的相似性进行分类。

2.knn算法的一般流程

1.收集数据:可以使用任何方法。

2.准备数据:距离计算所需要的数值,最好是结构化的数据格式。

3.分析数据:可以使用任何方法。

4.训练算法:此步骤不适用于k-近邻算法。

5.测试算法:计算错误率。

6.使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。

3.优缺点分析

优点:精度高、对异常值不敏感、无数据输入假定。

缺点:计算复杂度高、空间复杂度高。

二、knn算法实现

1.k值选取

我们在进行knn算法的时候需要选取合适的k值,不然会造成得到的结果有误差。

k值偏小:如果遇到异常点或者局部特性较强的样本,可能会导致错误的分类,对训练数据过度敏感,泛化能力变差,会造成过拟合现象。

k值偏大:对于复杂的分类边界,可能无法捕捉到真实的数据分布,导致分类性能下降,当 k 值较大时,模型会变得简单,可能会忽略样本之间的细微差异,会造成欠拟合现象。

2.距离计算

这里我使用的是欧氏距离计算公式。

3.代码实现

import numpy as np
import operator

def createDataSet():
    features=np.array([[160,48],[165,50],[178,8],[185,12]])
    labels=['女','女','男','男']
    return features,labels

def classify0(X,data,labels,k):
    dataSize=data.shape[0]
    diffMat=np.tile(X,(dataSize,1))-data
    sqdiffMat=diffMat**2
    sqdistances=sqdiffMat.sum(axis=1)
    distances=sqdistances**0.5
    sortedDistIndicies=distances.argsort()
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]


features,labels=createDataSet()
test=[160,12]
start_test=classify0(test,features,labels,3)
print(start_test)

 4.运行结果

希望以上内容对读者能提供一些帮助,学无止境!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值