loss下降auc下降_随机梯度下降法介绍及其参数讲解

算法介绍

9236a09c7e83d0142188dba59099bf24.png

简单来说,梯度下降就是从山顶找一条最短的路走到山脚最低的地方。但是因为选择方向的原因,我们找到的的最低点可能不是真正的最低点。如图所示,黑线标注的路线所指的方向并不是真正的地方。

既然是选择一个方向下山,那么这个方向怎么选?每次该怎么走?

先说选方向,在算法中是以随机方式给出的,这也是造成有时候走不到真正最低点的原因。

如果选定了方向,以后每走一步,都是选择最陡的方向,直到最低点。

总结起来就一句话:随机选择一个方向,然后每次迈步都选择最陡的方向,直到这个方向上能达到的最低点。

在机器学习算法中,有时候需要对原始的模型构建损失函数然后通过优化算法对损失函数进行优化,以便寻找到最优的参数,使得损失函数的值最小。而在求解机器学习参数的优化算法中,使用较多的就是基于梯度下降的优化算法(Gradient Descent,GD)。

算法优势

优点:效率。在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,可以在很多大规模数据集上应用。

缺点:求解的是局部最优值,即由于方向选择的问题,得到的结果不一定是全局最优。步长选择,过小使得函数收敛速度慢,过大又容易找不到最优解。

参数介绍

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)

参数

  1. loss:str,default='squared_loss',要使用的损失函数。可能的值是'squared_loss'、'huber'、'epsilon_unsensitive'或'squared_epsilon_unsensitive'普通平方表示拟合的最小平方。'huber'修改了'squared_loss',通过从平方损失切换到超过epsilon距离的线性损失,减少了对异常值的校正。'epsilon_unsensitive'忽略小于epsilon的错误,并且是线性的;这是SVR中使用的损失函数。'squared_epsilon_unsensitive'是相同的,但在ε的公差后变为平方损失。

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

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

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

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

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

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

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

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

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

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

  12. learning_rate:string,default='invscaling'。学习率方法:

    1).constant:eta=eta0

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

    3).invscaling:eta=eta0/pow(t,功率)

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

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

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

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

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

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

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

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

属性

  1. coef_:ndarray of shape(n_features,)。为特征指定的权重。

  2. intercept_:ndarray of shape(1,)。截距项。

  3. average_coef_:ndarray of shape(n_features,)。分配给特征的平均权重。仅当average=True时可用。

  4. average_intercept_:ndarray of shape(1,)。平均截距项。仅当average=True时可用。

  5. n_iter_:int。达到停止条件之前的实际迭代次数。

  6. t_:int。训练期间进行的体重更新次数。与(n_iter_u*n_示例)相同。

方法

  1. densify():将系数矩阵转换为密集数组格式。

  2. fit(X, y[,coef_init, intercept_init, …]):用随机梯度下降拟合线性模型。

  3. get_params([deep]):获取此估计器的参数。

  4. partial_fit(X,y[,sample_weight]):对给定样本执行一个随机梯度下降的历元。

  5. predict(X):用线性模型预测。

  6. score(X, y[,sample_weight]):返回预测的决定系数R^2。

  7. set_params(**kwargs):设置并验证估计器的参数。

  8. sparsify():将系数矩阵转换为稀疏格式。

调优方法

具体的损失函数可以通过 loss参数设置。SGDRegressor支持以下的损失函数:

  1. loss='squared_loss':Ordinary least squares(普通最小二乘法)

  2. loss='huber':Huber loss for robust regression(Huber回归)

  3. loss='epsilon_insensitive':linear Support Vector Regression(线性支持向量回归)

Huber和epsilon-insensitive损失函数可用于robustregression(鲁棒回归)。不敏感区域的宽度必须通过参数epsilon来设定。这个参数取决于目标变量的规模。

SGDRegressor支持ASGD(平均随机梯度下降)作为SGDClassifier。均值化可以通过设置average=True来启用。

对于利用了squaredloss(平方损失)和l2 penalty(l2惩罚)的回归,在 Ridge 中提供了另一个采取averaging strategy(平均策略)的SGD变体,其使用了随机平均梯度(SAG)算法。

