用通俗易懂的方式讲解:数据预处理归一化(附Python代码)

这篇具有很好参考价值的文章主要介绍了用通俗易懂的方式讲解:数据预处理归一化(附Python代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

技术答疑

本文来自技术群小伙伴的分享,想加入按照如下方式

目前开通了技术交流群,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN+技术交流
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群+CSDN

一、为何要进行数据预处理?

  • 任何收集而来的庞大数据往往是不可能一拿到就可以立马用得上的,比如一些数值大的数据,计算量复杂度高,不容易收敛,很难进行统计处理。

  • 数据不符合正态分布,无法做一些符合正态分布的数学分析。

所以为了对数据进行更好的利用,我们需要使数据标准化。

二、数据标准化

数据无量纲化处理主要解决数据的可比性。数据标准化的方法有很多种,常用的有“最小—最大标准化”、“Z-score标准化”和“按小数定标标准化”等。

经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。这里我们重点讨论最常用的数据归一化处理,即将数据统一映射到[0,1]区间上。

1.归一化的目标

1.把数据转换为(0,1)区间的小数, 主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

2.把有量纲表达式变为无量纲表达式,解决数据的可比性。

2.归一化的优点

1.归一化后加快了梯度下降求最优解的速度,如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。

2.归一化有可能提高精度,一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

用通俗易懂的方式讲解:数据预处理归一化(附Python代码)

3.哪些算法并不需要归一化

概率模型(树形模型)不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF。而像Adaboost、SVM、LR、Knn、KMeans之类的最优化问题就需要归一化。

三、数据归一化方法

1.min-max标准化

通过遍历feature vector里的每一个数据,将Max和Min的记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理:其中Max为样本数据的最大值,Min为样本数据的最小值。

def MaxMinNormalization(x,Max,Min):
 
    x = (x - Min) / (Max - Min);
 
    return x;

使用numpy中的np.max()和np.min()就可找到最大和最小值。这种归一化方法比较适用在数值比较集中的情况。这种方法有个缺陷,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。实际使用中可以用经验常量值来替代max和min。

ps: 将数据归一化到[a,b]区间范围的方法:

(1)首先找到原本样本数据X的最小值Min及最大值Max
(2)计算系数:k=(b-a)/(Max-Min)
(3)得到归一化到[a,b]区间的数据:Y=a+k(X-Min) 或者 Y=b+k(X-Max)

2.Z-score标准化

最常见的标准化方法就是Z标准化,也是SPSS中最为常用的标准化方法,spss默认的标准化方法就是z-score标准化。

也叫标准差标准化,这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。

def  Z_ScoreNormalization(x,mu,sigma):
 
    x = (x - mu) / sigma;
 
    return x;

numpy中mean和std函数,sklearn提供的StandardScaler方法都可以求得均值和标准差。标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

下面使用numpy来实现一个矩阵的标准差标准化

import numpy as np

x_np = np.array([[1.5, -1., 2.],
[2., 0., 0.]])
mean = np.mean(x_np, axis=0)
std = np.std(x_np, axis=0)
print(‘矩阵初值为:{}’.format(x_np))
print(‘该矩阵的均值为:{}\n 该矩阵的标准差为:{}’.format(mean,std))
another_trans_data = x_np - mean
another_trans_data = another_trans_data / std
print(‘标准差标准化的矩阵为:{}’.format(another_trans_data))

矩阵初值为:[[ 1.5 -1. 2. ]
[ 2. 0. 0. ]]
该矩阵的均值为: [ 1.75 -0.5 1. ]
该矩阵的标准差为:[0.25 0.5 1. ]
标准差标准化的矩阵为:[[-1. -1. 1.]
[ 1. 1. -1.]]

下面使用sklearn提供的StandardScaler方法

from sklearn.preprocessing import StandardScaler # 标准化工具
import numpy as np

x_np = np.array([[1.5, -1., 2.],
[2., 0., 0.]])
scaler = StandardScaler()
x_train = scaler.fit_transform(x_np)
print(‘矩阵初值为:{}’.format(x_np))
print(‘该矩阵的均值为:{}\n 该矩阵的标准差为:{}’.format(scaler.mean_,np.sqrt(scaler.var_)))
print(‘标准差标准化的矩阵为:{}’.format(x_train))

矩阵初值为:[[ 1.5 -1. 2. ]
[ 2. 0. 0. ]]
该矩阵的均值为: [ 1.75 -0.5 1. ]
该矩阵的标准差为:[0.25 0.5 1. ]
标准差标准化的矩阵为:[[-1. -1. 1.]
[ 1. 1. -1.]]

以发现,sklearn的标准化工具实例化后会有两个属性,一个是mean_(均值),一个var_(方差)。最后的结果和使用numpy是一样的。

为什么z-score 标准化后的数据标准差为1?

x-μ只改变均值,标准差不变,所以均值变为0;(x-μ)/σ只会使标准差除以σ倍,所以标准差变为1。

3.Sigmoid函数:

用通俗易懂的方式讲解:数据预处理归一化(附Python代码)

Sigmoid函数是一个具有S形曲线的函数,是良好的阈值函数,在(0, 0.5)处中心对称,在(0, 0.5)附近有比较大的斜率,而当数据趋向于正无穷和负无穷的时候,映射出来的值就会无限趋向于1和0。根据公式的改变,就可以改变分割阈值,这里作为归一化方法,我们只考虑(0, 0.5)作为分割阈值的点的情况:

用通俗易懂的方式讲解:数据预处理归一化(附Python代码)

from matplotlib import pyplot as plt
import numpy as np
import math


def sigmoid_function(z):
    fz = []
    for num in z:
        fz.append(1 / (1 + math.exp(-num)))
    return fz


if __name__ == '__main__':
    z = np.arange(-10, 10, 0.01)
    fz = sigmoid_function(z)
    plt.title('Sigmoid Function')
    plt.xlabel('z')
    plt.ylabel('σ(z)')
    plt.plot(z, fz)
    plt.show()

总结

主要还是对机器学习中的sklearn提供的StandardScaler方法后发现数据标准化这一概念,对大佬Friedman检验进一步理解。文章来源地址https://www.toymoban.com/news/detail-409119.html

到了这里,关于用通俗易懂的方式讲解:数据预处理归一化(附Python代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【C语言学习——————预处理3000字讲解】

    欢迎阅读新一期的c语言学习模块————预处理 ✒️个人主页:-_Joker_- 🏷️专栏:C语言 📜代码仓库:c_code 🌹🌹 欢迎大佬们的阅读和三连关注,顺着评论回访 🌹🌹 文章目录 什么是预处理 宏定义#define #undef #include  条件编译 #error #pragma 预编译又称为预处理 , 是做些代

    2024年02月14日
    浏览(32)
  • 用通俗易懂的方式讲解:CatBoost 算法原理及案例

    前面已讲了7节,为方便大家学习,我总结在一起,无论是日常实践还是面试使用,都非常方便,喜欢记得收藏 用通俗易懂的方式讲解:逻辑回归模型及案例(Python 代码) 用通俗易懂的方式讲解:决策树模型及案例(Python 代码) 用通俗易懂的方式讲解: 随机森林及案例(

    2024年04月12日
    浏览(31)
  • 用通俗易懂的方式讲解:十分钟读懂 Stable Diffusion 运行原理

    AIGC 热潮正猛烈地席卷开来,可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度,特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性,也在逐渐改变一部分行业的生产模式。惊艳其出色表现,也不禁好奇其背后技术。 之前写过一篇实战类的文章一文

    2024年01月21日
    浏览(44)
  • 用通俗易懂的方式讲解大模型分布式训练并行技术:MOE并行

    前面的文章中讲述了数据并行、流水线并行、张量并行、序列并行、自动并行等多种并行技术。但现在的模型越来越大,训练样本越来越多,每个样本都需要经过模型的全部计算,这就导致了训练成本的平方级增长。 而当我们希望在牺牲极少的计算效率的情况下,把模型规模

    2024年02月02日
    浏览(54)
  • 用通俗易懂的方式讲解:Stable Diffusion WebUI 从零基础到入门

    本文主要介绍 Stable Diffusion WebUI 的实际操作方法,涵盖prompt推导、lora模型、vae模型和controlNet应用等内容,并给出了可操作的文生图、图生图实战示例。适合对Stable Diffusion感兴趣,但又对Stable Diffusion WebUI使用感到困惑的同学。 前面分享了两篇文章:十分钟读懂 Stable Diffusio

    2024年01月17日
    浏览(38)
  • 用通俗易懂的方式讲解:一文讲透主流大语言模型的技术原理细节

    大家好,今天的文章分享三个方面的内容: 1、比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节:tokenizer、位置编码、Layer Normalization、激活函数等。 2、大语言模型的分布式训练技术:数据并行、张量模型并行、流水线并行、3D 并行、零冗余优化器 ZeRO、CPU 卸载技术 ZeRo-offload、

    2024年01月16日
    浏览(48)
  • 用通俗易懂的方式讲解:一文教会你学会 AI 绘画利器 Stable Diffusion

    随着 stable-diffusion 的开源,让更多人有机会直接参与到 AI 绘画的创作中,相关的教程也如雨后春笋般的出现。可是目前我看到的教程同质性较高,通常只能称作为\\\"使用流程讲解\\\",但是通常没有对其原理和逻辑进行深入说明。 所以本文的目的,是用尽可能少的废话,给大家补

    2024年01月18日
    浏览(37)
  • 用通俗易懂的方式讲解大模型:Prompt 提示词在开发中的使用

    OpenAI 的 ChatGPT 是一种领先的人工智能模型,它以其出色的语言理解和生成能力,为我们提供了一种全新的与机器交流的方式。但不是每个问题都可以得到令人满意的答案,如果想得到你所要的回答就要构建好你的提示词 Prompt。本文将探讨 Prompt 提示词在开发中的应用和优势,

    2024年02月03日
    浏览(34)
  • 数据采集与预处理01: 项目1 数据采集与预处理准备

    数据采集:足够的数据量是企业大数据战略建设的基础,因此数据采集成为大数据分析的前站。数据采集是大数据价值挖掘中重要的一环,其后的分析挖掘都建立在数据采集的基础上。大数据技术的意义确实不在于掌握规模庞大的数据信息,而在于对这些数据进行智能处理,

    2024年01月25日
    浏览(45)
  • 数据预处理matlab matlab数据的获取、预处理、统计、可视化、降维

    1.1 从Excel中获取 使用readtable() 例1: 使用 spreadsheetImportOptions(Name,Value) 初步确定导入信息, 再用 opts.Name=Value 的格式添加。 例2: 先初始化 spreadsheetImportOptions 对象, 再用 opts.Name=Value 的格式逐个添加。 例3: 将导入信息存到变量里, 再使用 spreadsheetImportOptions(Name,Value)

    2024年02月15日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包