机器学习k近邻算法

K-近邻法(KNN算法) 1、kNN算法(K 最近邻(k-Nearest Neighbors))描述 简单地说,k-近邻算法采用测量不同特征值之间的距离方法进行分类。 k-近邻算法是一种基本分类与回归方法;它是是监督学习中分类方法的一种,属于懒散学习法(惰性学习方法)。 ... 阅读详情

毕业10年,回过头看线性代数,全部还给了老师。翻看《Machine Learning in Action》做做笔记
1 欧式距离计算

# -*- coding: utf-8 -*-
'''
Created on 2017年10月27日

@author: dzm
'''
from numpy import  array, tile
import operator

def createDateSet():
    '''
    创建数据集和标签
    :return: 
        :param group 数据矩阵
        :param labels 向量包含了每个数据点的标签信息
    '''
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A', 'A', 'B', 'B']
    return group, labels

def classify0(inX, dataSet, labels, k):
    '''
        通过欧式距离公式,计算两个向量点xA和xB之间的距离。
        @see: 瓯氏距离公式 http://blog.youkuaiyun.com/Losteng/article/details/50893931
        @see: tile函数  http://blog.youkuaiyun.com/ksearch/article/details/21388985
        @see: argsort函数 https://www.cnblogs.com/yyxf1413/p/6253995.html 
        @see: sorted函数 http://www.runoob.com/python/python-func-sorted.html
        @see: operator.itemgetter http://mp.blog.youkuaiyun.com/mdeditor/79277992
    :param inX: 用于分类的输入
    :param dataSet: 输入的训练样本集
    :param labels: 标签向量
    :param k: 用于选择最近邻居的数目
    :return: 
    '''
    # dataSet为4*2的矩阵,通过shape获取行向量数量
    dataSetSize = dataSet.shape[0]
    # 将inX在行方向执行dataSetSize,在列方向执行1次, 两矩阵相减
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet
    # 数组的立方
    sqDiffMat = diffMat ** 2
    # 行数据相加,如果axis=0,则是列向量数据相加
    sqDistances = sqDiffMat.sum(axis=1)
    # 取根
    distances = sqDistances ** 0.5
    # 从小到排序,值为索引数组
    sortedDistIndicies = distances.argsort()
    classCount = {}
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        # classCount.get(voteIlabel, 0)是指不存在相对应key值的value则返回0
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

if __name__ == '__main__':
    group,labels = createDateSet()
    print classify0([2,3],group, labels, 3)

1
2
2 将文本记录转换为numpy可解析的格式

def file2matrix(filename):
    '''
    将待处理数据的格式改变为分类器可以接受的格式
    @see zeros函数 http://blog.youkuaiyun.com/qq_26948675/article/details/54318917
    :param filename: 数据文件路径
    :return: 
    '''
    fr = open(filename)
    numberOfLines = len(fr.readlines())         #get the number of lines in the file
    returnMat = zeros((numberOfLines,3))        #prepare matrix to return
    classLabelVector = []                       #prepare labels return
    index = 0
    fr = open(filename)
    for line in fr.readlines():
        # 移除行数据中的空格
        line = line.strip()
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine[0:3]
        classLabelVector.append(int(listFromLine[-1]))
        index += 1
    return returnMat,classLabelVector

if __name__ == '__main__':
    datingDataSet, datingLabels = file2matrix('F:\pythonwork\machinelearninginaction\Ch02\datingTestSet2.txt');
    print datingDataSet

3
3 使用Matplotlib创建散点图

if __name__ == '__main__':
    datingDataSet, datingLabels = file2matrix('F:\pythonwork\machinelearninginaction\Ch02\datingTestSet2.txt');
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(datingDataSet[:,1], datingDataSet[:,2])
    plt.show()

matplotlib.pyplot中add_subplot方法参数111的含义
4 数值归一化
本文中采用的是min-max标准化,也可参见三种常用数据标准化方法,按照最大尺度进行同比例缩放到0-1之间

def autoNorm(dataSet):
    '''
    归一化特征值
    @see http://blog.youkuaiyun.com/pipisorry/article/details/52247379
    :param dataSet: 
    :return: 
    '''
    # 以dataSet中以第0列取最小值
    minVals = dataSet.min(0)
    # 以dataSet中以第0列取最大值
    maxVals = dataSet.max(0)
    ranges = maxVals - minVals
    normDataSet = zeros(shape(dataSet))
    m = dataSet.shape[0]
    # 数据归一化:newValue = (oldValue-min)/(max-min)
    normDataSet = dataSet - tile(minVals, (m,1))
    normDataSet = normDataSet/tile(ranges, (m,1))   #element wise divide
    return normDataSet, ranges, minVals

