【机器学习】模型训练:scikitLearn线性模型的公式法与三种梯度下降法求解

36 篇文章 5 订阅
27 篇文章 3 订阅

模型训练导航:
【机器学习】欠拟合及过拟合与学习曲线、误差来源
【机器学习】scikitLearn正则化l1,l2,提前停止
【机器学习】逻辑回归logit与softmax

线性模型的两种解法

第一,公式解法
在这里插入图片描述

A: 是一个n行k列的矩阵,每行可以看作是一个观测数据(或者一个训练样本)的输入(features);

b: 是一个n维的列向量,每项表示一个观测数据的目标值(ground truth target value);

x: 是一个k维的列向量,是需要构建的线性模型的参数。

我们希望通过已知的A和b,求解出一个x,使得Ax = b。 但是,一般情况下,不存在满足这个等式的x。 怎么办?

Ax = b这个等式的左边,可以看作是一个矩阵A的列空间(Column space of A)。 这个等式没有解,可以理解为向量b不在矩阵A的列空间上。
A的列空间可以抽象成一个超平面,b可以抽象成一个向量。b不在超平面上。

解决办法是:在超平面上,找一个最接近b的向量。假设这个最接近b的向量是Ax*(其中x* 就是最优的参数解),那么,向量b和向量Ax*之间的距离应该是最小的。最小的定义为:

求一个近似的x*,使b和Ax*各项的差的平方的和最小。

故得出了一种公式解法求解线性模型:y就是b,x即为A
在这里插入图片描述
如果上述方程中XT乘X是不可逆的,则使用奇异值分解求为伪逆进行计算。
线性模型是在预测时,所有操作均为线性,速度非常快。

第二、梯度下降法
梯度下降的中心思想就是迭代地调整参数从而使成本函数最小化。
梯度下降中,模型参数被随机初始化并反复调整使成本函数最小化。学习步长与成本函数的斜率成正比,因此,当参数接近最小值时,步长逐渐变小。
线性回归模型的MSE成本函数恰好是个凸函数,这意味着连接曲线上任意两点的线段永远不会跟曲线相交。也就是说,不存在局部最小值,只有一个全局最小值。
应用梯度下降时,需要保证所有特征值的大小比例都差不多(比如使用Scikit-Learn的StandardScaler类),否则收敛的时间会长很多。
请注意,全梯度下降,在计算梯度下降的每一步时,都是基于完整的训练集X的。
梯度下降法在参数很多的时候,求解速度会比公式法更好。
n为学习率,乘以梯度,决定最终的下坡距离:
在这里插入图片描述
要找到合适的学习率,可以使用网格搜索。但是可能需要限制迭代次数,这样网格搜索可以淘汰掉那些收敛耗时太长的模型。

随机梯度下降每次只随机选择一个实例进行梯度计算,故可适用于海量的数据集,不用担心内存爆炸。此法只能得到最够好的参数,但是不会是最优的参数。随机性的好处在于可以逃离局部最优,但缺点是永远定位不出最小值。也就是一开始要有一个大的学习率,后面逐步减少,模拟退火过程。
使用随机梯度下降,要求最好为独立同分布:
独立同分布(Independent Identically Distribution)在概率统计理论中,指随机过程中,任何时刻的取值都为随机变量,如果这些随机变量服从同一分布,并且互相独立,那么这些随机变量是独立同分布。
可以使用SGDRegressor类,该类默认优化平方误差成本函数。以下代码最多可运行1000个轮次,或者直到一个轮次期间损失下降小于0.001为止(max_iter=1000,tol=1e-3)。它使用默认的学习调度(与前一个学习调度不同)以0.1(eta0=0.1)的学习率开始:

from sklearn.linear_model import SGDRegressor

sgd_reg = SGDRegressor(max_iter=1000, tol=1e-3, penalty=None, eta0=0.1, random_state=42)
sgd_reg.fit(X, y.ravel())

其它参数:

sklearn.linear_model.SGDRegressor(loss='squared_loss', *, penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, epsilon=0.1, random_state=None, learning_rate='invscaling', eta0=0.01, power_t=0.25, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, warm_start=False, average=False)
loss:str, default=’squared_loss’,要使用的损失函数。可能的值是'squared_loss''huber''epsilon_unsensitive''squared_epsilon_unsensitive'普通平方表示拟合的最小平方。“huber”修改了“squared_loss”,通过从平方损失切换到超过epsilon距离的线性损失,减少了对异常值的校正。“epsilon_unsensitive”忽略小于epsilon的错误,并且是线性的;这是SVR中使用的损失函数。“squared_epsilon_unsensitive”是相同的,但在ε的公差后变为平方损失。

penalty:{‘l2’, ‘l1’, ‘elasticnet’}, default=’l2’。 要使用的惩罚(又名正则化术语)。默认为“l2”,这是线性支持向量机模型的标准正则化器。“l1”和“elasticnet”可能会给模型(特征选择)带来“l2”无法实现的稀疏性。

alpha:float, default=0.0001。乘以正则项的常数。值越大,正则化越强。当学习率设为“最优”时,也用于计算学习率。

l1_ratio:float, default=0.15。弹性网络混合参数,0<=l1<=1。l1_ratio=0对应于L2惩罚,l1_ratio=1到l1。仅当惩罚为“elasticnet”时使用。

fit_intercept:bool, default=True。是否应该估计截距。如果为False,则假定数据已经居中。

max_iter:int, default=1000。训练数据的最大传递次数(也称为epochs)。它只影响拟合方法中的行为,而不影响部分拟合方法中的行为。

tol:float, default=1e-3。停止标准。如果不是“无”,则当(损失>最佳损失-公差)更改连续的时间段时,培训将停止。

shuffle:bool, default=True。是否在每个epoch之后对训练数据进行shuffle。

verbose:int, default=0。详细程度。

epsilon:float, default=0.1。Epsilon不敏感损失函数中的Epsilon;仅当损失为“huber”、“epsilon_insensitive”或“squared_Epsilon_unsensitive”时。对于“huber”,它决定了一个阈值,在这个阈值下,准确的预测就变得不那么重要了。对于epsilon-insensitive,如果当前预测与正确标签之间的任何差异小于此阈值,则将忽略这些差异。

random_state:int, RandomState instance, default=None。当shuffle设置为True时,用于洗牌数据。为跨多个函数调用的可复制输出传递一个int。

learning_rate:string, default=’invscaling’。 学习率方法:

“constant”:eta=eta0

“optimal”:eta=1.0/(alpha*(t+t0)),其中t0由Leon Bottou提出的启发式方法选择。

“invscaling”:eta=eta0/pow(t,功率)

“adaptive”:eta=eta0,只要训练持续减少。每次n_iter_no_change连续时间未能减少tol的训练损失或未能增加tol的验证分数(如果提前停止为真),则当前学习率除以5。

eta0:double, default=0.01。“constant”、“invscaling”或“adaptive”规则的初始学习率。默认值为0.01。

power_t:double, default=0.25。逆标度学习率的指数。

early_stopping:bool, default=False。验证分数没有提高时,是否使用提前停止终止培训。如果设置为True,则当分数方法返回的验证分数没有至少提高tol时,它将自动保留一部分训练数据作为验证,并终止训练。

validation_fraction:float, default=0.1。作为早期停机验证设置的培训数据的比例。必须介于01之间。仅在“早停”为真时使用。

n_iter_no_change:int, default=5。在提前停止之前没有改进的迭代次数。

warm_start:bool, default=False。当设置为True时,将上一个调用的解决方案重用为fit作为初始化,否则,只需删除以前的解决方案。当warm_start为True时,反复调用fit或partial_fit会导致与一次性调用fit时不同的解决方案,这是因为数据的无序处理方式。如果使用动态学习率,学习率将根据已经看到的样本数进行调整。调用fit重置此计数器,而partial_fit将导致增加现有计数器。

average:bool or int, default=False。当设置为True时,计算所有更新的平均SGD权重,并将结果存储在coef_u属性中。如果设置为大于1的整数,则在看到的样本总数达到平均值后开始平均。所以average=10将在看到10个样本后开始平均。

小批量梯度下降介于随机梯度下降与全梯度下降之间,是每次使用一个批次的集合,进行梯度下降。
小批量梯度下降优于随机梯度下降的主要优点是,你可以通过矩阵操作的硬件优化来提高性能,特别是在使用GPU时。同时,其收敛的方向更稳定,但有陷入局部最小值的可能。

