1、什么是猫狗大战;

数据集来源于Kaggle(一个为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台),原数据集有12500只猫和12500只狗,分为训练、测试两个部分。

2、什么是Knn算法:
K最近邻(k-Nearest Neighbor,KNN)基本思想:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
    
如果用比较平实的话来说,就是“我们已经存在了一个带标签的数据库,现在输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似(最近邻)的分类标签。”
上图中的对象可以分成两组,蓝色方块和红色三角。每一组也可以称为一个类。我们可以把所有的这些对象看成是一个城镇中房子,而所有的房子分别,,(,)).astype(np.float32)
,,(,)).astype(np.float32)
]
plt.scatter(red[:,],red[:,],,]
plt.scatter(blue[:,],blue[:,],,,,(,)).astype(np.float32)
plt.scatter(newcomer[:,],newcomer[:,],,)
) )]
].reshape(-,).astype(np.float32) :].reshape(-,).astype(np.float32) )
train_labels = np.repeat(k,)[:,np.newaxis]
//直接用训练的结果进行测试
test_labels = train_labels.copy()
)
)
cap = cv2.VideoCapture()
全部代码
) )]
train = np.array(cells).reshape(-,).astype(np.float32)
trainLabel = np.repeat(np.arange(),)
,).astype(np.float32)
train = np.vstack((train,newData))
trainLabel = np.hstack((trainLabel,newDataLabel))
knn.train(train,cv2.ml.ROW_SAMPLE,trainLabel)
)
gray2 = cv2.erode(gray2,)
edges = cv2.absdiff(gray,gray2)
x = cv2.Sobel(edges,cv2.CV_16S,,)
y = cv2.Sobel(edges,cv2.CV_16S,,)
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
dst = cv2.addWeighted(absX,)
ret, ddst = cv2.threshold(dst,thresValue,,cv2.THRESH_BINARY)
im, contours, hierarchy = cv2.findContours(ddst,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
:
rois.append((x,y,w,h))
, cv2.THRESH_BINARY)
th = cv2.resize(th,(,))
out = th.reshape(-,).astype(np.float32)
ret, result, neighbours, dist = knn.findNearest(out, )
][]), th
**n).reshape(-,)
*i:*(i+),:] = images[i]
)
*
height =
videoFrame = cv2.VideoWriter(,(
]
rois, edges = findRoi(frame, )
digits = []
)
digits.append(cv2.resize(th,(,)))
cv2.rectangle(frame, (x,y), (x+w,y+h), (,,), )
cv2.putText(frame, , (,,), )
newEdges = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
newFrame = np.hstack((frame,newEdges))
cv2.imshow() & ,*Nd))
cv2.imshow(
) & : )
])
labels, testData = np.hsplit(test,[])
)
correct = np.count_nonzero(result == labels)
accuracy = correct*
]==)
)
]
all_label_list = temp[:, ]
n_sample = ,))
tra_images.append(image)

tra_labels = all_label_list[:n_train]
tra_labels = [,))
val_images.append(image)

val_labels = all_label_list[n_train:]
val_labels = [,*).astype(np.float32) ,*).astype(np.float32)
)
# Now we check the accuracy of classification
# For that, compare the result with test_labels and check which are wrong
np_val_labels = np.array(val_labels)[:,np.newaxis]
matches = result == np_val_labels
correct = np.count_nonzero(matches)
accuracy = correct*100.0/result.size
print(accuracy)

结果,在1000狗1000猫的数据集上,是55.55的准确率,而在全部的数据集上,是56.2的准确率。证明两点
knn是有一定用途的;但是在不对特征进行详细分析的基础上,其准确率很难得到较大提高。
Knn的例子到此告以段落。

附件列表

