#第三天打卡。
-------------------Yc
1.定义解释:梯度下降是机器学习算法中的一个基本概念,用于迭代寻找函数最优解。
设x,y为自变量,z为因变量,求解目标为因变量的最小值。求解步骤如下:
1.任取一点作为起始点;
2.查看在当前点像哪个方向移动能得到最小的z值;
3.重复步骤,直到无法找到更小的z值,此时认为达到最低点。
由于受到起始点和函数特性的影响,梯度下降法有时无法找到全局最优解(最小值),但此方法比OLS(最小二乘算法)的求解速度快,因此在大样本学习(训练样本数量多、特征维度大)中广泛应用。
相关概念:
(1) 步长(learning rate):每一次梯度下降时向目标方向前进的长度。步长越大,在陡峭区域下降越快,但在平缓区域容易出现反复抖动找不到最优点;步长越短越不易产生抖动,但是容易陷入局部最优解。
(2) 假设函数(hypothesis function):由特征产生目标变量的函数,即知道x,y求z的函数。
(3) 损失函数(loss function):寻找最优解用到的函数,即给参数组合打分的函数。通过损失函数,才能得到哪个点更接近真实值。常用的损失函数为,即样本估值和标准值的方差和,此函数中方差和越小越好。(损失函数向哪个方向移动的原理是计算损失函数的偏导数向量,正方向是增长最快的方向,反方向是减小最快的方向。)
虽然普通梯度下降已经是一种不保证求得非全局最优解的权衡方法,但在大样本中计算仍然不够快。因为每次根据损失函数求参数时,都需要遍历一次样本数据,为了加快速度,形成了随机梯度下降法。
2.随机梯度下降法
在损失函数计算时不遍历所有样本,只采用单一或小批量样本的方差和作为损失值。
随机梯度下降法和普通梯度下降的效果主要在于:
1.迭代次数增加,但时间缩短;
2.由于数据样本存在噪声,每次迭代的方向不一定是‘正确的’,但由于迭代次数的增加,总体的移动仍为正确方向;
3.有更大的可能性通过‘非正确移动’不困于非最优值,从而找到全局最优解。
优点:无论运行速度还是结果正确性均优于普通梯度下降。
---------------------------------------------------------------------------------------------------------------------------------
3.增量学习(Incremental Learning)
增量学习是一种机器学习方法,其主要特点是在训练过程中逐步增加新的数据或样本,而不是一次性使用全部的原始数据。这种方法允许模型在新数据到来时进行适应和更新,而不需要重新开始整个训练过程。
增量学习在实际应用中非常有用,因为它可以处理大规模的数据集,并且能够快速适应新的数据。例如,当你想要对一个在线购物网站的商品推荐系统进行优化时,如果每次都重新训练整个模型,那么当有大量的新商品加入到系统中时,就需要花费大量的时间和计算资源来进行重新训练。但是,如果你采用了增量学习的方法,就可以在每次有新商品加入时,只对相关的部分进行更新和优化,从而大大提高了效率。
此外,通过观察模型在不同时间点的表现,我们可以发现模型是否过拟合或者欠拟合,从而进行相应的调整。当模型在新数据上表现良好但在旧数据上表现较差时,可能是由于过拟合造成的。这意味着模型过于复杂,捕捉到了训练数据中的噪声和异常值。相反,如果模型在训练集和测试集上都表现不佳,可能是由于欠拟合导致的。这表示模型无法很好地泛化到新数据。
4.随机梯度下降的应用(Python)
应用第三方库scikit-learn中的线性模型分类器SGDClassifier或回归器SGDRegressor。它们的区别在于:SGDClassifier预测值是数据目标值之一(即分成已有的类别);而SGDRegressor的预测值是依据假设函数直接得到的计算结果(回归计算数据)。
(一) 回归模型实例:
回归模型实例:
from sklearn.linear_model import SGDRegressor
x=[[0,0],[2,1],[5,4]]
y=[0,2,2]
reg=SGDRegressor(penalty='l2',max_iter=10000) #使用部分初始化参数
reg.fit(x,y)
print('预测值:%f:'%reg.predict([[4,3]]))
print('截距:%f'%reg.intercept_)
print('参数:%s'%reg.coef_)
初始化参数介绍:
1.loss:损失函数类型,取值为‘squared_loss(均方差损失,普通最小二乘)’,‘huber’(平均绝对误差和均方差的综合,详见深入了解 Huber 损失函数_huber损失函数-CSDN博客),‘epsilion_insensitive’(线性支持向量回归)。
2.penalty:损失函数惩罚项,取值‘none’,‘l1’,‘l2’,‘elasticnet’。L1,L2为岭回归和Lasso回归的惩罚项,见上一篇文章,‘elasticnet’为两者的综合。
3.tol:容忍度或误差范围。迭代后损失函数的变化小于tol则认为已找到最优解。
4.max_iter:最大迭代次数。有时模型在迭代中陷入反复抖动,无法找到满足tol而停止的点,则以max_iter作为停止迭代的条件。
5.shuffle:完成一轮迭代后是否随即调整样本顺序进行下一次迭代。
6.n_jobs:进行计算时,并行运行的工作进程的数量。n_jobs
的默认值为1,只使用一个进程。如果将n_jobs
设置为-1,则使用所有可用的处理器核心并行计算。这意味着会尽可能地利用计算机的多核处理器资源,加快计算速度。
7.learning_rate:学习率,包括constant(固定学习率)、optimal(最优学习率)、invscaling(根据当前的梯度大小和参数数量来调整学习率,从而使模型更快地收敛),在步长类型为‘constant’或‘invscaling’设置时需设置初始步长。
(二) 分类模型实例
from sklearn.linear_model import SGDClassifier
x=[[0,0],[2,1],[5,4]]
y=[0,2,2]
clf=SGDClassifier(penalty='l2',max_iter=10000) #使用部分初始化参数
clf.fit(x,y)
print('预测值:%f:'%clf.predict([[4,3]])) #结果不同,结果为原有结果
---------------------------------------------------------------------------------------------------------------------------------日常求赞~