下图中是各类解法之间的对比
m是训练实例的数量,n是特征的数量,特征是方程的参数。在这里插入图片描述
小批量GD,随机GD基本上是各方面都较优的选择。在特征特别多,维度较高时,SVD就会较慢,它是平方次的时间常数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 机器学习实战:基于scikitlearn和tensorflow是一本介绍机器学习算法和工具的书籍。其scikitlearn和tensorflow是两个常用的机器学习库,分别用于传统机器学习和深度学习。本书通过实战案例,让读者了解机器学习的基本概念和应用方,并学会如何使用这两个库进行机器学习任务的实现。该书适合有一定编程基础和机器学习基础的读者阅读。 ### 回答2: 《机器学习实战:基于scikitlearn和tensorflow》是一本介绍机器学习实战的经典教材,许多从事机器学习的学生和研究人员都借此书入门或深入研究。本书主要讲述了两个比较流行的机器学习框架:scikit-learn和TensorFlow。这两个框架都是目前主流的机器学习工具,可以帮助用户实现各种机器学习算法模型。 除了介绍机器学习的基本概念和理论之外,本书还包含了大量的实战案例,帮助读者掌握机器学习的实际应用。其scikit-learn主要用于实现传统的机器学习算法,如回归、分类、聚类等。而TensorFlow则主要用于实现深度学习算法,如神经网络、卷积神经网络、循环神经网络等。 本书的主要内容包括:机器学习基础、Scikit-Learn实战、TensorFlow入门、基于TensorFlow的深度学习实战等。在机器学习基础部分,作者介绍了机器学习的基本概念及分类,并讲述了数据预处理和特征提取方。在Scikit-Learn实战部分,作者详细介绍了多种传统机器学习算法的原理和应用,并附带相应案例。在TensorFlow入门部分,作者讲解了TensorFlow的基本概念和使用方,并介绍了常用的深度学习算法。在基于TensorFlow的深度学习实战部分,作者带领读者实现各种深度学习模型,并给出相应的应用案例。 除了介绍机器学习算法和框架,本书还强调了实践。作者详细讲述了各种实践技巧,并针对常见问题提供了解决方案。此外,本书还介绍了一些常用的优化方和评价指标,帮助读者优化机器学习算法模型。 总之,《机器学习实战:基于scikitlearn和tensorflow》是一本介绍机器学习实战的优秀教材,涵盖了机器学习的基础和实践技巧,可供初学者和专业人士参考。 ### 回答3: 机器学习是一种应用人工智能的方,实现对大规模数据的分析和预测。机器学习算法以数据为输入,在经过处理、学习和优化后,可以生成预测模型。这些模型可以帮助机器理解数据,预测未来的趋势和结果。机器学习在社会和经济领域具有广泛的应用,如金融、医疗、交通、销售等。 Python 是一种高效和易学的编程语言,目前正变得比以往更受欢迎。scikitlearn 是 Python 的机器学习库,拥有丰富的算法和工具,用于处理和分析数据。TensorFlow 是谷歌的流行的机器学习框架,具有强大的计算能力和可扩展性,尤其适用于大规模数据的训练和预测。 《机器学习实战:基于scikitlearn和tensorflow》是一本介绍机器学习基础和相关算法的教材。本书首先讲解了机器学习的基本概念和工作原理,让读者了解数据和模型之间的关系。接下来,本书详细介绍了多种机器学习算法,包括支持向量机、决策树、朴素贝叶斯、神经网络等。每个算法都配有详细的代码实现和示例,读者可以根据需要自由调整代码和参数,以适应不同的数据集和问题。 此外,本书还介绍了如何使用 Python、scikitlearn 和 TensorFlow 进行数据处理、特征选择和模型评估。这些技能都对数据科学和机器学习工程师非常重要。读者也可以通过详细的示例学习如何进行数据预处理、数据集拆分、交叉验证和模型调整等。这些实践技能对于机器学习算法的应用和部署都十分重要。 总之,《机器学习实战:基于scikitlearn和tensorflow》是一本非常实用的机器学习教材,它通过丰富的实例和代码,带领读者深入理解机器学习算法和工作流程。这本书不仅可以帮助读者进一步探索机器学习领域,也可以作为初学者的学习指南,帮助他们掌握机器学习的基础知识和实践技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值