当前位置: 首页 > news >正文

【机器学习】P4 特征缩放与学习率

这里写自定义目录标题

  • 特征缩放
    • 标准化
    • 归一化
    • 平均值归一化
  • 收敛
  • 学习率

特征缩放

特征缩放(Feature scaling)是一种数据预处理技术,它用于将不同尺度的特征值缩放到相同的范围内,以便更好地应用于机器学习算法中。在不进行特征缩放的情况下,一些特征值可能会因其量级较大而对模型的训练产生更大的影响,导致模型无法充分学习其他特征值的影响。

几种常见的特征缩放方法:

  1. 标准化(Standardization):通过将每个特征值减去其均值,然后除以其标准差,将特征值缩放为以0为中心、标准差为1的正态分布。

  2. 归一化(Normalization):通过将每个特征值缩放到0和1之间的范围内,使得所有特征值的范围相同。

  3. 平均值归一化(Mean normalization):通过将每个特征值缩放到[-1,1]或[0,1]范围内,从而使特征值在[-1,1]或[0,1]之间。

e.g.e.g.e.g. 比如 bedrooms 代表卧室的数量,size in feet2^22 代表房间的尺寸。
一般卧室的数量都是个位数十位数,而房间的尺寸却一般都是百位数千位数,所以为了防止房间的尺寸数量级较大从而使得模型无法充分学习卧室个数的情况;
我们有如下三种方法进行特征缩放:

标准化

标准化(Standardization)又称为 Z-score normalization,对于一个特征 xxx,其均值为 μ\muμ,标准差为 σ\sigmaσ,则对于每个样本,xxx 的缩放后的值 yyy 可以通过以下公式计算:
y=x−μσy = \frac {x-\mu} \sigmay=σxμ

通过这种方法缩放后的特征值 yyy 的平均值为0,标准差为1;
例如在上述的房间尺寸与卧室数量的案例中:

300≤x1≤2000;x1,scaled=x1−μ1σ10≤x2≤5;x2,scaled=x2−μ2σ2300≤x_1≤2000; x_{1,scaled}=\frac {x_1-\mu_1} {\sigma_1} \\ 0≤x_2≤5; x_{2,scaled}=\frac {x_2-\mu_2} {\sigma_2} 300x12000;x1,scaled=σ1x1μ10x25;x2,scaled=σ2x2μ2

import numpy as np
def zscore_normalize_features(X):mu = np.mean(X, axis=0)sigma = np.std(X, axis=0)X_norm = (X - mu) / sigma      return (X_norm, mu, sigma)

通过 Sklearn 实现 Z-Score Normalization

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_norm = scaler.fit_transform(X_train)

在这里插入图片描述

归一化

归一化(Normalization)又称为最大值缩放 Max Scaling。具体来说,对于一个特征xxx,其最大值为 maxmaxmax,则对于每个样本,xxx 的缩放后的值 yyy 可以通过以下公式计算:
y=xmaxy = \frac x {max}y=maxx

例如在上述的房间尺寸与卧室数量的案例中:
300≤x1≤2000;x1,scaled=x120000≤x2≤5;x2,scaled=x25300≤x_1≤2000; x_{1,scaled}=\frac {x_1} {2000} \\ 0≤x_2≤5; x_{2,scaled}=\frac {x_2} {5} 300x12000;x1,scaled=2000x10x25;x2,scaled=5x2

def max_normalize_features(X):x_max = np.max(X)    X_norm = X / x_maxreturn X_norm

在这里插入图片描述


平均值归一化

平均值归一化具体来说,对于一个特征 xxx,其均值为 μ\muμ,最小值为 minminmin,最大值为 maxmaxmax,则对于每个样本,xxx 的缩放后的值 yyy 可以通过以下公式计算:
y=x−μmax−miny = \frac {x-\mu} {max-min}y=maxminxμ

例如在上述的房间尺寸与卧室数量的案例中:
300≤x1≤2000;x1,scaled=x1−μ12000−3000≤x2≤5;x2,scaled=x2−μ25−0300≤x_1≤2000; x_{1,scaled}=\frac {x_1-\mu_1} {2000-300} \\ 0≤x_2≤5; x_{2,scaled}=\frac {x_2-\mu_2} {5-0} 300x12000;x1,scaled=2000300x1μ10x25;x2,scaled=50x2μ2