5 计算分类错误率

def datingClassTest():
    '''
    计算分类错误率
    :return: 
    '''
    # 10%的测试数据
    hoRatio = 0.1      #hold out 10%
    datingDataMat,datingLabels = file2matrix('F:\pythonwork\machinelearninginaction\Ch02\datingTestSet2.txt')       #load data setfrom file
    # 将数据归一化
    normMat, ranges, minVals = autoNorm(datingDataMat)
    m = normMat.shape[0]
    numTestVecs = int(m*hoRatio)
    errorCount = 0.0
    for i in range(numTestVecs):
        # 通过k近邻算法进行分类
        classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
        # 筛选出错误分类的数据
        if (classifierResult != datingLabels[i]):
            errorCount += 1.0
            print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, datingLabels[i])
    print "the total error rate is: %f" % (errorCount/float(numTestVecs))
    print errorCount

6 通过输入的信息,找到她对对方喜欢程度的预测值

def classifyPerson():
    resultList = ['not at all', 'in small doses', 'in large doses']
    # raw_input是在控制台输入
    percentTats = float(raw_input("percentage of time spent playing video games?"))
    ffMiles = float(raw_input("frequent flier miles earned per year?"))
    iceCream = float(raw_input("liters of ice cream consumed per year?"))
    datingDataMat, datingLabels = file2matrix('F:\pythonwork\machinelearninginaction\Ch02\datingTestSet2.txt')
    normMat, ranges, minVals = autoNorm(datingDataMat)
    # inArr是新输入的数据,通过(inArr-minVals)/ranges对数据进行归一化处理
    inArr = array([ffMiles, percentTats, iceCream])
    classifierResult = classify0((inArr-minVals)/ranges, normMat, datingLabels, 3)
    print "you will probably like this person:",resultList[classifierResult-1]

缺点
1 k-近邻算法是基于实例的学习,使用算法时我们必须有接近实际数据的训练样本数数据,存储空间要求大
2 必须对数据集中的每个数据计算距离值,耗时
3 无法给出任何数据的基础结构信息,也无法知晓平均实例样本和典型实例样本具有什么特征。

ML-kNN 多标签k近邻算法 MLL Week 1 ML-kNN 多标签k近邻算法 MLL Week 1ML-kNN 多标签k近邻算法 MLL Week 1 传统kNN 多标签kNN  学习张敏灵老师的《ML-kNN: a lazy learning approach to multi-label learning》的学习笔记。传统kNN  k近邻算法(k-Nearest Neighbour, KNN)是机器学习中最基础,最简单的常用算法之一。其思想 阅读详情

相关推荐

机器学习(一):K-近邻算法(KNN)分类与回归

这是自己的第一篇机器学习的文章,单纯做自己的学习笔记,一起加油进步 K-近邻 算法(KNN)

2020重新做人的博客 6785

数据挖掘基本算法

数据挖掘主要分为4类,即预测、分类、聚类和关联,根据不同的挖掘目的选择相应的算法。R语言博大精深,吸纳了来自各方的挖掘算法包,这些包都是由统计学家或是算法研究人员提供,我们可以站在这些伟人的肩膀上实现算法的应用。下面对常用的数据挖掘包做一个汇总: 连续因变量的预测: stats包 lm函数,实现多元线性回归 stats包  glm函数,实现广义线性回归 stats包  nls函数,实

韩王-信 1414

【机器学习】K-近邻算法(KNN)全面解析

K-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,属于监督学习范畴。它的工作原理简单直观:给定一个训练数据集,对新的输入实例,KNN算法通过计算其与训练集中每个实例的距离,找出距离最近的K个邻居,然后根据这些邻居的类别(对于分类任务)或值(对于回归任务)来预测新实例的类别或值。KNN因其简单高效和无需训练过程的特点,在众多领域中得到广泛应用,如模式识别、推荐系统、图像分类等。KNN算法的核心思想是“物以类聚”,即相似的数据应有相似的输出。

鑫宝的博客 6638

KF算法学习(一):算法原理与推导

学习过程中接触到了卡尔曼滤波,因为自己的数学渣属性,特地把自己的推导过程记录下来以加深理解,虽然有重复造轮子的嫌疑~ 推导公式过多,图方便自己用的office写的文档,后来发现打算上传到博客上时很无能为力。。。没办法只能截图上传图片了。后面整理好文档和对应代码后会把原始文档上传上来。当然网上有很多大神十分透彻的讲解,自己在学习过程中也借鉴收获了很多,这些文章链接会附在后面。

On my way 8300

【机器学习实战 Task1】 (KNN)k近邻算法的应用

