0A03 无监督学习:梯度下降

---恢复内容开始---

梯度下降的定义:

  梯度下降是一种因为计算机储存及能力有限,采取逐步逼近,迭代求解的方法.

梯度下降的步骤:

  任取一点作为起始点

  查看在当前点向那个方向移动能得到最小的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_)                              # 查看截距

 增量学习就是:可以一边读数据一边学习

猜你喜欢

转载自www.cnblogs.com/liu247/p/11070060.html