logistic regression,注意这个单词logistic ,并不是逻辑(logic)的意思,音译过来应该是逻辑斯谛回归,或者直接叫logistic回归,并不是什么逻辑回归。大部分人都叫成逻辑回归,无奈啊。。。虽然这个算法中有回归二字,但它做的事情却并不是回归,而是分类。这个算法只能解决简单的线性二分类,在众多的机器学习分类算法中并不出众,但它能被改进为多分类,并换了另外一个名字softmax, 这可是深度学习中响当当的分类算法。因此,logistic回归瞬间也变得高大上起来。

本文用它来进行手写数字分类。在opencv3.0中提供了一个xml文件,里面存放了40个样本,分别是20个数字0的手写体和20个数字1的手写体。本来每个数字的手写体是一张28*28的小图片,但opencv把它reshape了一下,变成了1*784 的向量,然后放在xml文件中。这个文件的位置:

\opencv\sources\samples\data\data01.xml

代码:

// face_detect.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "opencv2\opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
using namespace cv::ml;//将向量转化成图片矩阵并显示
void showImage(const Mat &data, int columns, const String &name)
{Mat bigImage;for (int i = 0; i < data.rows; ++i){bigImage.push_back(data.row(i).reshape(0, columns));}imshow(name, bigImage.t());
}//计算分类精度
float calculateAccuracyPercent(const Mat &original, const Mat &predicted)
{return 100 * (float)countNonZero(original == predicted) / predicted.rows;
}int main()
{const String filename = "E:\\opencv\\opencv\\sources\\samples\\data\\data01.xml";Mat data, labels;  //训练数据及对应标注
cout << "加载数据..." << endl;FileStorage f;if (f.open(filename, FileStorage::READ)){f["datamat"] >> data;f["labelsmat"] >> labels;f.release();}else{cerr << "文件无法打开: " << filename << endl;return 1;}data.convertTo(data, CV_32F);  //转换成float型
    labels.convertTo(labels, CV_32F);cout << "读取了 " << data.rows << "行数据" << endl;Mat data_train, data_test;Mat labels_train, labels_test;//将加载进来的数据均分成两部分,一部分用于训练,一部分用于测试for (int i = 0; i < data.rows; i++){if (i % 2 == 0){data_train.push_back(data.row(i));labels_train.push_back(labels.row(i));}else{data_test.push_back(data.row(i));labels_test.push_back(labels.row(i));}}cout << "训练数据: " << data_train.rows << "行" << endl;cout<<"测试数据:"<< data_test.rows <<"行"<< endl;// 显示样本图片showImage(data_train, 28, "train data");showImage(data_test, 28, "test data");//创建分类器并设置参数Ptr<LogisticRegression> lr1 = LogisticRegression::create();  lr1->setLearningRate(0.001);lr1->setIterations(10);lr1->setRegularization(LogisticRegression::REG_L2);lr1->setTrainMethod(LogisticRegression::BATCH);lr1->setMiniBatchSize(1);//训练分类器lr1->train(data_train, ROW_SAMPLE, labels_train);Mat responses;//预测lr1->predict(data_test, responses);// 展示预测结果cout << "原始数据 vs 预测数据:" << endl;labels_test.convertTo(labels_test, CV_32S);  //转换为整型cout << labels_test.t() << endl;cout << responses.t() << endl;cout << "accuracy: " << calculateAccuracyPercent(labels_test, responses) << "%" << endl;waitKey(0);return 0;
}

从结果显示可以看出,待测数据(test data)是20个,算法分对了19个,精度为95%.

