机器学习:特征工程之特征预处理

这篇具有很好参考价值的文章主要介绍了机器学习:特征工程之特征预处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

特征预处理

1、简述

2、内容

3、归一化

3.1、鲁棒性

3.2、存在的问题

4、标准化


⭐所属专栏:人工智能

文中提到的代码如有需要可以私信我发给你😊

特征预处理

1、简述

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

什么是特征预处理:scikit-learn的解释:

provides several common utility functions and transformer classes to change raw feature vectors into a representation that is more suitable for the downstream estimators.

翻译过来:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

详述:

特征预处理是机器学习和数据分析中的一个重要步骤,它旨在将原始数据转换为适合机器学习算法的形式,以提高模型的性能和稳定性。特征预处理涵盖了一系列数据转换和处理操作,用于清洗、归一化、缩放、编码等,以确保输入特征的质量和一致性。以下是特征预处理的一些常见操作和方法:

  1. 数据清洗和处理:处理缺失值、异常值和噪声,确保数据的完整性和准确性。常见的方法包括填充缺失值、平滑噪声、剔除异常值等。
  2. 特征缩放:将不同尺度的特征缩放到相似的范围,以避免某些特征对模型的影响过大。常见的特征缩放方法有标准化(Z-score标准化)和归一化(Min-Max缩放)。
  3. 特征选择:选择对目标变量有重要影响的特征,减少维度和噪声,提高模型的泛化能力。常见的特征选择方法有基于统计指标的方法(如方差选择、卡方检验)、基于模型的方法(如递归特征消除)、以及基于嵌入式方法(如L1正则化)。
  4. 特征转换:将原始特征转换为更适合模型的形式,如多项式特征、交叉特征、主成分分析(PCA)等。这可以帮助模型更好地捕捉数据的模式和结构。
  5. 特征编码:将非数值型的特征转换为数值型的形式,以便机器学习算法处理。常见的编码方法有独热编码(One-Hot Encoding)和标签编码(Label Encoding)。
  6. 文本特征提取:将文本数据转换为数值特征表示,如词袋模型、TF-IDF特征提取等,以便用于文本分析和机器学习。
  7. 特征组合和交叉:将多个特征进行组合或交叉,创建新的特征以捕捉更多的信息。这有助于挖掘特征之间的相互作用。
  8. 数据平衡处理:在处理不平衡数据集时,可以使用欠采样、过采样等方法来平衡正负样本的数量,以避免模型偏向于多数类。

特征预处理的目标是使数据更适合机器学习模型,提高模型的性能和稳定性,并且能够更好地捕捉数据的特征和模式。正确的特征预处理可以显著影响机器学习模型的结果和效果。不同的数据类型和问题可能需要不同的特征预处理方法,因此在进行特征预处理时需要根据具体情况进行选择和调整。

2、内容

包含内容:数值型数据的无量纲化:归一化、标准化 (二者放在后面详述)

什么是无量纲化:

无量纲化(Dimensionality Reduction)是特征工程的一部分,指的是将数据特征转换为合适的尺度或形式,以便更好地适应机器学习算法的要求。无量纲化的目的是减少特征的维度,同时保留数据中的重要信息,从而降低计算成本、避免维度灾难,并提高模型的性能和泛化能力。

无量纲化可以分为两种常见的方法:

①特征缩放(Feature Scaling):特征缩放是将特征的数值范围调整到相似的尺度,以便机器学习算法更好地工作。特征缩放的常见方法包括归一化和标准化。

        归一化(Min-Max Scaling):将特征缩放到一个特定的范围,通常是[0, 1]。

        标准化(Z-score Scaling):将特征缩放为均值为0,标准差为1的分布。

②降维(Dimensionality Reduction):降维是将高维特征空间映射到低维空间,以减少特征数量并去除冗余信息,从而提高计算效率和模型性能。常见的降维方法包括主成分分析(PCA)和线性判别分析(LDA)等。

        主成分分析(PCA):通过线性变换将原始特征投影到新的坐标轴上,使得投影后的数据具有最大的方差。这些新坐标轴称为主成分,可以按照方差的大小选择保留的主成分数量,从而降低数据的维度。

        线性判别分析(LDA):在降维的同时,尽可能地保留类别之间的区分性信息,适用于分类问题。

