机器学习——线性回归
机器学习的一些基本概念,模型、目标函数、优化算法等等,这些概念对于机器学习算法来说都是通用的套路。
基本形式
有一个实例x有d个属性
一般转换成向量的形式:
其中w和b学的之后,模型就确定了。模型是根据输入x预测输出y的算法。
许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。
监督学习和无监督学习
有监督学习:为了训练一个模型,我们要提供一堆训练样本:每个训练样本既包括输入特征x,也包括对应的输出y(标记),让模型既看到输入特征x,也看到对应标记y。当模型看到足够多的样本之后,它就能总结出其中的一些规律。然后,就可以预测那些它没看过的输入所对应的答案了。
无监督学习:这种方法的训练样本只知道输入特征x,没有输出标记。
线性回归
“线性回归”得到的结果是一个预测实值输出标记值
多个数据所对应的一个属性
其中x表示对应数据的属性,w表示数据属性x的权值。
均方误差对应了常用的欧几里得距离,基于均方误差最小化来进行模型求解的方法称为“最小二乘法”,在线性回归中,最小二乘法就是试图找到一条直线,使得所有样本到直线的距离之和最小。
求解w,b使得
令上面两个式子分别等于0,两个方程两个未知解,得到w和b的最优解:
其中
多个数据所对应的多个属性
“多元线性回归”线性模型为:
整理一下:
真实值和预测值之间肯定会有误差
即
拟然函数:
对数拟然:
目标:让拟然函数(对数变换后的也一样)越大越好,也即最后一项的后半部分最小,同样利用最小二乘法来对w和b进行“参数估计”
求偏导:
令导数等于0,求得属性们的权重
我们最后求得的多元线性模型为:
假如输出标记y是成指数增长的,那么我们的回归模型就应该写成:
还可通过线性单元的梯度下降算法求最小值。
更一般的我们考虑单调可微函数g(·),令
对数几率回归(逻辑回归)
如果我们要用线性模型做分类任务,例如:二分类,那么输出标记就为
即预测值z>0判别为正例,z<0判别为反例,临界值则任意的判别。所以我们找到了对数几率函数来近似单位阶跃函数,
对数几率函数是一种“Sigmoid函数”,将Sigmoid函数作为广义线性模型中的g(·)带进去,得到逻辑回归模型:
我们对上面式子进行化简:
优点:
1、直接对分类可能性进行建模,无需事先假设数据分布,避免了假设分布不准确带来的问题。
2、不仅预测了“类别”,还得到了近似概率预测。
3、对数函数是任意阶可导的凸函数,有很好的新学性质。
接下来我们来求w和b,将y视为类后验概率估计p(y=1|x),则:
显然有:
整合一下:
拟然函数:
对数拟然:
此时应用梯度上升求最大值,引用
参数更新:
线性判别分析
Linear Discriminant Analysis简称LDA,是一种线性学习方法,
思想:先给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能的接近、异类的投影点尽可能远离;然后在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。
目的:多分类LDA将样本投影到N-1维空间,N-1通常远小于数据原有的属性数。所以可以通过这个投影来减小样本点的维数,且投影过程使用了类别信息,因此LDA常被称为一种经典的监督降维技术。
具体算法:请参考周志华《西瓜书》
多分类学习
有些二分类问题可以直接推广到多分类,
实现:考虑N个类别
关键技术:“对多分类任务进行拆分”;“如何对多分类器进行集成”
拆分策略:一对一(OvO)一对其余(OvM)多对多(MvM)
具体算法:请参考周志华《西瓜书》
类别不均衡学习
当不同类别的数目差别很大时,例如:998个正例,2个反例。那么分类器只需返回一个永远将新样本预测为反例的学习器,就能达到99.8%的胜率。然而这样的分类器没有任何价值。
类别不平衡是指分类任务中不同类别的训练样例数目差别很大。
解决办法请参考周志华《西瓜书》
python实现线性回归
评估模型
用误差表示实际值与模型预测值之间的差值
衡量回归模型拟合效果的有以下几个重要指标。
平均值误差(mean absolute error):绝对误差平均值
均方误差(mean squared error):误差的平方的平均值
中位数误差(median absolute error):给定数据集中数据点的误差的中位数,可以排除异常值的干扰,测试数据集中的单个坏点不会影响到整个误差指标,均值误差指标会受到异常值的影响。
解释方差分(explained variance score):最好得分是1.0,反应模型对数据的波动的解释能力
R方得分(R2 score):最好的得分是1.0,值也可以是负数
作者:凌逆战
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)