以下是使用 scikit-learn
对数据进行常见预处理的代码示例:
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
from sklearn.model_selection import train_test_split
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据标准化
scaler = StandardScaler()
X_standardized = scaler.fit_transform(X)
# 数据归一化
min_max_scaler = MinMaxScaler()
X_normalized = min_max_scaler.fit_transform(X)
# 处理缺失值(假设数据中有缺失值)
imputer = SimpleImputer(strategy='mean')
X_with_missing_values = [[1, 2, None], [4, None, 6], [7, 8, 9]] # 示例数据,包含缺失值
X_imputed = imputer.fit_transform(X_with_missing_values)
# 编码分类变量
encoder = OneHotEncoder()
categorical_data = [[0], [1], [2], [0]] # 示例分类数据
X_encoded = encoder.fit_transform(categorical_data).toarray()
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
划分数据集结果:
训练集特征:
[[3 4]
[7 8]
[1 2]
[9 10]]
测试集特征:
[[5 6]]
训练集标签:
[1 1 0 0]
测试集标签:
[0]
在 scikit-learn
中,用于数据标准化的主要 API 有:
StandardScaler
:它通过移除均值并缩放到单位方差来标准化特征。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
标准化后的数据集:
[[-1.22474487 -1.22474487]
[ 0. 0. ]
[ 1.22474487 1.22474487]]
RobustScaler
:这个缩放器对异常值更具鲁棒性,它使用中位数和四分位数范围进行缩放。
from sklearn.preprocessing import RobustScaler
robust_scaler = RobustScaler()
X_robust_scaled = robust_scaler.fit_transform(X)
在 scikit-learn
中,用于数据归一化的常见 API 有:
MinMaxScaler
:将特征值缩放到给定的范围(通常是 0 到 1 之间)。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)
归一化后的数据集:
[[0. 0. ]
[0.5 0.5 ]
[1. 1. ]]
MaxAbsScaler
:将每个特征值除以其绝对值的最大值,使特征值范围在 -1 到 1 之间。
from sklearn.preprocessing import MaxAbsScaler
scaler = MaxAbsScaler()
X_scaled = scaler.fit_transform(X)
在 scikit-learn
中,用于处理缺失值的主要 API 是 SimpleImputer
from sklearn.impute import SimpleImputer
import numpy as np
# 示例数据,包含缺失值
X = np.array([[1, 2, np.nan],
[4, np.nan, 6],
[7, 8, 9]])
# 创建 SimpleImputer 对象
imputer = SimpleImputer(strategy='mean') # 可以选择'mean'(均值)、'median'(中位数)、'most_frequent'(众数)等策略
# 填充缺失值
X_imputed = imputer.fit_transform(X)
print(X_imputed)
填充缺失值后的数据集:
[[1. 2. 5.]
[4. 5. 6.]
[7. 8. 9.]]
在上述示例中,通过指定 strategy
参数来选择填充缺失值的策略,比如使用均值、中位数或众数来填充。
在 scikit-learn
中,用于编码分类变量的常见 API 有:
OneHotEncoder
:将分类变量转换为独热编码(One-Hot Encoding)。
from sklearn.preprocessing import OneHotEncoder
import numpy as np
# 示例分类数据
categorical_data = np.array([['red'], ['blue'], ['green'], ['red']])
encoder = OneHotEncoder(sparse=False) # 设置 sparse=False 以获取密集数组
encoded_data = encoder.fit_transform(categorical_data)
print(encoded_data)
独热编码后的数据集:
[[0. 0. 1.]
[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]]
LabelEncoder
:将分类标签编码为 0 到 n_classes-1 之间的整数。
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
labels = ['cat', 'dog', 'cat', 'bird']
encoded_labels = label_encoder.fit_transform(labels)
print(encoded_labels)