利用sklearn.utils在Python中进行特征工程
发布时间:2023-12-15 18:47:57
特征工程是机器学习中一个重要的环节,它涉及到从原始数据中提取、转换和选择特征,以便更好地进行机器学习模型的训练和预测。sklearn.utils 是Scikit-learn库中的一个模块,提供了一些实用函数来辅助特征工程的实施。下面将介绍几个常用的特征工程函数,并给出使用实例。
1. shuffle:对数据进行洗牌
shuffle函数用于对数据进行洗牌,这样可以打乱数据的顺序,防止模型学习到数据的特定顺序。
示例代码:
from sklearn import utils # 原始数据 X = [[1, 2], [3, 4], [5, 6], [7, 8]] y = [0, 1, 0, 1] # 洗牌后的数据 X_shuffle, y_shuffle = utils.shuffle(X, y) print(X_shuffle) print(y_shuffle)
输出结果:
[[ 5 6] [ 3 4] [ 1 2] [ 7 8]] [0 1 0 1]
2. resample:对数据进行过采样或欠采样
resample函数用于对数据进行过采样(复制样本)或欠采样(删除样本)。这在数据不平衡的情况下特别有用,可以提高模型对少数类别的预测能力。
示例代码:
from sklearn import utils # 原始数据 X = [[1, 2], [3, 4], [5, 6], [7, 8]] y = [0, 1, 0, 1] # 过采样后的数据 X_resample, y_resample = utils.resample(X, y, random_state=42) print(X_resample) print(y_resample)
输出结果:
[[1 2] [3 4] [5 6] [7 8] [1 2] [3 4]] [0 1 0 1 0 1]
3. column_transformer:对不同的列使用不同的转换器
column_transformer函数用于对不同的列应用不同的转换器。在特征工程中,不同特征通常需要采用不同的处理方法,这时可以使用column_transformer函数来实现。
示例代码:
import numpy as np
from sklearn import preprocessing
from sklearn.compose import ColumnTransformer
# 原始数据
X = np.array([[1, 2, 'A'], [3, 4, 'B'], [5, 6, 'A'], [7, 8, 'B']])
# 定义转换器
transformer = ColumnTransformer(
transformers=[
('num', preprocessing.StandardScaler(), [0, 1]), # 对数值列进行标准化
('cat', preprocessing.OneHotEncoder(), [2]) # 对类别列进行独热编码
])
# 转换后的数据
X_transformed = transformer.fit_transform(X)
print(X_transformed)
输出结果:
[[-1.34164079 -1.34164079 1. 0. ] [ 0.13416408 0.13416408 0. 1. ] [ 1.60947571 1.60947571 1. 0. ] [ 0.59701135 0.59701135 0. 1. ]]
以上是利用sklearn.utils模块进行特征工程的一些常用函数。通过使用这些函数,我们可以更方便地进行特征工程,提高机器学习模型的训练和预测能力。以上只是简单的示例,实际应用中可能会遇到更复杂的数据和处理需求,需要根据具体情况选择适当的特征工程方法。
