数据标准化与归一化:解锁数据处理的奥秘

devtools/2024/10/23 21:46:42/

引言

在数据科学和机器学习领域,数据预处理是一个不可或缺的步骤。而在这其中,数据标准化与归一化更是两个经常被提及但又容易被误解的概念。无论是进行特征缩放以优化模型性能,还是在数据可视化时保持图形的可读性,数据标准化与归一化都有着举足轻重的作用。本文将带你深入了解这两个概念,通过基础语法介绍、实例演示以及实战案例分析,帮助你掌握数据标准化与归一化的精髓。

基础语法介绍

核心概念

  • 数据标准化(Standardization):也称为Z-score标准化,是将数据按比例缩放,使之落入一个小的特定区间,如[-1,1]或[0,1]。在数学上,它是通过计算每个值减去平均值后除以标准差来实现的。标准化后的数据符合标准正态分布,即均值为0,标准差为1。

  • 数据归一化(Normalization):通常指Min-Max归一化,即将原始数据线性变换到[0,1]区间。归一化可以保留原始数据之间的相对关系,适用于最大值和最小值已知的情况。

基本语法规则

Python中,我们可以使用scikit-learn库中的StandardScalerMinMaxScaler来轻松实现数据的标准化和归一化。

from sklearn.preprocessing import StandardScaler, MinMaxScaler
import numpy as np# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 数据标准化
scaler = StandardScaler()
data_standardized = scaler.fit_transform(data)
print("标准化后的数据:\n", data_standardized)# 数据归一化
scaler = MinMaxScaler()
data_normalized = scaler.fit_transform(data)
print("归一化后的数据:\n", data_normalized)

基础实例

问题描述

假设我们有一个包含年龄和收入的数据集,年龄范围从20岁到60岁,收入范围从20000元到80000元。我们希望对这些数据进行标准化和归一化处理,以便更好地进行后续的机器学习建模。

代码示例

import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler# 创建示例数据集
data = {'Age': [20, 30, 40, 50, 60],'Income': [20000, 30000, 40000, 50000, 80000]}
df = pd.DataFrame(data)# 数据标准化
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print("标准化后的数据:\n", df_standardized)# 数据归一化
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print("归一化后的数据:\n", df_normalized)

进阶实例

问题描述

在实际应用中,数据集可能包含缺失值、异常值等复杂情况。如何在处理这些问题的同时进行数据标准化和归一化?

高级代码实例

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.impute import SimpleImputer# 创建含有缺失值的示例数据集
data = {'Age': [20, 30, 40, 50, 60, None],'Income': [20000, 30000, 40000, 50000, 80000, 70000]}
df = pd.DataFrame(data)# 处理缺失值
imputer = SimpleImputer(strategy='mean')
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)# 数据标准化
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df_imputed), columns=df.columns)
print("处理缺失值后标准化的数据:\n", df_standardized)# 数据归一化
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df_imputed), columns=df.columns)
print("处理缺失值后归一化的数据:\n", df_normalized)

实战案例

问题描述

在一个电商推荐系统项目中,我们需要根据用户的购买历史和浏览行为来推荐商品。然而,不同用户的行为数据量差异很大,直接使用原始数据会导致模型偏向于数据量较大的用户。因此,我们需要对用户行为数据进行标准化和归一化处理,以确保模型的公平性和准确性。

解决方案

  1. 数据收集与预处理:收集用户的历史购买记录和浏览行为,清洗数据,处理缺失值和异常值。
  2. 数据标准化与归一化:对用户行为数据进行标准化和归一化处理,确保不同用户的数据具有可比性。
  3. 模型训练与评估:使用处理后的数据训练推荐模型,并进行交叉验证和性能评估。

代码实现

import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 加载数据
data = pd.read_csv('user_behavior.csv')# 处理缺失值
imputer = SimpleImputer(strategy='mean')
data_imputed = pd.DataFrame(imputer.fit_transform(data), columns=data.columns)# 数据标准化
scaler = StandardScaler()
data_standardized = pd.DataFrame(scaler.fit_transform(data_imputed), columns=data.columns)# 数据归一化
scaler = MinMaxScaler()
data_normalized = pd.DataFrame(scaler.fit_transform(data_imputed), columns=data.columns)# 划分训练集和测试集
X = data_normalized.drop('Target', axis=1)
y = data_normalized['Target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)# 评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

扩展讨论

数据标准化与归一化的选择

  • 标准化:适用于数据分布接近正态分布的情况,特别是当数据存在较大波动时。标准化后的数据不受量纲的影响,适用于距离相关的算法,如K-means聚类和SVM。
  • 归一化:适用于数据分布不明确或数据存在极端值的情况。归一化后的数据范围固定,适用于神经网络和梯度下降等优化算法。

其他常见的数据预处理方法

  • 对数变换:适用于数据分布严重偏斜的情况,通过取对数可以压缩数据范围,使数据更加平滑。
  • Box-Cox变换:一种广义的幂变换方法,可以将非正态分布的数据转换为近似正态分布。
  • RobustScaler:基于中位数和四分位数进行缩放,适用于数据中存在大量异常值的情况。

http://www.ppmy.cn/devtools/128257.html

相关文章

MT4跟单系统开发

文章目录 前言一、managerAPI方式跟单1、轮训的方式2、Pumping的方式 二、serverAPI方式跟单三、逆向抓包模拟客户端方式跟单 前言 如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3 本文讲解一下MT4跟单软件的开发的几种方法以及原理。 一、managerAPI方式…

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行 引言 在现代应用开发中,随着业务需求的增长,数据库表结构和数据往往需要进行迁移和更新。迁移(Migration)是指对数据库表的结构、数据类型、索引、约束等进行修改或更新…

知识付费小程序:轻松实现一站式运营,开启知识变现之旅

在当今数字化时代,知识付费已成为一种趋势,为内容创作者和知识提供者提供了广阔的商业机会。而知识付费小程序的出现,更是为实现一站式运营和开启知识变现之旅提供了便捷高效的解决方案。 一、便捷的内容创作与管理 知识付费小程序为创作者…

MYSQL基础快速入门

1. SQL类型 1.1 DDL DDL:data definition language(操作数据库或表时需加database或table)用来定义数据库对象:数据库,表,列等,例如创建、删除、修改:数据库、表结构等 规范: 1.不要使用关键字命名一个表…

[PHP]重复的Notice错误信息

<?php $a []; var_dump($a[name]);执行结果&#xff1a; 原因&#xff1a; display_errors和error_reporting都打开了Notice错误信息

Centos7 安装部署Zookeeper

官网地址&#xff1a;https://zookeeper.apache.org/ 1. Zookeeper 介绍 Apache ZooKeeper是一个开源的分布式协调服务&#xff0c;它用于维护配置信息、命名、提供分布式同步以及提供组服务等。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来&#x…

无法获得下列许可 SOLIDWORKS Standard. 客户机的 FLEXlm 版本比服务器的还新。(-83.147.0)

无法获得下列许可 SOLIDWORKS Standard. 客户机的 FLEXlm 版本比服务器的还新。(-83.147.0) 错误如图 打开xxclean 扩展功能 无法获得下列许可 选择版本点确定

听泉鉴宝在三个月前已布局商标注册!

近日“听泉鉴宝”以幽默的风格和节目效果迅速涨粉至2500多万&#xff0c;连线出现“馆藏文物”和“盗墓现场”等内容&#xff0c;听泉鉴宝早在几个月前已布局商标注册。 据普推知产商标老杨在商标局网站检索发现&#xff0c;“听泉鉴宝”的主人丁某所持股的江苏灵匠申请了三十…