1 背景 1.1 k近邻算法的概述 (1)k近邻算法的简介 k-近邻算法是属于一个非常有效且易于掌握的机器学习算法,简单的说就是采用测量不同特征值之间距离的方法对数据进行分类的一个算法。 (2)k近邻算法的工作原理 给定一个样本的集合,这里称为训练集,并且样本中每个数据都包含标签。对于新输入的一个不包含标签的数据,通过计算这个新的数据与每一个样本之间的距离,选取前k个,通常k小于20,以k个剧里最近的数据的标签中出现次数最多的标签作为该新加入的数据标签。 (3)k近邻算法的案例 当前统计了6部

202xxx的博客 8722

机器学习笔记九:K近邻算法(KNN)

KNN原理和实战

谢小小XH 7248

K-近邻算法(KNN)

​ K近邻(K-Nearest Neighbor, KNN)是一种最经典和最简单的*有监督学习*方法之一

Running Snail 6万+

机器学习经典算法:K近邻算法(KNN)

K近邻算法(KNN)是一种基于距离的机器学习算法,通过寻找离目标点最近的K个邻居并综合其信息完成分类或回归。它简单直观,无需训练,但计算成本较高,对K值和数据分布敏感。

Norah 的技术博客 1286

K-近邻算法

学习笔记

PCGuo999的博客 2万+

机器学习实战k-邻近算法(kNN)简单实施代码解读

一.概念k-邻近算法是最简单的机器学习算法之一。k-邻近算法采用测量不同特征值之间的距离(具体说是欧氏距离)的方法进行分类。输入待分类的数据后,计算输入特征与样本集数据对应特征的距离,选择样本集中与输入特征距离最小的前k个样本,统计这k个样本数据中出现次数最多的类别作为新数据的分类。二.kNN的简单实施代码及注释from numpy import * import operatordef creat

SCUT_Arucee的博客 3269

机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)

本笔记介绍机器学习中的 KNN(K-Nearest Neighbors,K 近邻算法)

haopinglianlian的博客 2411

机器学习——K-近邻算法(KNN)

K-近邻算法(K-Nearest Neighbors, 简称 KNN)是一种基于实例的机器学习算法,广泛应用于分类和回归任务。它通过计算数据点之间的相似度(通常是距离度量),然后预测新的数据点的标签或数值。在图像分类任务中,KNN 可以通过计算图像特征向量之间的距离来分类,例如手写数字识别。KNN 可用于垃圾邮件检测,通过比较新邮件和历史邮件的相似性,判断其类别。原则,根据 kkk 个最近邻居的类别进行投票,选出出现最多的类别。基于用户相似度的推荐系统中,KNN 常用于查找兴趣相似的用户群体。

CYTLOVELY的博客 4921

论文研究-车载GPS/DR 组合导航系统的一种DR算法 .pdf

车载GPS/DR 组合导航系统的一种DR算法,赵艳飞,张树君,随着城市交通道路系统的日益复杂,人们对车辆定位精度的要求也越来越高。传统的车辆导航系统采用 GPS(全球卫星导航系统)技术对��

OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类

cv::ml::KNearest 是 OpenCV 机器学习模块中的一部分,它提供了实现 k-近邻算法(k-Nearest Neighbors, KNN)的方法。KNN 是一种简单但功能强大的分类和回归算法,基于实例的学习方法,即根据最近邻的类别来预测新样本的类别。

jndingxin的专栏 774

VirtualBox安装Win10虚拟机超详细教程(附微软官方镜像下载)

本文提供了一份详细的VirtualBox安装Win10虚拟机教程,涵盖从环境准备、工具下载到系统安装与初始配置的全过程。特别推荐使用微软官方镜像下载,确保系统纯净安全。此外,还分享了性能优化技巧和常见问题解决方案,帮助用户高效搭建稳定的Windows测试环境。

weixin_29243279的博客 920

常见消息队列:ActiveMQ、RabbitMQ、RocketMQ、Kafka的区别总结

常见消息队列:ActiveMQ、RabbitMQ、RocketMQ、Kafka的区别。

qq_30713721的博客 3471

Machine Learning机器学习之K近邻算法(K-Nearest Neighbors,KNN)

K近邻算法最早由美国的科学家Thomas Cover 和 Peter Hart 在 1967 年提出,并且在之后的几十年中得到了广泛的研究和应用。KNN 算法是一种基于实例的学习方法,它不像其他算法一样需要对数据进行假设或者参数拟合,而是直接利用已知的数据样本进行预测。KNN 算法是一种简单有效的分类和回归算法,算法的核心思想是“近朱者赤,近墨者黑”,即认为与新样本距离较近的训练样本更可能具有相同的类别或者输出。它的基本假设是“相似的样本在特征空间中具有相似的类别”。

