机器学习源码分析-逻辑回归

现在网上已经有很多高质量的关于机器学习算法理论的文章,但只有理论部分很难让人理解透彻,软件人对代码更熟悉,接下来我就从源码的角度去介绍各种机器学习算法,理论部分这里不做重点介绍,今天来分析一下逻辑回归。
逻辑回归是用于解决二分类问题的机器学习方法,其数学表达式如下:
图片

图片

其中x是输入,可以是标量也可能是多个维度的向量,w和b是我们要求的参数,其中g称为激活函数,能将输入映射到0-1范围内,表示样本属于正例概率。
图片

图片

如上图,对于输入特征是二维的,逻辑回归就是找到正负样本的分解线,特征维度超过2维时,就是找到一个分界面,同理,一维数据,就是找一个分界点。
源码分析,那首先就要找到实现算法的开源库,一提到机器学习库,应用最为广泛的莫过于scikit-learn,其实OpenCV中的ml模块也提供了对于机器学习算法的实现,所有机器学习库都是依据相同的数学原理来实现的,只是使用的语言不同而已,为了调试方便,我最终决定使用OpenCV。
接下来我们看OpenCV中一个逻辑回归的例子:手写数字分类
训练数据:
训练数据包含20幅只包含0或者1手写数字的图像,图像大小2828,展开成向量的形式:1784,逻辑回归分类器就是在784维度空间找一个分界面将数字0和数字1尽量分开,而这个分界面是由w和b来确定,输出大于一定阈值(默认0.5)代表该图像上的数字是1,否则代表该图像上的数字是0。
该训练数据保存成了xml格式:
图像:
在这里插入图片描述

标签:
图片

通过Opencv FileStorage类将图像和标签读取到Mat中。

Mat data, labels;
FileStorage f;
if(f.open(filename, FileStorage::READ))
{
   
f["datamat"] >> data;
f["labelsmat"] >> labels;
f.release();
}

读取完成后data是20784维,labels是201维。
将训练数据20幅小图像打印到一个大图像上:
图片

设置参数:

Ptr<LogisticRegression> lr1 = LogisticRegression::create();
lr1->setLearningRate(0.001);学习率
lr1->setIterations(10);训练迭代轮数
lr1->setRegularization(LogisticRegression::REG_L2);L2正则化
lr1->setTrainMethod(LogisticRegression::BATCH);批梯度下降

训练:
lr1->train(data_train, ROW_SAMPLE, labels_train);
接下来我们看看训练过程中都干了什么:
根据逻辑回归的数学表达式,前向计算第一步就是要计算上面的公式,输入x是784维向量,所以w也是784维, b是一维标量,通常为了计算效率,可以将上面的公式转换成矩阵的运算:
图片

上面我们设置的训练方法为BATCH方式,也就是说每一次梯度更新要用到所有的训练数据,那所有训练数据作为输入转换成矩阵的运算表达式为:
图片

其中X矩阵水平方向为特征维度,垂直方向为训练数据个数,矩阵乘法的输出120,代表20个训练数据wx+b的结果,Opencv中代码如下:
将输入矩阵加一列,且值都是1,也就是构造上图右边的20
785维的X矩阵。

Mat data_t;
hconcat( cv::Mat::ones( _data_i.rows, 1, CV_32F ), _data_i, data_t );
接下来构造上图左边w和b组成的矩阵,1*785维:
Mat thetas;
Mat init_theta = Mat::zeros(data_t.cols
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习涵盖了许多不同的算法,用于解决各种类型的问题。以下是一些常见的机器学习算法: 监督学习算法:线性回归(Linear Regression)逻辑回归(Logistic Regression)决策树(Decision Trees)随机森林(Random Forests)支持向量机(Support Vector Machines)朴素贝叶斯(Naive Bayes)K近邻算法(K-Nearest Neighbors)深度学习(Deep Learning)算法,如神经网络(Neural Networks) 无监督学习算法:K均值聚类(K-Means Clustering)层次聚类(Hierarchical Clustering)高斯混合模型(Gaussian Mixture Models)主成分分析(Principal Component Analysis,PCA)关联规则学习(Association Rule Learning) 这只是机器学习领域中的一小部分算法,还有许多其他的算法和技术。根据问题的性质和数据的特点,选择适合的算法是非常重要的。不同的算法有不同的假设和适用场景,因此在学习和应用机器学习算法时,需要综合考虑问题的需求和数据的特点。机器学习(Machine learning)是人工智能的子集,是实现人工智能的一种途径,但并不是唯一的途径。它是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的学科。大概在上世纪80年开始蓬勃发展,诞生了一大批数学统计相关的机器学习模型。 深度学习(Deep learning)是机器学习的子集,灵感来自人脑,由人工神经网络(ANN)组成,它模仿人脑中存在的相似结构。在深度学习中,学习是通过相互关联的「神经元」的一个深层的、多层的「网络」来进行的。「深度」一词通常指的是神经网络中隐藏层的数量。大概在2012年以后爆炸式增长,广泛应用在很多的场景中。机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构,使之不断改善自身。 从实践的意义上来说,机器学习是在大数据的支撑下,通过各种算法让机器对数据进行深层次的统计分析以进行「自学」,使得人工智能系统获得了归纳推理和决策能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值