def mean_normalize_features(X):mu = np.mean(X, axis=0) x_max = np.max(X)x_min = np.min(X)X_norm = (X - mu) / (m_max - m_min)return X_norm

在这里插入图片描述


收敛

收敛(Convergence)通常指的是训练过程中模型的参数逐渐趋于稳定,不再发生明显变化的情况。当模型的参数收敛时,其对训练数据的拟合误差(training error)也会逐渐降低,直到达到一个较小的阈值或收敛标准。

如下图所示,一般来说,伴随着迭代(iterations),应该呈现下图所示曲线,即损失函数越来越小,直到趋于稳定,不再发生明显变化;

在这里插入图片描述

损失函数在迭代100次时,下降的速度还是很快的;
在迭代200次的时候,损失值下降的速度明显变慢;
在迭代300次的时候,每次迭代损失值下降的已经很小很小了;
在迭代400次的时候,几乎看不到变化,趋于稳定,此时我们称之为 converged,即收敛了。

而如果出现损失值变大的情况,则可能是学习率 α\alphaα 设置的有问题,下面我们将学习了解学习率的概念;


学习率

学习率(learning rate)是梯度下降算法中的一个重要超参数,用于控制每一次参数更新的步长大小。在梯度下降算法中,每一次迭代都需要计算损失函数的梯度,然后按照一定的步长沿着梯度方向更新模型参数。

学习率决定了每次更新的步长大小:
如果学习率过大,会导致参数在梯度方向上 “跳跃” 太大而无法收敛;
如果学习率过小,会导致参数更新缓慢,耗费较长的时间才能达到最优解。

学习率的选择是一个经验性的问题,需要根据具体问题和数据集的特征来进行调整。一般来说,可以从较小的学习率(比如 α\alphaα = 0.001)开始,观察损失函数的收敛情况和模型的性能,然后逐步调整学习率的大小,直到达到最佳的性能和收敛速度。

在梯度下降算法中,有三种不同的学习率策略可供选择:

  1. 固定学习率:使用固定的学习率,不随着迭代次数的增加而改变。
  2. 动态学习率:根据迭代次数或其他规则来动态调整学习率。
  3. 自适应学习率:根据梯度的大小来自适应地调整学习率,常见的方法包括Adagrad、Adam等。

对于初学者而言,无需参与到动态学习率 与 自适应学习率的讨论中,尝试固定学习率,以 0.001 与 0.01 多做尝试即可。

http://www.lryc.cn/news/44641.html

相关文章:

  • 《Python编程:从入门到实战》(第2版)学习笔记 第11章 测试代码
  • SpringBoot(1)基础入门
  • 利用Flow Simulation快速经济高效地解决传热难题
  • 揭开二维码背后的神秘面纱用二维码识别 API 就够了
  • 系统分析——系统构建最重要的一环
  • 第1-第20个高级shell程序
  • 【致敬嵌入式攻城狮第2期活动预热征文】学习安排
  • 035:cesium加载KML文件,显示图形
  • 随想录Day42--动态规划: 416. 分割等和子集(终于吃下01背包了)
  • 字节跳动软件测试岗,前两面过了,第三面被面试官吊打,结局我哭了
  • bitlocker 笔记
  • Linux 压缩与解压命令
  • python global函数用法及常用的 global函数代码
  • 大数据学完好就业么
  • CASAtomic 原子操作详解
  • 卷积神经网络(convolutional neural network, CNN)
  • kube-apiserver启动流程源码分析
  • Scala基础(二)
  • Python 生产者消费者模型是什么?
  • 手机银行评测系列:北京银行“京彩生活”7.0从用户视角出发,实现沉浸式体验重塑
  • ZJYC2023 浙江省大学生程序设计竞赛校内选拔赛部分题解 C J B L
  • 百科创建:7种有效的百科词条创建技巧
  • ThreeJS-dat.gui界面控制颜色、隐藏、位置(六)
  • 接口自动化测试,完整入门篇
  • 利用ControlNet重新定义你的AI姿势
  • 中医药NER命名实体识别基于SPANNER方式
  • Vue必掌握
  • SSM部分
  • 【Springboot系列】Springboot接管所有Controller,magic-api源码阅读
  • 二、LED子系统数据结构详解