无量纲化可以帮助解决特征维度不一致、尺度不同等问题,使得机器学习算法能够更准确地学习数据的模式和结构。选择适当的无量纲化方法取决于数据的特点、问题的要求以及模型的性能。

特征预处理使用的API:sklearn.preprocessing

为什么我们要进行归一化/标准化?

特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征

3、归一化

定义:通过对原始数据进行变换把数据映射到(默认为[0,1])之间

公式:

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

API:

sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )

MinMaxScalar.fit_transform(X)

X:numpy array格式的数据[n_samples,n_features]

返回值:转换后的形状相同的array

下面分析会用到一组数据,名为dating.txt。展现如下:

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

实现:

关键代码解读:
    transfer = MinMaxScaler(feature_range=(2, 3)):
        实例化一个MinMaxScaler转换器对象,其中feature_range=(2, 3)表示将数据缩放到范围为[2, 3]之间。
    data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']]):
        使用fit_transform方法将选定的特征('milage', 'Liters', 'Consumtime')进行最小-最大归一化处理。
        fit_transform方法首先计算出特征的最小值和最大值,然后将数据进行线性缩放,使其在指定的范围内。

# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2023/8/15 21:52
import pandas as pd
from sklearn.preprocessing import MinMaxScaler  # 最大最小值归一化转换器

'''
归一化处理。
关键代码解读:
    transfer = MinMaxScaler(feature_range=(2, 3)):
        实例化一个MinMaxScaler转换器对象,其中feature_range=(2, 3)表示将数据缩放到范围为[2, 3]之间。
    data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']]):
        使用fit_transform方法将选定的特征('milage', 'Liters', 'Consumtime')进行最小-最大归一化处理。
        fit_transform方法首先计算出特征的最小值和最大值,然后将数据进行线性缩放,使其在指定的范围内。
'''
def min_max_demo():
    """
    归一化演示
    """
    data = pd.read_csv("data/dating.txt",delimiter="\t")
    print(data)
    # 1、实例化一个转换器类
    transfer = MinMaxScaler(feature_range=(2, 3))
    # 2、调用fit_transform
    data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])
    print("最小值最大值归一化处理的结果:\n", data)

if __name__ == '__main__':
    min_max_demo()

打印结果:

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

手动计算(取前9行数据):

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

计算坐标为(0,0)的元素,总的计算流程为:[(40920-14488)/(75136-14488)] * (3-2)+2 = 2.435826408≈2.43582641

该结果与程序吻合!!

3.1、鲁棒性

鲁棒性(Robustness)是指在面对异常值、噪声和其他不完美情况时,系统能够继续正常工作并保持良好性能的能力。在数据分析、统计学和机器学习中,鲁棒性是一个重要的概念,指的是算法或方法对异常值和数据扰动的敏感程度。一个鲁棒性强的方法在存在异常值或数据变动时能够保持稳定的性能,而鲁棒性较差的方法可能会对异常值产生过度敏感的响应。

在数据处理和分析中,鲁棒性的重要性体现在以下几个方面:

  1. 异常值处理:鲁棒性的方法能够有效地识别和处理异常值,而不会因为异常值的存在导致结果的严重偏差。
  2. 模型训练:在机器学习中,使用鲁棒性的算法可以减少异常值对模型训练的影响,防止过拟合,并提高模型的泛化能力。
  3. 特征工程:在特征工程过程中,选择鲁棒性的特征提取方法可以确保提取的特征对异常值不敏感。
  4. 统计分析:鲁棒性的统计方法能够减少异常值对统计分析结果的影响,使得分析结果更可靠。

一些常见的鲁棒性方法包括:

  • 中位数(Median):在数据中,中位数对异常值的影响较小,相对于平均值具有更强的鲁棒性。
  • 百分位数(Percentiles):百分位数可以帮助识别数据分布的位置和离散程度,对异常值的影响较小。
  • Z-score标准化:Z-score标准化将数据转化为均值为0、标准差为1的分布,能够对抗异常值的影响。
  • IQR(四分位距)方法:使用四分位距来定义异常值的界限,对极端值具有一定的容忍度。
  • 鲁棒性回归:使用鲁棒性回归方法可以减少异常值对回归模型的影响。