a910247的博客 1024

保姆级教程:用Unidbg搞定阿里系App的x-sign和长x-mini-wua签名(附完整Java代码)

本文详细介绍了如何使用Unidbg框架模拟执行阿里系App的原生库,生成关键的x-sign和x-mini-wua签名参数。通过完整的Java代码示例和实战技巧,帮助开发者高效实现签名算法,适用于安全研究、数据分析和第三方应用开发场景。

weixin_29243279的博客 487

ML-kNN 多标签k近邻算法

学习张敏灵老师的《ML-kNN: a lazy learning approach to multi-label learning》的学习笔记。 传统kNN   k近邻算法(k-Nearest Neighbour, KNN)是机器学习中最基础,最简单的常用算法之一。其思想非常直接:如果一个样本在特征空间中的k个最相似(即特征空间中距离最邻近)的样本中的大多数属于某一个类别,则该

xiaopihaierletian的博客 6058

VMFS数据存储(datastore)丢失后恢复步骤

vmfs datastore恢复步骤

jetliu05的博客 3267

手把手教你学simulink(26.7)--控制算法场景示例:基于模型预测控制(MPC)的智能温室环境控制系统

首先,我们需要将温室环境的动力学模型转换为状态空间形式。假设我们有四个状态变量:温度 TT、湿度 HH、光照强度 II 和二氧化碳浓度 CCO2CCO2​,以及四个控制输入:加热器功率 u1u1​、加湿器加湿量 u2u2​、通风扇风速 u3u3​ 和补光灯光照强度 u4u4​。状态空间模型可以表示为:x(t)=[T(t),H(t),I(t),CCO2(t)]Tx(t)=[T(t),H(t),I(t),CCO2​(t)]T 是状态向量。

MHD0815的博客 401

【机器学习实验一】k近邻算法(KNN)

【机器学习实验一】k近邻算法(KNN) 一、配置环境 ​ 看了很多教程,最终决定安装Anaconda+Pycharm的环境。因为Anaconda中包含了很多库,使用的时候就不用另外手动安装了。而Pycharm作为一款针对Python的编辑器,配置简单,功能强大,使用起来省时省心,对初学者友好,这也是编程验室推荐新手使用Pycharm的原因。 基础安装教程大家可参考:​Python环境的安装(Anaconda+Jupyter notebook+Pycharm) - 知乎 如果大家决定安装Anaconda+Py

qq_47321558的博客 1804

【数字IC基础】DFT(Design For Test)可测性设计

【数字IC基础】DFT(Design For Test)可测性设计

努力,加油每一天鸭~ 3466

ML-kNN 多标签k近邻算法 MLL (转)

http://blog.youkuaiyun.com/Kodoo/article/details/49905877 ML-kNN 多标签k近邻算法 MLL Week 1 ML-kNN 多标签k近邻算法 MLL Week 1 传统kNN多标签kNN   学习张敏灵老师的《ML-kNN: a lazy learning approach

csdn_chuxuezhe的博客 2603

MIPI CPHY学习笔记01:TX物理层一致性测试项解析(LP信令模式)

在手机、平板、智能手表等移动设备中,MIPI C-PHY是负责图像、数据传输的核心接口,它就像设备内部的“高速数据线”,而低功耗(LP)信令模式,是这条“数据线”的“省电模式”,专门用于设备待机、低负载等场景,既要保证信号稳定,又要最大限度降低功耗。物理层一致性测试,就是给这个“省电模式”做的“全面体检”,确保不同厂商的设备能兼容互通。今天,我们就聚焦MIPI C-PHY TX(发射端)的Group 1 LP信令测试,用通俗的语言拆解8个核心测试项,看懂“省电信号”的合格标准。

一只豌豆象的博客 304

基于DINO自监督学习对YOLO11 Backbone进行预训练

这PoolHead将获取前一层的输出并应用卷积,然后应用自适应平均池化以将特征图的空间维度减小为固定且一致的大小(1x1)。这是必需的,因为否则空间维度会根据输入的大小而变化,这将使将 DINO 头部附加到主干变得困难,因为它需要固定的输入大小。在本指南中,我们将介绍如何使用 Lightly 使用 DINO 预训练 YOLO 11主干,以及如何将其重新加载到 Ultralytics 中进行微调。您可以使用不同的大小,例如,640这与 YOLO 中的默认图像大小更一致,但它也会在训练期间消耗更多 VRAM。

如果想成为中心,那么就到中心去吧。 1014
上一篇: org.apache.hive.service.cli.HiveSQLException: Error running query: java.lang.OutOfMemoryError: PermG
下一篇: 机器学习-决策树
warrah
warrah 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄10年 4万+粉丝 526原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warrah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值