简介
在Python数据科学和机器学习领域,对数值进行归一化是一种关键的预处理技术,有助于将原始数据转换为标准化格式。本教程将探讨各种缩放和归一化数值数据的方法,为开发者和数据科学家提供实用策略,以提高模型性能和数据分析的准确性。
在Python数据科学和机器学习领域,对数值进行归一化是一种关键的预处理技术,有助于将原始数据转换为标准化格式。本教程将探讨各种缩放和归一化数值数据的方法,为开发者和数据科学家提供实用策略,以提高模型性能和数据分析的准确性。
归一化是一种基本的数据预处理技术,用于将数值特征缩放到一个标准范围,通常是0到1之间,或者均值为0且标准差为1。这个过程有助于:
| 归一化类型 | 公式 | 范围 | 使用场景 |
|---|---|---|---|
| 最小-最大缩放 | (x - min(x)) / (max(x) - min(x)) | 0 - 1 | 需要有界值时 |
| Z分数归一化 | (x - μ) / σ | 以0为中心 | 分布很重要时 |
| 稳健缩放 | (x - median(x)) / IQR | 处理异常值 | 数据有偏态或富含异常值时 |
import numpy as np
from sklearn.preprocessing import MinMaxScaler, StandardScaler
## 示例数据
data = np.array([1, 2, 3, 4, 5])
## 最小-最大缩放
min_max_scaler = MinMaxScaler()
normalized_data = min_max_scaler.fit_transform(data.reshape(-1, 1))
## Z分数归一化
standard_scaler = StandardScaler()
standardized_data = standard_scaler.fit_transform(data.reshape(-1, 1))
归一化在以下场景中至关重要:
在LabEx,我们建议在选择归一化技术之前先了解底层数据分布。
缩放方法用于转换数值数据,使其更适合机器学习算法和统计分析。每种方法都有独特的特点和理想的使用场景。
from sklearn.preprocessing import MinMaxScaler
import numpy as np
## 示例数据
data = np.array([1, 2, 3, 4, 5, 100])
## 最小-最大缩放
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data.reshape(-1, 1))
print(normalized_data)
from sklearn.preprocessing import StandardScaler
## 示例数据
data = np.array([1, 2, 3, 4, 5, 100])
## Z分数归一化
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data.reshape(-1, 1))
print(standardized_data)
from sklearn.preprocessing import RobustScaler
## 示例数据
data = np.array([1, 2, 3, 4, 5, 100])
## 稳健缩放
scaler = RobustScaler()
robust_scaled_data = scaler.fit_transform(data.reshape(-1, 1))
print(robust_scaled_data)
| 方法 | 范围 | 异常值敏感度 | 分布保留情况 | 典型使用场景 |
|---|---|---|---|---|
| 最小-最大 | [0, 1] | 高 | 中等 | 神经网络 |
| Z分数 | 以0为中心 | 中等 | 适合正态分布 | 线性模型 |
| 稳健 | 基于中位数 | 低 | 适合偏态数据 | 富含异常值的数据集 |
在LabEx,我们建议尝试不同的缩放技术,以找到最适合你特定数据集的方法。
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
## 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
## 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
## 归一化特征
scaler = StandardScaler()
X_train_normalized = scaler.fit_transform(X_train)
X_test_normalized = scaler.transform(X_test)
## 训练支持向量机分类器
classifier = SVC()
classifier.fit(X_train_normalized, y_train)
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
## 示例股票价格数据
stock_prices = np.array([
[100, 105, 98],
[200, 210, 190],
[50, 55, 48]
])
## 创建最小-最大缩放器
scaler = MinMaxScaler()
normalized_prices = scaler.fit_transform(stock_prices)
import numpy as np
from sklearn.preprocessing import RobustScaler
## 模拟图像像素数据
image_data = np.random.randint(0, 255, size=(100, 28, 28))
## 展平并归一化图像数据
flattened_images = image_data.reshape(100, -1)
robust_scaler = RobustScaler()
normalized_images = robust_scaler.fit_transform(flattened_images)
| 场景 | 最佳缩放方法 | 关键考虑因素 |
|---|---|---|
| 神经网络 | 最小-最大 | 有界输入范围 |
| 支持向量机分类 | Z分数 | 零中心数据 |
| 回归 | 稳健缩放 | 抗异常值能力 |
def custom_normalization(data, method='zscore'):
if method == 'zscore':
return (data - np.mean(data)) / np.std(data)
elif method =='minmax':
return (data - np.min(data)) / (np.max(data) - np.min(data))
else:
raise ValueError("Invalid normalization method")
## 示例用法
data = np.array([1, 2, 3, 4, 5])
normalized_data = custom_normalization(data, method='minmax')
通过理解并在Python中实现归一化技术,数据专业人员能够有效地对其数值数据进行标准化,减少特征方差,并提升机器学习算法的性能。本教程中讨论的技术提供了一种全面的方法来处理数值数据预处理,从而实现更稳健、可靠的数据分析和模型训练。