总之,鲁棒性是数据分析和机器学习中一个重要的考虑因素,能够保证在现实世界中面对多样性和不确定性时,方法和模型仍能保持有效性和稳定性。

3.2、存在的问题

使用归一化处理,如果数据中异常点较多,会有什么影响?

在数据中存在较多异常点的情况下,使用归一化处理可能会受到一些影响。归一化是将数据缩放到特定范围内的操作,但异常点的存在可能会导致以下影响:

  1. 异常点的放大:归一化可能会导致异常点在缩放后的范围内被放大。如果异常点的值较大,归一化后它们可能会被映射到特定范围的边缘,从而导致数据在正常值范围内分布不均匀。
  2. 降低数据的区分性:异常点可能导致归一化后的数据失去一部分原始数据的分布特征。数据特征的差异性可能被模糊化,从而降低模型的区分能力和准确性。
  3. 对模型的影响:在机器学习中,模型通常会受到输入数据的影响。异常点可能会干扰模型的训练,使其难以捕捉正常数据的模式,导致模型的性能下降。
  4. 过拟合的风险:如果异常点被放大或影响了数据的分布,模型可能会过拟合异常点,而忽略了正常数据的重要特征。

为了应对异常点对归一化处理的影响,可以考虑以下策略:

  • 异常点检测和处理:在进行归一化之前,首先要进行异常点检测,并根据异常点的性质和数量采取适当的处理措施。可以选择删除异常点、使用异常点修正方法或将异常点映射到更合理的范围。
  • 使用鲁棒性方法:某些归一化方法对异常点的影响较小,例如中心化和缩放(例如Z-score标准化),它们对异常值的影响较小,因为它们基于数据的分布特性。
  • 尝试其他特征预处理方法:如果异常点较多且归一化效果不好,可以尝试其他特征预处理方法,如对数变换、截断、缩尾等。

总之,处理异常点是特征预处理的重要步骤,需要根据数据的特点和问题的需求来选择适当的策略。

这里使用标准化解决这个问题

4、标准化

定义:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

公式:

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

标准差:

        机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

所以实际上标准化的公式为:

        机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理 

参数如下:

        x为当前值

        mean为平均值

        N 表示数据的总个数

        xi 表示第 i 个数据点

        μ 表示数据的均值

归一化的异常点:

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

标准化的异常点:

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变

对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小

API:

sklearn.preprocessing.StandardScaler( )

处理之后每列来说所有数据都聚集在均值0附近标准差差为1

StandardScaler.fit_transform(X)

X:numpy array格式的数据[n_samples,n_features]

返回值:转换后的形状相同的array

import pandas as pd
from sklearn.preprocessing import StandardScaler  # 标准化

'''
sklearn.preprocessing.StandardScaler( ) 
    处理之后每列来说所有数据都聚集在均值0附近标准差差为1
    StandardScaler.fit_transform(X)
    X:numpy array格式的数据[n_samples,n_features]
    返回值:转换后的形状相同的array
'''
def stand_demo():
    """
    标准化演示
    :return: None
    """
    data = pd.read_csv("data/dating.txt", delimiter="\t")
    print(data)
    # 1、实例化一个转换器类
    transfer = StandardScaler()
    # 2、调用fit_transform
    data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])
    print("标准化的结果:\n", data)
    print("每一列特征的平均值:\n", transfer.mean_)
    print("每一列特征的方差:\n", transfer.var_)

if __name__ == '__main__':
    stand_demo()

输出结果:

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

手动计算验证(取前8行数据),公式回顾如下:

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

机器学习:特征工程之特征预处理,人工智能,机器学习,人工智能,chatgpt,python,特征工程,特征预处理

手动计算坐标为(0,0)的数据的标准化数据:

        40920-43318.375=-2398.375

        N=8,μ=43318.375 -> (40920-43318.375)^2+(14488-43318.375)^2+(26052-43318.375)^2+(75136-43318.375)^2+(38344-43318.375)^2+(72993-43318.375)^2+(35948-43318.375)^2+(42666-43318.375)^2=3107507487.875

        3107507487.875 / 8 = 388438435.984375

        根号下388438435.984375 = 19708.84156880802