适用场景

随机梯度下降(SGD)是一种简单但非常有效的方法,多用用于支持向量机、逻辑回归等凸损失函数下的线性分类器的学习。并且SGD已成功应用于文本分类和自然语言处理中经常遇到的大规模和稀疏机器学习问题。

SGD既可以用于分类计算,也可以用于回归计算。

demo示例

import numpy as npfrom sklearn.linear_model import SGDRegressorfrom sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import StandardScalern_samples, n_features = 10, 5rng = np.random.RandomState(0)y = rng.randn(n_samples)X = rng.randn(n_samples, n_features)# Always scale the input. The most convenient way is to use a pipeline.reg = make_pipeline(StandardScaler(), SGDRegressor(max_iter=1000, tol=1e-3))reg.fit(X, y)#Pipeline(steps=[('standardscaler', StandardScaler()), ('sgdregressor', SGDRegressor())])import numpy as npfrom sklearn import linear_modelX = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])# y = 1 * x_0 + 2 * x_1 + 3y = np.dot(X, np.array([1, 2])) + 3model = linear_model.SGDRegressor(loss='huber', max_iter=1000, tol=1e-3)model.fit(X, y)

http://www.niftyadmin.cn/n/1849600.html

相关文章

JavaScript学习笔记(十六) XMLHttpRequest

1、介绍 &#xff08;1&#xff09;AJAX&#xff08;Asynchronous JavaScript and XML&#xff09; AJAX 原来是指通过异步 JavaScript 从服务器 XML 文档获取数据&#xff0c;然后更新部分网页&#xff0c;避免刷新整个网页 后来&#xff0c;这个词语慢慢成为在浏览器通过脚…

目前在看的书Visual c++ Net 技术内幕第六版

这本书&#xff0c;讲ATL不错。书上以VC2003.net 为环境讲的。

打包自己的的Class文件为Jar文件

java cvf my.jar *.* (不加-)&#xff0c;则把当前的目录里的所有子目录以及文件打包为my.jar&#xff0c;该jar包就在当前目录下 要想用该jar包需要在classpath下现加.;再加上所在jar包的绝对路径\my.jar。 jar -cf my.jar com则把com下的所有文件打包到jar包。 jar -tvf my.j…

JavaScript实战笔记(五) 预览本地图片

一般情况下&#xff0c;实现本地图片预览有两种方法&#xff0c;一种是 DataURL&#xff0c;一种是 BlobURL 所以在开始介绍怎么展示本地图片之前&#xff0c;我们花一点时间了解一下什么是 DataURL 和 BlobURL 1、DataURL &#xff08;1&#xff09;介绍 DataURL 就是以 d…

python中非法变量名_Python变量命名规则(超级详细)

Python 需要使用标识符给变量命名&#xff0c;其实标识符就是用于给程序中变量、类、方法命名的符号&#xff08;简单来说&#xff0c;标识符就是合法的名字&#xff09;。 Python 语言的标识符必须以字母、下画线&#xff08;_&#xff09;开头&#xff0c;后面可以跟任意数目…

最近,看了一个新片子,很不错。介绍给大家。

中文名称&#xff1a;越狱 第一季英文名称&#xff1a;Prison Break Season1资源类型&#xff1a;RMVB版本&#xff1a;[风软FRM字幕组出品]更新第18集泄露版(缺17)发行时间&#xff1a;2005年08月29日导演&#xff1a;Brett Ratner演员&#xff1a;Wentworth Miller .... Mich…

这几天闲着没事情。搞搞xml

先确定一下编译器。看看业务相关的资料。我书签写成写称XML的。还有什么&#xff1f;想起来再加吧&#xff01;

DirectAccess部署(三)之双网卡环境 DA服务器配置(多图!)

实验拓扑 部署概览 域控制器 主机名&#xff1a;WIN2K8-2 IP地址&#xff1a;192.168.0.62/24 网关&#xff1a;192.168.0.1 安装域服务角色--IIS角色--证书服务器角色 配置CRL&#xff08;Certificate Revocation List证书吊销列表&#xff09;--新建NLS服务器A记录--配置域策…