【scikit-learn基础】--『预处理』之 正则化

这篇具有很好参考价值的文章主要介绍了【scikit-learn基础】--『预处理』之 正则化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据的预处理是数据分析,或者机器学习训练前的重要步骤。
通过数据预处理,可以

  • 提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性
  • 整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集
  • 提高数据性能,对数据的值进行变换,规约等(比如无量纲化),让算法更加高效

本篇介绍的正则化处理,主要功能是对每个样本计算其范数,然后对该样本中每个元素除以该范数,
这样处理的结果是使得每个处理后样本的范数(如l1-norm、l2-norm)等于1。

1. 原理

介绍正则化之前,先简单介绍下范数的概念。

1.1. 范数

范数常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小,
可以简单理解为向量的长度,或者向量到零点的距离,或者相应的两个点之间的距离。

对于向量(\(x = [x_1, x_2, ...,x_m]\)),常见的范数有:

  1. L1范数,向量元素绝对值之和,x 到零点的曼哈顿距离(\(\parallel x \parallel_1=\sum_{i=1}^m \mid x_{i}\mid\)
  2. L2范数,向量元素绝对值的平方和再开方,表示x到零点的欧式距离(\(\parallel x \parallel_2=\sqrt{\sum_{i=1}^m \mid x_{i}^2\mid}\)
  3. p-范数,向量元素绝对值的p次方和的1/p次幂,表示x到零点的p阶闵氏距离(\(\parallel x \parallel_p=(\sum_{i=1}^m \mid x_{i}\mid^p)^\frac{1}{p}\)
  4. 无穷范数,所有向量元素绝对值中的最大值(\(\parallel x \parallel_{\infty}=max_i\mid x_i \mid\)
  5. 等等。

numpy中已经提供了计算向量范数的函数。

import numpy as np

# 范数计算

arr = np.random.randint(0, 100, 10)
print("向量: {}".format(arr))

L1 = np.linalg.norm(arr, 1)
print("L1范数: {}".format(L1))
L2 = np.linalg.norm(arr, 2)
print("L2范数: {}".format(L2))

LInf = np.linalg.norm(arr, np.inf)
print("无穷范数: {}".format(LInf))

# 运行结果
向量: [12 22 30 75 20 28 38 72  2 33]
L1范数: 332.0
L2范数: 126.72016414130783
无穷范数: 75.0

1.2. 正则化

有了范数的概念之后,再来看正则化,根据选用的范数不同,正则化也分为L1正则化,L2正则化等等。
范数正则化过程中扮演了重要的角色,被用来限制优化参数的大小,帮助防止模型过拟合。

from sklearn import preprocessing as pp

data = np.random.randint(1, 100, size=(3, 3))
L1 = pp.normalize(data, norm="l1")
L2 = pp.normalize(data, norm="l2")
LMax = pp.normalize(data, norm="max")

print("L1正则化: {}".format(L1))
print("L2正则化: {}".format(L2))
print("Max正则化: {}".format(LMax))

# 运行结果
L1正则化: 
[[0.29677419 0.09677419 0.60645161]
 [0.20408163 0.46938776 0.32653061]
 [0.05       0.67       0.28      ]]

L2正则化:
[[0.43510613 0.14188244 0.88912993]
 [0.33614632 0.77313654 0.53783412]
 [0.06869324 0.92048947 0.38468217]]

Max正则化:
[[0.4893617  0.15957447 1.        ]
 [0.43478261 1.         0.69565217]
 [0.07462687 1.         0.41791045]]

正则化之后,所有的数值都被压缩到了 0~1之间。
后续介绍机器学习算法时,可以看到正则化如何缓解训练结果过拟合的问题。

2. 作用

对数据进行正则化处理的主要作用有:

2.1. 防止过拟合

过拟合是指模型在训练数据上表现很好,但在测试数据上表现不佳的现象。
主要原因是模型在训练数据上学习了过多的噪声和异常值,导致对训练数据过度拟合。

正则化通过对模型的复杂性进行惩罚,使得模型在训练数据上表现良好的同时,也能够对测试数据有较好的预测能力。

2.2. 提升稳定性和鲁棒性

稳定性是指模型对于输入数据的小变化能够产生可接受的结果。
也就是说,如果输入数据在一定范围内发生微小变化,模型的输出结果也会相应地按照相同的排列顺序发生微小变化,而不是发生较大的颠覆性变化。

鲁棒性则是指模型在一定条件下对于某些性能的保持能力。
也就是说,当输入数据中存在噪声、异常值或不完全信息时,模型能够通过适当的处理和算法,保持其原有的性能表现,不会因为这些干扰因素而出现大幅度性能下降。

在实际应用中,稳定性鲁棒性往往是相互制约的。
过于强调稳定性可能导致模型过于简单,无法处理复杂的数据特征;
而过于强调鲁棒性可能导致模型过于复杂,容易受到噪声和异常值的影响。
因此,需要根据实际应用场景和数据特点来权衡考虑这两种性能指标,以实现最优的性能表现。

正则化可以通过对模型的复杂性进行惩罚,使得模型对于输入数据的小变化不会产生太大的影响,从而提高了模型的稳定性鲁棒性

2.3. 提高泛化能力

泛化能力是指模型在未曾见过的数据上的表现能力,也就是模型对于新的数据的适应能力。

正则化可以通过对模型的复杂性进行惩罚,使得模型更加专注于训练数据中的重要特征,而不是被训练数据中的噪声和异常值所迷惑。
这样可以在一定程度上提高模型的泛化能力,使得模型在未知数据上的表现更好。

3. 总结

scikit-learn中,主要有三种正则化方法,L1正则化,L2正则化和Max正则化。
实际应用中,根据数据的特征和场景对数据选择不同的正则化方法,使得训练后的模型能够有更好的精度和性能。文章来源地址https://www.toymoban.com/news/detail-760146.html

到了这里,关于【scikit-learn基础】--『预处理』之 正则化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【scikit-learn基础】--概述

    Scikit-learn 是一个基于 Python 的开源机器学习库,它提供了大量的机器学习算法和工具,方便用户进行数据挖掘、分析和预测。 Scikit-learn 是基于另外两个知名的库 Scipy 和 Numpy 的, 关于 Scipy 和 Numpy 等库,之前的系列文章中有介绍: Scipy 基础系列 Numpy 基础系列 自从 AlphaGo 再度

    2024年02月05日
    浏览(42)
  • 【scikit-learn基础】--『回归模型评估』之偏差分析

    模型评估 在统计学和机器学习中具有至关重要,它帮助我们主要目标是量化模型预测新数据的能力。 本篇主要介绍 模型评估 时,如何利用 scikit-learn 帮助我们快速进行各种 偏差 的分析。 R² 分数 (也叫 决定系数 ),用于衡量模型预测的拟合优度,它表示模型中 因变量 的

    2024年01月24日
    浏览(46)
  • 【scikit-learn基础】--『回归模型评估』之误差分析

    模型评估 在统计学和机器学习中具有至关重要,它帮助我们主要目标是量化模型预测新数据的能力。 在这个数据充斥的时代,没有评估的模型就如同盲人摸象,可能带来误导和误判。 模型评估 不仅是一种方法,更是一种保障,确保我们在数据海洋中航行时,能够依赖准确的

    2024年01月22日
    浏览(45)
  • 【scikit-learn基础】--『数据加载』之外部数据集

    这是 scikit-learn 数据加载系列的最后一篇,本篇介绍如何加载 外部的数据集 。 外部数据集 不像之前介绍的几种类型的数据集那样,针对每种数据提供对应的接口,每个接口加载的数据都是固定的。 而外部数据集加载之后,数据的字段和类型是不确定的。 简单来说,我们在

    2024年02月05日
    浏览(47)
  • 【scikit-learn基础】--『数据加载』之玩具数据集

    机器学习的第一步是准备数据,好的数据能帮助我们加深对机器学习算法的理解。 不管是在学习还是实际工作中, 准备数据 永远是一个枯燥乏味的步骤。 scikit-learn 库显然看到了这个痛点,才在它的 数据加载 子模块中为我们准备了直接可用的数据集。 在它的 数据加载 子模

    2024年02月05日
    浏览(61)
  • 【scikit-learn基础】--『数据加载』之真实数据集

    上一篇介绍了 scikit-learn 中的几个玩具数据集,本篇介绍 scikit-learn 提供的一些真实的数据集。 玩具数据集:scikit-learn 基础(01)--『数据加载』之玩具数据集 与玩具数据集不同,真实的数据集的数据不仅数据特征多,而且数据量也比较大, 所以没有直接包含在 scikit-learn 库中。

    2024年02月05日
    浏览(42)
  • 【scikit-learn基础】--『数据加载』之样本生成器

    除了内置的数据集, scikit-learn 还提供了随机样本的生成器。 通过这些生成器函数,可以生成具有特定特性和分布的随机数据集,以帮助进行机器学习算法的研究、测试和比较。 目前, scikit-learn 库( v1.3.0 版)中有 20个 不同的生成样本的函数。 本篇重点介绍其中几个具有代

    2024年02月05日
    浏览(46)
  • 机器学习-决策树-回归-CPU(中央处理单元)数据-python scikit-learn

    决策树是一种监督机器学习算法,用于回归和分类任务。树是可以处理复杂数据集的强大算法。 决策树特性: 不需要数值输入数据进行缩放。无论数值是多少,决策树都不在乎。 不同于其他复杂的学习算法,决策树的结果是可以解释的,决策树不是黑盒类型的模型。 虽然大

    2024年02月20日
    浏览(37)
  • 机器学习基础07-模型选择01-利用scikit-learn 基于Pima 数据集对LogisticRegression算法进行评估

    选择合适的模型是机器学习和深度学习中非常重要的一步,它直接影响到模型的性能和泛化能力。 “所有模型都是坏的,但有些模型是有用的”。建立模型之后就要去评 估模型,确定模型是否有用。模型评估是模型开发过程中不可或缺的一部 分,有助于发现表达数据的最佳

    2024年02月14日
    浏览(47)
  • 【数据科学】Scikit-learn

    Scikit-learn 是 开源的Python库 ,通过统一的界面实现 机器学习 、 预处理 、 交叉验证及可视化算法 。   以上是使用 scikit-learn 库 进行 k-最近邻(KNN)分类 的流程,得到 KNN 分类器在 iris 数据集上的预测准确率。    Scikit-learn 处理的数据是 存储为 NumPy 数组或 SciPy 稀疏矩阵

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包