最终:

        x-mean=-2398.375

        标准差=19708.84156880802

最后标准化后的数据结果为:-2398.375 / 19708.84156880802 = 0.121690307957813291 ≈ 0.12169031

与程序结果完全吻合!

标准化总结:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

 文章来源地址https://www.toymoban.com/news/detail-651134.html

到了这里,关于机器学习:特征工程之特征预处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)

    本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻

    2024年02月19日
    浏览(34)
  • python机器学习(三)特征预处理、鸢尾花案例--分类、线性回归、代价函数、梯度下降法、使用numpy、sklearn实现一元线性回归

    数据预处理的过程。数据存在不同的量纲、数据中存在离群值,需要稳定的转换数据,处理好的数据才能更好的去训练模型,减少误差的出现。 标准化 数据集的标准化对scikit-learn中实现的大多数机器学习算法来说是常见的要求,很多案例都需要标准化。如果个别特征或多或

    2024年02月16日
    浏览(31)
  • 数据预处理的人工智能与深度学习:如何提高模型性能

    数据预处理是人工智能(AI)和深度学习(DL)领域中的一个关键环节,它涉及到数据清洗、数据转换、数据归一化、数据增强等多种操作,以提高模型性能。在过去的几年里,随着数据规模的增加和复杂性的提高,数据预处理的重要性得到了广泛认识。本文将从以下几个方面进行

    2024年02月19日
    浏览(53)
  • 机器学习(8)---数据预处理

     1. 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。 譬如梯度和矩阵为核心的算法中,譬如逻辑回归,支持向量机,神经网络,无量纲化可以加快求解速度. 而在

    2024年02月09日
    浏览(30)
  • 机器学习实战4-数据预处理

    导库 归一化 另一种写法 将归一化的结果逆转 用numpy实现归一化 逆转 导库 实例化 查看属性 查看结果 逆标准化 关于如何选择这两种无量纲化的方式要具体问题具体分析,但是我们一般在机器学习算法中选择标准化,这就好比我们能让他符合标准正态分布为什么不呢?而且

    2024年02月13日
    浏览(35)
  • 机器学习流程—数据预处理 缩放和转换

    相信机器学习的从业者,一定听到到过“特征缩放”这个术语,它被认为是数据处理周期中不可跳过的部分,因进行相应的操作们可以实现 ML 算法的稳定和快速训练。在本文中,我们将了解在实践中用于执行特征缩放的不同技术。 不同评价指标往往具有不同的 量纲 和量纲单

    2024年03月11日
    浏览(34)
  • 【Python机器学习】SVM——预处理数据

    为了解决特征特征数量级差异过大,导致的模型过拟合问题,有一种方法就是对每个特征进行缩放,使其大致处于同一范围。核SVM常用的缩放方法是将所有的特征缩放到0和1之间。 “人工”处理方法: 可以看到,最终的结果上训练集和测试集的精度都非常好,但还没有接近

    2024年01月17日
    浏览(28)
  • 【机器学习6】数据预处理(三)——处理类别数据(有序数据和标称数据)

    在【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值这一篇文章中,主要说明热数据预处理的重要性以及如何处理缺失值及异常值这些数值特征。然而,在现实生活中遇到的数据集往往不仅仅只会包含 数值型特征 ,还会包含一个或者多个 类别特征

    2024年02月12日
    浏览(29)
  • 【机器学习】数据预处理 - 归一化和标准化

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 处理数据之前,通常会使用一些转换函数将 「特征数据」 转换成更适合 「

    2024年02月15日
    浏览(39)
  • Python数据分析之特征处理笔记三——特征预处理(特征选择)

    书接上文,进行数据清洗过程后,我们得到了没有空值、异常值、错误值的数据,但想要用海量的数据来建立我们所需要的算法模型,仅仅是数据清洗的过程是不够的,因为有的数据类型是数值,有的是字符,怎样将不同类型的数据联系起来?以及在保证最大化信息量的前提

    2024年02月02日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包