---恢复内容开始---
梯度下降的定义:
梯度下降是一种因为计算机储存及能力有限,采取逐步逼近,迭代求解的方法.
梯度下降的步骤:
任取一点作为起始点
查看在当前点向那个方向移动能得到最小的z值,并向该方向移动.
重复该步骤,直到无法找到更小的z值,此时认为达到最低点.
几个基础的算法概念:
步长:是每一次梯度下降是向目标前行的长度.
假设函数:由特征产生目标变量的函数.
损失函数:可以想象成给任意参数组合打分的函数.
优缺点:
该方法比OLS求解要快,但是有时候梯度下降无法找到全局最优点.
随机梯度下降:
是在损失函数计算时不遍历所有的样本,采用单一或一小批样本的方差和作为损失值.
和普通梯度下降的区别:
迭代次数增加了,因为随机梯度下降的速度快很多.
比普通梯度下降更有可能找到全局最优借.
实战:
一些常用的参数:
penalty:损失函数惩罚项 请回顾线性回归的惩罚项的概念
loss:损失函数类型 对训练效果和速度有所影响
max_iter: 最大迭代次数
shuffle: 完成一轮迭代后是否需要洗牌
n_job: cpu的数量
learning_rate: 步长策略,(平均,先大后小等等的类型)
eta0: 初始步长
fit_intercept: 模型是否有截距
from sklearn.linear_model import SGDRegressor from sklearn.linear_model import SGDClassifier from random import randint import numpy as np import pandas as pd # 随机梯度回归 def SGDregressor(): X = [[0,0],[2,1],[5,4]] # 样本特征 y = [0,2,2] # 样本目标分类 reg = SGDRegressor(penalty="l2",max_iter=10000,tol=100) reg.fit(X,y) reg.predict([[4,3]]) print(reg.coef_) # 查看回归参数 print(reg.intercept_) # 查看截据 # 随机梯度下降 def SGDclassifier(): X = [[0,0],[2,1],[5,4]] # 样本特征 y = [0,2,2] # 样本目标分类 clf = SGDClassifier(penalty="l2",max_iter=1000,tol=1e-3) # 初始化分类器 clf.fit(X,y) # 训练 print(clf.predict([[4,3]])) # 预测 # 增量学习 def partial_fit(): reg2 = SGDRegressor(loss="squared_loss",penalty="None",tol=1e-15) X = np.linspace(0,1,50) # 50个x值 y = X/2 +0.3 + np.random.normal(0,0.15,len(X)) # 用y=x/2+0.3加随机数生成样本 X = X.reshape(-1,1) for i in range(10000): idx = randint(0,len(y)-1) # 随机选择一个样本索引 reg2.partial_fit(X[idx:idx+10],y[idx:idx+10]) # 分部训练 print(reg2.coef_) # 查看回归参数 print(reg2.intercept_) # 查看截距
增量学习就是:可以一边读数据一边学习