KNN-k临近算法

本文介绍了KNN-k近邻算法的流程,包括距离计算、数据归一化和选择最佳k值。通过Peter的机器学习实战,作者发现k=3时效果最好。数据归一化采用max-min方法,确保特征值在[0,1]之间。KNN不仅可以用于分类,通过投票法决定结果,还能处理回归任务,用平均法得出预测值。文章还提及了加权投票和加权平均的改良方法,强调了k值、距离度量和决策规则的重要性。" 99856880,8388967,STM32启动文件解析:从复位到main的旅程,"['STM32入门', '嵌入式开发', 'Cortex-M', '微控制器']
摘要由CSDN通过智能技术生成

使用Peter的机器学习实战学习了knn算法

算法流程:

1.算出测试点与所有训练点直接的距离(两点直接的距离公式,如果是多个点参照两点直接的距离公式)


2.为所有距离进行升序排列

3.取排序完毕的前k个点对其标签进行统计,最多的那个则为对应的标签


使用书上0-9数据集(每个数字都有接近200个样本)进行训练和测试的时候发现,k为3时最佳,k变大时错误率会上升,越大错的越多


因为数据的某两个属性的差值可能很大,会对欧式公式的距离计算造成很大影响,所以应该先进行数据的归一化

作者使用了max-min方法进行数据归一化,使所有的数值都落在[0,1]之间其公式为


注意:这里的max和min为整个数据集中每列(每种特征)的最大值和最小值,也就是说每种特征的最大值和最小值要单独计算


k近邻可以进行分类:投票法(取k个中值最多的那个分类作为结果)

可以处理回归任务:平均法(取k个值的平均数)

改良:根据距离远近进行加权投票和加权平均


kNN三要素:k值,距离的度量方法,决策规则的选择


代码:

def autoNorm(dataSet):  #数据归一化
    minValue = dataSet.min(0)
    maxValue = dataSet.max(0)
    ranges = maxValue - minValue
    normDataSet = zeros(shape(dataSet))
    m = dataSet.shape[0]
    normDataSet = dataSet - tile(minValue, (m, 1))
    normDataSet = normDataSet/tile(ranges, (m, 1))
    return normDataSet, ranges, minValue
def classify0(inX , dataSet , lables , k): #计算特征点的距离,排序并将其分类
    dataSetSize = dataSet.shape[0]  #用来查看矩阵的维数,即行数和列数
    diffMat = tile(inX,(dataSetSize,1))-dataSet    
    sqDiffmat = diffMat ** 2       
    sqDistancs = sqDiffmat.sum(axis=1)
    distances = sqDistancs ** 0.5
    sortedDistIndicies = distances.argsort()  #对测试点于训练集点中的距离进行排序
    classcount = {}
    for i in range(k):      #选取前k的最近的距离,并对其类别进行统计
        voteIlabel = lables[sortedDistIndicies[i]]
        classcount[voteIlabel] = classcount.get(voteIlabel,0)+1     
    sortedClasscont = sorted(classcount.items(), key=operator.itemgetter(1),reverse = True)
    return sortedClasscont[0][0]    #类别最多的即为测试样本的类别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值