在opencv3中实现机器学习之:利用逻辑斯谛回归(logistic regression)分类相关推荐

  1. 在opencv3中的机器学习算法

    在opencv3.0中,提供了一个ml.cpp的文件,这里面全是机器学习的算法,共提供了这么几种: 1.正态贝叶斯:normal Bayessian classifier    我已在另外一篇博文中介 ...

  2. 【机器学习】逻辑回归(Logistic Regression)

    注:最近开始学习<人工智能>选修课,老师提纲挈领的介绍了一番,听完课只了解了个大概,剩下的细节只能自己继续摸索. 从本质上讲:机器学习就是一个模型对外界的刺激(训练样本)做出反应,趋利避害 ...

  3. 吴恩达机器学习 4.逻辑回归(Logistic Regression)

    1.分类问题 在分类问题中,你要预测的变量yyy是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法.在分类问题中,我们尝 ...

  4. 机器学习算法(1)——Logistic Regression

    1.二项逻辑回归模型 二项回归模型是一种二分类模型,由条件概率分布 P(Y|X) 表示,形式为参数化的逻辑分布.这里的随机变量 X 取值为实数,随机变量 Y 取值为 1或0 ,通过监督学习的方法来估计 ...

  5. 吴恩达机器学习 8.6 逻辑回归(Logistic Regression)

    6.1 分类问题 参考文档: 6 - 1 - Classification (8 min).mkv 在这个以及接下来的几个视频中,开始介绍分类问题. 在分类问题中,你要预测的变量 $y$ 是离散的值, ...

  6. logistic回归 如何_第七章:利用Python实现Logistic回归分类模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

  7. Python机器学习算法 — 逻辑回归(Logistic Regression)

    逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...

  8. 林轩田机器学习技法第五讲-Kernel Logistic Regression

    上一讲学习了Soft-Margin Support Vector Machine,至此基本的支持向量机就介绍完了.那么其中涉及的思想能否和其他的算法结合起来呢?这讲就看一下如何将核技巧和之前学习的Lo ...

  9. 吴恩达机器学习练习2:Regularized logistic regression

    本小节主要练习正则化logistic分类. 1.原始数据的可视化 data = load('ex2data2.txt');%将数据导入data中 X = data(:, [1, 2]); y = da ...

最新文章

  1. Ouath 验证过程
  2. mdcsoft服务器网络安全解决方案-SQL注入解决
  3. c语言程序构造数据类型问题,C语言程序设计课程课件之第四章简单构造数据类型.ppt...
  4. 数据结构之折半插入排序图文详解及代码(C++实现)
  5. fclose会写入硬盘吗 linux_Qt linux文件同步写入
  6. 2个oracle文件导入报错处理
  7. 通过管道进行线程间通信
  8. R语言编程基础(2)
  9. Web前端开发最佳实践(3):前端代码和资源的压缩与合并
  10. Redis(一)入门
  11. 微信小程序商城源码C# 、Asp.Net, Mvc +sqlserver 2012+后台 微信小程序源码C#
  12. JSP的九大内置对象和四大作用域对象
  13. cmd 打开资源监视器
  14. java struts2教程_Struts2教程
  15. 读《显微镜下的大明》马伯庸---笔记
  16. 多家软件厂商卷入360与腾讯之争
  17. 什么是bcd码数据传输通讯_数据传输 数据通讯
  18. Codeforces1457 C. Bouncing Ball(思维+dp)
  19. WorldPress出现Briefly unavailable for scheduled maintenance. Check back in a minute.的解决方法
  20. 利用Java求解“鸡兔同笼问题”:鸡和兔在一个笼子里,共有腿100条,头40个,问鸡兔各有几只?

热门文章

  1. The AC power adapter wattage and type cannot be determined. 解决方案
  2. Hystrix-异常处理
  3. vs关于“当前不会命中断点 还没有为该文档加载任何符号”的解决方法
  4. 在windows下安装node-sass失败,提示\node-sass: Command failed,解决方案
  5. tomcat端口被占用问题完美解决方案!
  6. 【jackson 异常】com.fasterxml.jackson.databind.JsonMappingException异常处理
  7. 在UITableView中使用自动布局以获取动态单元格布局和可变的行高
  8. springboot 定时器_springBoot的定时器应该这样写
  9. 华中科技大学计算机暑期夏令营,2019年华中科技大学计算机专业夏令营
  10. html5a链接_html 超链接(a)详细讲解