knn

【深度之眼cs231n第七期】笔记(二)

做~自己de王妃 提交于 2020-01-28 17:06:52
目录 数据驱动方法 语义鸿沟 数据驱动方法 k最临近算法(KNN) 距离度量方法 L1距离 L2距离 K的选择 超参数 KNN的问题 测试时非常慢 距离度量的问题 维度灾难 总结 数据驱动方法 语义鸿沟 对于一幅图像,人眼看到的是猫,计算机看到的是数字矩阵。猫的标签和数字矩阵间的差距就是语义鸿沟。 如何把标签和数字矩阵联系起来(事实上就是图片分类)对计算机来说是一个很难的问题。 问题1:如何把它们联系起来? 问题2:当我们移动相机,从另一个方向拍摄猫的照片时,图像上的数字几乎都改变了,但是它还是表示同一只猫。如何才能把变化后的图像也认成猫? 光线改变时,它还是猫 这些不同姿势的还是猫 我们没有直接的方法识别一只猫。一个较直接的想法就是,先识别出耳朵,眼睛等,然后写一些方法来识别它。比如耳朵、眼睛等符合一定条件的就是猫。 但这并不是一个很好的方法。首先,这种算法很容易出错(看上面神奇的姿势);其次,识别其他的东西又需要设计新的算法。 所以我们考虑用数据驱动的方法。 数据驱动方法 首先获取带标签的数据集,然后训练分类器,得出一个模型,模型已经总结出识别的要素。最后用模型识别新的图片。 函数不再是只有一个(输入图片,识别它是否是猫),而是有两个,一个训练函数(用数据集来训练模型),一个预测函数(使用模型来识别这是不是一只猫)。 k最临近算法(KNN)

机器学习实战学习笔记(二)-KNN算法(2)-使用KNN算法进行手写数字的识别

会有一股神秘感。 提交于 2020-01-27 16:10:26
机器学习实战学习笔记(二)-KNN算法(2)-使用KNN算法进行手写数字的识别 概要 目的 构造使用k-近邻分类器的手写识别系统。为了简单起见,这里构造只能识别数字0到9分类器 数据格式 文件名包含了标签 内部是图片转化成的txt格式 步骤 图像转化为测试向量 必须将图像格式化处理为一个向量。 我们将把一个32 x32的二进制图像矩阵转换为1 x 1024的向量,这样前两节使用的分类器就可以处理数字图像信息了. # 打开文件 def imgvector(filename): returnVect=np.zeros((1,1024)) fr=open(filename,'r',encoding='utf-8') for i in range(32): lineStr=fr.readline() for j in range(32): returnVect[0,32*i+j]=int(lineStr[j]) return returnVect 测试算法 1.获取目录的内容 2.读取目录的文件名因为它包含了分类的标签 3.读取每张图片(txt文档)的向量 4.读取测试集,进行训练,输出结果 5.统计最终结果 # 手写测试 def handwritingClassTest(): hwLabels=[] trainingFileList=listdir('KNN/testDigits') m

KNN算法