py4CV例子1猫狗大战和Knn算法的更多相关文章

  1. python机器学习一:KNN算法实现

    所谓的KNN算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个 ...

  2. 数据挖掘之分类算法---knn算法(有matlab例子)

    knn算法(k-Nearest Neighbor algorithm).是一种经典的分类算法.注意,不是聚类算法.所以这种分类算法 必然包括了训练过程. 然而和一般性的分类算法不同,knn算法是一种懒 ...

  3. 什么是 kNN 算法?

    学习 machine learning 的最低要求是什么?  我发觉要求可以很低,甚至初中程度已经可以.  首先要学习一点 Python 编程,譬如这两本小孩子用的书:[1][2]便可.   数学方面 ...

  4. KNN算法与Kd树

    最近邻法和k-近邻法 下面图片中只有三种豆,有三个豆是未知的种类,如何判定他们的种类? 提供一种思路,即:未知的豆离哪种豆最近就认为未知豆和该豆是同一种类.由此,我们引出最近邻算法的定义:为了判定未知 ...

  5. Python 手写数字识别-knn算法应用

    在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点 ...

  6. KNN算法[分类算法]

    kNN(k-近邻)分类算法的实现 (1) 简介: (2)算法描述: (3) <?php /* *KNN K-近邻方法(分类算法的实现) */ /* *把.txt中的内容读到数组中保存,$file ...

  7. Kmeans算法与KNN算法的区别

    最近研究数据挖掘的相关知识,总是搞混一些算法之间的关联,俗话说好记性不如烂笔头,还是记下了以备不时之需. 首先明确一点KNN与Kmeans的算法的区别: 1.KNN算法是分类算法,分类算法肯定是需要有 ...

  8. 机器学习--kNN算法识别手写字母

    本文主要是用kNN算法对字母图片进行特征提取,分类识别.内容如下: kNN算法及相关Python模块介绍 对字母图片进行特征提取 kNN算法实现 kNN算法分析 一.kNN算法介绍 K近邻(kNN,k ...

  9. 深入浅出KNN算法(二) sklearn KNN实践

    姊妹篇: 深入浅出KNN算法(一) 原理介绍 上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法. 一.Skelarn KNN参数概述 要使用sklearnK ...

随机推荐

  1. cocos2d JS-(JavaScript) cc.each循环遍历对象

    有了它,妈妈再也不用担心我的数组会越界啦!! each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSO ...

  2. UGUI之Slider使用,制作血条

    用Slider来控制Cube旋转 Slider是滑动条.

  3. HTTP请求解析过程 (简单概括)

    1.域名解析 用户输入网址,由域名系统DNS解析输入的网址: 2.TCP的3次握手 通过域名解析出的IP地址来向web服务器发起TCP连接请求,如果3次握手通过,则与web服务端建立了可靠的连接: 3 ...

  4. 实时计算DStream下求平均值(reduceByKey or combineByKey)

    对NC市的卡口数据进行分析,大概所有卡口每15秒接入的有效数据在3000条左右,现在产品经理要求对这些数据进行拥堵分析,通过两个卡口之间的车辆行驶时长来判断道路的拥堵情况.具体算法不展开.其中我需要做 ...

  5. java资料共享

    1.javascript视频教程 链接: http://pan.baidu.com/s/1gd57FVH 密码: d9ei 2.JPA视频教程 链接: http://pan.baidu.com/s/1 ...

  6. JAVA多线程常用例子

    详情见该页面ttps://www.cnblogs.com/pureEve/p/6524366.html

  7. 第二章 CSS基本属性

    1.CSS:层叠样式表 一个元素允许同时应用多种样式,页面元素最终的样式即为多种样式的叠加效果. 2.CSS样式优先级 行内样式表>内部样式表>外部样式表[就近原则] id选择器>类 ...

  8. PHP 中最全的设计模式(23种)

    https://my.oschina.net/botkenni/blog/1603660 PHP 中最全的设计模式(23种) 原 botkenni 发布于 01/07 21:22 字数 8726 阅读 ...

  9. uvm设计分析——factory

    uvm的factory机制,通过实例一个static类型default factory,并且通过宏将所有例化extend出来的object,component register到该factory的内部 ...

  10. 学习笔记<1>技术体系结构

    Android的系统架构采用了分层架构的思想,如上图所示.从上层到底层共包括四层,分别是   1.应用程序程序层   2.应用框架层   3.系统库和Android运行时 4.Linux内核.   每 ...