KNN算法:

目的是分类,具体过程为,先训练,这个训练我估计只是对训练数据进行一个存储,knn测试的过程是根据测试样例找出与这个样例的距离最近的k个点,看这k个点中哪个分类所占的比例比较多,那么这个样例就属于这个分类。所以我们要做的就是确定这个k,这个k是个超参数,所以需要手动测试。

具体使用方式为

1 knn = cv.KNearest()
2
3 knn.train(train_datas,train_labels)
4
5 ret,result,neighbours,dist = knn.find_nearest(test,k=5)

SVM算法:

支持向量机的目的是拟合出一条决策边界,使得边界两端的数据可以被分开从而得到分类的目的,训练的目的就是得到支持向量,支持向量是用来划定边界的,具体我也讲不清楚,但大致是理解的。

使用方法大致如下

 1 svm_params = dict( kernel_type = cv2.SVM_LINEAR,
 2
 3                     svm_type = cv2.SVM_C_SVC,
 4
 5                     C=2.67, gamma=5.383 )
 6
 7 svm = cv.SVM()
 8
 9 svm.train(train_data,responses,svm_params)
10
11 svm.save("svm_data.dat")
12
13 result = svm.predict_all(test)

要提到的就是这里kernel_type、svm_type、C、gamma

C: 目标函数的惩罚系数C,用来平衡分类间隔margin和错分样本的,default C = 1.0;

kernel:参数选择有RBF, Linear, Poly, Sigmoid, 默认的是”RBF”;

gamma:核函数的系数(‘Poly’, ‘RBF’ and ‘Sigmoid’), 默认是gamma = 1 / n_features;

svm_type 这里用的SVC就是分类

K-Means算法:

假设你要将数据分为2组,那么算法会随机选择两个中心C1和C2,计算每个点到两个中心的距离,如果更接近C1,就标记为0,接近C2,就标记为1,如果更多分组就标记为2、3等等,然后计算所有被标记为0的向量的平均值,用这个平均值作为新的中心,同理标记为1的也是,如此往复,直到两个中心点收敛到固定点,或者我们设定最大迭代次数或达到特定的精度停止,最终会让这些数据点与其对应的之心之间的距离之和最小。

下面是具体使用方法

1 criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER,10,1.0)
2 flags = cv.KMEANS_RANDOM_CENTERS
3 compactness,labels,centers = cv.kmeans(z,2,None,criteria,10,flags)

输入的参数依此为

1. samples   np.float32类型的训练数据

2. nclusters(K) 需要分类的数目

3. critria 满足终止的条件,满足这个条件,就停止迭代

第一个参数

cv.TERM_CRITERIA_EPS - 达到精度epsilon就停止迭代

cv.TERM_CRITERIA_MAX_ITER - 达到最大迭代次数max_iter就停止迭代

cv.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER - 满足上述任何条件停止迭代

第二个参数

max_iter - 最大迭代次数

第三个参数

epsilon - 要求的精度

4. attempts:  使用flag指定的算法初始执行算法的次数,估计是通过多次初始化得到一个准确值。

5. flags : 指定初始的中心点的方式,通常又两种方式,cv.KMEANS_PP_CENTERS和cv.KMEANS_RANDOM_CENTERS

返回的参数为

1.compactness : 每个点到其相应中心的平方距离之和

2. labels :  标签数组,其中每个元素标记为0、1、2等等

3. centers :  各组集群的中心

最新文章

  1. 数-模(D/A)转换器
  2. safari浏览器在window下 打开控制台
  3. service和serviceImpl的选择
  4. 【初级】linux pwd 命令详解及使用方法实战
  5. 修改 Docker 默认网桥地址
  6. 使用Html5+C#+微信 开发移动端游戏详细教程 :(三)使用html5引擎搭建游戏框架
  7. [LintCode] Continuous Subarray Sum 连续子数组之和
  8. 3.22学习理解httpContext与where 1=1
  9. KafkaClient接口与Kafka处理请求的若干特性
  10. 将序列设置为字段的默认值 - oracle
  11. ECNU1104-BFS
  12. 【转】virtualbox安装增强包及配置共享文件夹
  13. line-height具体解释
  14. (简单) POJ 1062 昂贵的聘礼,Dijkstra。
  15. Java 数组扩容
  16. [运维工具]linux下远程桌面rdesktop安装和使用
  17. hbase 存储结构和原理
  18. 软件测试工程师这样面试,拿到offer的几率是80%
  19. 在线版区间众数 hzw的代码。。
  20. FastJson 数组、List、Set、Map基本序列化与日期格式化

热门文章

  1. 过滤asp.net页面每次发出请求之前访问
  2. tcpkill工作原理分析
  3. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)【A,B,C】
  4. Object Detection(RCNN, SPPNet, Fast RCNN, Faster RCNN, YOLO v1)
  5. eclipse for php 开发环境配置
  6. C# 数组之int[]
  7. [HNOI2017]抛硬币
  8. PHPstudy安装redis扩展
  9. Linux中/etc/passwd 和 /etc/shadows 详解
  10. ES6:string.raw浅析