放肆的年华 提交于 2020-01-27 01:33:29
KNN算法 问题提出 依旧是分类问题,现在有了一数据集,数据集中的每个数据都有一个标签,那么多对于一个新的数据,他应该是属于哪个集合,也就是说他的标签应该是什么? 例子 比如当前这个图,红色的点具有标签A,蓝色的点具有标签B,现在来了一个新的点黑色点,那么这个黑色的点应该属于那一类? 直观的来看,黑色的点应该是属于红色标记的点。也就是标签应该是A,因为一个很直观的感受就是它距离红色的点近,根据物以类聚,人以群分的概念它应该是红色点集合内的。 算法的提出 为了解决上述分类的问题,提出了KNN(k-NearestNeighbor)算法,也就是k近邻算法。算法的核心思想就是找距离当前点最近的k个点,这个距离可以有多种定义,一般都是在n维空间的欧几里得距离,当然也可以被定义为其他形式下的距离。然后统计这k个点里面哪种标记最多,就把该点归类为最多的标记点 算法实现步骤 根据上面的描述,首先第一步就是要确定k,确定选取多少个点来做参考。那么这个k最好不要是标记种类数的倍数。什么意思?举个例子,就像刚才上面的那个图,k最好选取奇数,因为当前数据集中存在两个标签,如果k选取偶数,那么一旦发现计算得到的k个数据中两种标签数量相等,那么就很难说把这个点分给谁了。确定k之后,就计算每个点到该该点的距离,然后排序,统计这k个中标签数量最多的是哪一个。这样就完成了 代码实现 """ x_test:测试数据

Use KDTree/KNN Return Closest Neighbors

允我心安 提交于 2020-01-25 07:56:06
问题 I have two python pandas dataframes. One contains all NFL Quarterbacks' College Football statistics since 2007 and a label on the type of player they are (Elite, Average, Below Average). The other dataframe contains all of the college football qbs' data from this season along with a prediction label. I want to run some sort of analysis to determine the two closest NFL comparisons for every college football qb based on their labels. I'd like to add to two comparable qbs as two new columns to

机器学习笔记--KNN算法1

耗尽温柔 提交于 2020-01-24 20:30:29
前言 Hello ,everyone. 我是小花。大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来。 一 KNN算法简介 KNN(k-nearest neighbor的缩写)又叫最近邻算法。是1968年由Cover和Hart提出的一种用于分类和回归的无母数统计方法。什么叫无母统计方法呢,这里作个补充:无母统计方法又称非参数统计学,是统计学的一个分支,适用于母群体情况未明,小样本,母群体分布不为常态也不易转换为常态。特点在于尽量减少或不修改其建立之模型,比较适合处理样本不大的数据。(我怎么感觉这么像韦小宝啊。。。哈哈,有点扯远了,你懂得)。 KNN的工作原理是:存在一个样本数据集合,也称为训练样本集,而且样本集中每个数据都存在标签,也就是我们知道样本集中每一个数据与所属分类对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。怎样理解这句话呢,现在我们想,假如广场上有很多狗,这些狗都是一条母狗带一群小狗,各个品种的都有。每条狗都都知道自己的母亲是谁。但是有一条狗喝了不下心忘情水,不知道自己妈妈在哪了,如何找他的母亲呢。那我们就把这条狗的特征与那些小狗的特征进行对比。然后取最相似的狗

R KNN imputation - function returning erroneous results & missing help page

瘦欲@ 提交于 2020-01-23 19:45:12
问题 I'm trying to impute some missing values in R using library(imputation) and kNNImpute() . The input data frame is 44 rows of 13 variables. There are 30 complete observations and 14 observations with missing values in 2 columns. The code is saying it's imputing all the missing values; however, it's imputing the last 4 values as 0 . From my reading of the code, this appears to be a flaw based on using 0 as a default for errors. My code: # impute data library(imputation) knn_data <- kNNImpute(x,

机器学习实战学习笔记(二)-KNN算法(2)-KNN算法改进约会网站的配对效果

老子叫甜甜 提交于 2020-01-22 23:14:47
机器学习实战学习笔记(二)-KNN算法(2)-KNN算法改进约会网站的配对效果 情景概要 某个妹子交往过三种类型的人: 不喜欢的人 魅力一般的人. 极具魅力的人 这个妹子想要知道自己到底喜欢哪一类男人,于是提供了她收集的约会数据(1000行,吐槽一波,手动狗头),并希望能创建一种分类机制来帮她完成这件事情。 数据表格如下: 实际数据集是这样的: datingTestSet.txt datingTestSet2.txt 导入数据 # 判断分类 def isWhichClass(className): if className=='didntLike': return 1 elif className=='smallDoses': return 2 elif className=='largeDoses': return 3 #加载数据 def file2matrix(filename): fr=open(filename) arrayOLines=fr.readlines() numbersOfLines=len(arrayOLines)#获取一共有多少行 returnMat=np.zeros((numbersOfLines,3))#创建n行3列的全零矩阵 classLabelVector=[]#标签向量 index=0 for line in arrayOLines: line

监督学习

早过忘川 提交于 2020-01-22 21:08:15
1 监督学习   利用一组带标签的数据, 学习 从输入到输出的映射 , 然后将这种映射关系应用到未知数据, 达到 分类 或者 回归 的目的   (1) 分类: 当输出是离散的, 学习任务为分类任务          输入: 一组有标签的训练数据(也叫观察和评估), 标签 表明了这些数据(观察)的所属类别, 图中"猫"和"狗"就是标签     输出: 分类模型根据这些训练数据, 训练自己的模型参数, 学习出一个适合这组数据的分类器, 当有新数据(非训练数据)需要进行类别判断, 就可以将这组数据作为输入送给学习好的 分类器 进行判断(得到标签)     训练集: 训练模型已经标注的数据, 用来建立模型发现规律     测试集: 已标注的数据, 只不过把标注隐藏了, 再送给训练好的模型, 比对结果与原来的标注, 评判该模型的学习能力       一般来说, 获得了一组标注好的数据, 70%当做训练集, 30%当做测试集 , 另外还有交叉验证法, 自助法来评估学习模型     评价标准       1) 准确率         所有预测对的         把正类预测成正类(TP)         把负类预测成负类(TN)         准确率 = (TP+TN)/总数量       2) 精确率         以二分类为例         预测为正的样本是真的正样本        

KNN——图像分类

柔情痞子 提交于 2020-01-20 12:27:17
内容参考自: https://zhuanlan.zhihu.com/p/20894041?refer=intelligentunit 用像素点的rgb值来判断图片的分类准确率并不高,但是作为一个练习knn的题目,还是挺不错的。 1. CIFAR-10 CIFAR-10 是一个图像分类数据集。数据集包含60000张32*32像素的小图片,每张图片都有一个类别标注(总共有10类),分成了50000张的训练集和10000张的测试集。 然后下载后得到的并不是实实在在的图片(不然60000张有点可怕...),而是序列化之后的,需要我们用代码来打开来获得图片的rgb值。 1 import pickle 2 3 def unpickle(file): 4 with open(file, 'rb') as f: 5 dict = pickle.load(f, encoding='latin1') 6 return dict 由此得到的是一个字典,有data和labels两个值。 data: 一个10000*3072的numpy数组,这个数组的每一行存储了32*32大小的彩色图像。前1024个数是red,然后分别是green,blue。 labels: 一个范围在0-9的含有10000个数的一维数组。第i个数就是第i个图像的类标。 2. 基于曼哈顿距离的1NN分类 这个训练文件很大

监督学习算法1: K-近邻(KNN)

自古美人都是妖i 提交于 2020-01-18 05:28:58
先解释几个概念 机器学习主要分为:监督学习和无监督学习。 · 监督学习: 从已知类别的数据集中学习出一个函数,这个函数可以对新的数据集进行预测或分类,数据集包括特征值和目标值,即有标准答案;常见算法类型可以分为:分类和回归。 分类问题常见算法:K-近邻(KNN)、朴素贝叶斯、决策树、随机森林、逻辑回归、神经网络 回归常用于预测,比如房价,常见算法:线性回归、岭回归 · 无监督学习: 与监督学习的主要区别是,数据集中没有人为标注的目标值,即没有标准答案;常见算法有:聚类,生成对抗网络。 K-近邻算法 这是机器学习中最简单的一个算法,先看定义 定义:如果一个样本与特征空间中的K个样本 距离 最近,这K个样本中的大多数属于A类别,那么该样本也属于A类别。 通俗说就是通过你最近的K个邻居来求出你的类别; 比如现在要求你所在的区域,A在朝阳区,B在海淀区,C在海淀区,D在房山区,你与ABC的距离分别是:20,28,23,35;K值取3,那么这三个离你最近的邻居是A、B、C,这三个中有两个属于海淀区,按照K-近邻算法,你所在的区域就是海淀区;如果K取1,就是朝阳区; 由此也说明了K近邻算法的结果很大程度上受K取值的影响,通常K值取不大于20的整数。 K-近邻中的距离如何计算? 这里的距离一般使用欧式距离,公式如下: 比如有两个样本:A (a1,a2,a3) ,B (b1,b2,b3)