我的编程空间,编程开发者的网络收藏夹
学习永远不晚

梯度下降、过拟合和归一化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

梯度下降、过拟合和归一化

好的课程应该分享给更多人:人工智能视频列表-尚学堂,点开任意一个之后会发现他们会提供系列课程整合到一起的百度网盘下载地址,包括视频+代码+资料,免费的优质资源。当然,现在共享非常多,各种mooc、博客、论坛等,很容易就可以找到各种各样的知识,能走到哪一步,都在我们自己。希望我能够一直坚持下去,加油!

参考书籍:《机器学习》-周志华,中文书,各种概念都讲解的很清晰,赞。点这里下载,在百度网盘上,密码是:8tmk

参见官方文档:scikit-learn官网http://scikit-learn.org/stable/supervised_learning.html#supervised-learning

看这个吧,简书上的:深入浅出--梯度下降法及其实现

批量梯度下降

  · 初始化W,即随机W,给初值

  · 沿着负梯度方向迭代,更新后的W使得损失函数J(w)更小

  · 如果W维度是几百维度,直接算SVD也是可以的,几百维度以上一般是梯度下降算法

# 批量梯度下降
import numpy as np

# 自己创建建数据,哈哈
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]

learning_rate = 0.1     # 学习率,步长=学习率x梯度
n_iterations = 1000     # 迭代次数,一般不设置阈值,只设置超参数,迭代次数
m = 100     # m个样本

theta = np.random.randn(2, 1)   # 初始化参数theta,w0,...,wn
count = 0   # 计数

for iteration in range(n_iterations):
    count += 1
    # 求梯度,每次迭代使用m个样本求梯度
    gradients = 1/m * X_b.T.dot(X_b.dot(theta)-y)
    # 迭代更新theta值
    theta = theta - learning_rate * gradients
    # print(count, theta)
    
print(count, theta)

随机梯度下降

  · 优先选择随机梯度下降

  · 有些时候随机梯度下降可以跳出局部最小# 随机梯度下降

import numpy as np

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]

n_epochs = 500 
t0, t1 = 5, 50
m = 100

def learning_schedule(t):
    return t0/(t + t1)

# 随机初始化参数值
theta = np.random.randn(2, 1)

for epoch in range(n_epochs):
    for i in range(m):
        random_index = np.random.randint(m)
     # 每次迭代使用一个样本求梯度 xi = X_b[random_index:random_index+1] yi = y[random_index:random_index+1] gradients = 2*xi.T.dot(xi.dot(theta)-yi) learning_rate = learning_schedule(epoch*m + i) theta = theta - learning_rate * gradients print(theta)

归一化

预处理

这个CSDN的博客挺好的:机器学习常见归一化方法及实现,我觉得还是看书效果最好了。

基于梯度下降法求最优解时,都要归一化,why,为什么?

数据的归一化/标准化/规范化,顾名思义,就是有量纲数据集经过某种变换后,变成无量纲的数据,比如变到[0,1],应该是这样便于处理吧,使各个维度梯度尽量同时收敛。

过拟合、拟合与欠拟合

过拟合:模型很好的拟合了训练集数据,但预测的准确率反而降低了,拟合过度,泛化能力弱。

欠拟合:与过拟合相反,模型尚未能很好的拟合训练数据集,拟合不足。

拟合:模型适当拟合训练集且预测准确率较高,泛化能力强。

主要做的是防止过拟合:

  · 通过正则化修改损失函数,考虑惩罚项的影响,如L1、L2正则化

    L1 = n个维度的w的绝对值和

    L2 = n个维度的w的平方和

    即,loss_function = loss_function + α(L1 or L2),使用惩罚项,模型泛化能力提高,可能影响训练数据集正确率,在惩罚项里面,会有个alpha,即惩罚项的权重,我们可以通过调整alpha超参数,根据需求来决定是更看重模型的正确率还是模型的泛化能力!

难受的,代码:

损失函数 + L2正则项:

# 岭回归/脊回归,随机梯度下降,crtl+B查看函数文档以调整参数…
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.linear_model import SGDRegressor

# 模拟真实数据集
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# # 方法一:脊/岭回归,损失函数=最小二乘+L2正则项
# # alpha=1,惩罚项权重-Regularization strength;
# ridge_reg = Ridge(alpha=1, solver='auto')
# ridge_reg.fit(X, y)    # 模型
# print(ridge_reg.predict(2))    # 预测x=2时,y=?
# print("w0 =", ridge_reg.intercept_)    # 打印w0或者说bias
# print("w1 =", ridge_reg.coef_)     # 打印weights

# 方法二:随机梯度下降
# # penalty='l2',使用L2正则化,迭代n_iter=100次
sgd_reg = SGDRegressor(penalty='l1', n_iter=100)
sgd_reg.fit(X, y.ravel())
print(sgd_reg.predict(2))
print("w0 =", sgd_reg.intercept_)
print("w1 =", sgd_reg.coef_)

 损失函数 + L1正则项:

# 套索回归,随机梯度下降回归函数
import numpy as np
from sklearn.linear_model import Lasso, SGDRegressor

# 模拟真实数据集
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# One:lasso regression,损失函数=最小二乘项? + L1正则项
lasso_reg = Lasso(alpha=0.15, max_iter=1000)
lasso_reg.fit(X, y)
print(lasso_reg.predict(2))
print(lasso_reg.intercept_, lasso_reg.coef_)

# # Two:sgd regression
# sgd_reg = SGDRegressor(penalty='l1', n_iter=1000)
# sgd_reg.fit(X, y)
# print(sgd_reg.predict(2))
# print(sgd_reg.intercept_, sgd_reg.coef_)

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

梯度下降、过拟合和归一化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

梯度下降、过拟合和归一化

好的课程应该分享给更多人:人工智能视频列表-尚学堂,点开任意一个之后会发现他们会提供系列课程整合到一起的百度网盘下载地址,包括视频+代码+资料,免费的优质资源。当然,现在共享非常多,各种mooc、博客、论坛等,很容易就可以找到各种各样的知识
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录