———《从机器学习到深度学习》刘长龙
用梯度下降法求解因变量最低点步骤:
任取一点为起始点查看在当前点向哪个方向移动能得到最小的z值,并向该方向移动重复该步骤,直到无法找到更小的z值,此时认为达到最低点算法概念:
步长(learning rate):是在每一步梯度下降时向目标前行的长度。步长越长,在陡峭区域下降越快,但在平缓区域容易出现反复抖动而找不到最优点;步长越段越不易产生抖动,但容易陷入局部最优解。假设函数(hypothesis function): 由特征产生目标变量的函数,常用h()表示。对于线性模型,假设函数就是y = w0 + w1x1+w2x2+…+wnxn损失函数(loss function):通常用J()表示。用损失函数判断向哪个方向移动的原理是计算损失函数的偏导数向量。由微积分可知:该向量就是损失函数增长最快的方向,而其反方向就是一最小化损失函数为目标时需要前进的方向。普通梯度下降
随机梯度下降
sklearn实现随机梯度下降算法
##梯度下降的线性模型分类器SGDClassifier和回归器SGDRegressor,使用它们可以学习超大规模样本,即样本数量大于10**5且特征维度数高于10**5 #SGD:Stochastic Gradient Descent 随机梯度下降 ;regressor: 回归 from sklearn.linear_model import SGDRegressor X = [[0, 0], [2, 1], [5, 4]] #样本特征 y = [0, 2, 2] #样本目标分类 reg = SGDRegressor(penalty='elasticnet', max_iter=10000) reg.fit(X, y) reg.predict([[4, 3]]) reg.coef_ #查看回归参数 reg.intercept_ #查看截距输出:
array([0.15039877]) SGDRegressor():参数 penalty: 损失函数惩罚项。取值’none’, ‘11’, ‘12’, ‘elasticnet’,'12’和’11’分别对应Ridge和Lasso模型中的惩罚项概念,用它 可以抑制模型过度拟合。elsticent是两者的综合loss: 损失函数类型。可取值’squared_loss’, ‘huber’, ‘epsilon_insensitive’, ‘squard_epsilon_insensitive’,对训练效果及速度有影响。tol: 在迭代后,损失函数的变化小于tol值时认为已经找到最优解。max_iter: 最大迭代数。shuffle: 完成一轮所有样本迭代后是否需要洗牌(重新随即调整样本顺序)一开始下一轮迭代n_jobs: 训练中可利用的CPU数learning_rate: 步长类型。可取值’constant’, ‘optimal’, ‘invscaling’, 前者是固定步长,后两者为动态步长。动态步长是一种在初始时设置较大步长, 随着训练过程逐渐减小步长的策略。有利于在训练初期跳跃出局部结,同时在后期避免抖动。eta0: 在步长类型为’constant’, 'invscaling’时的初始步长fit_intercept: 模型是否有截距,取值为True/False from sklearn.linear_model import SGDClassifier clf = SGDClassifier(penalty='none', max_iter=100) #初始化分类器 clf.fit(X, y) #训练 clf.predict([[4, 3]]) #预测输出:
array([2])SGDClassifier和SGDRegressor初始化参数类似。不同点在与predict()函数的预测结果。使用相同的数据对两者进行训练,SGDClassifier预测的值一定是训练数据目标值之一,而SGDRegressor的预测值是预测函数直接的预测结果.这也是分类和回归的区别所在。