简单介绍
- 简单理解:可以把若干转换器组合成一个新的转换器,这个新的转换器组合了它们的输出。大概可以这么理解,pipeline 对各个estimator进行了串行,而featureunion对多个转换器做了并行操作,输出是这些转换器的输出的合集。
- 具体实现:在训练阶段,每个转换器都在数据集上独立的训练。在数据变换阶段,所以训练好的转换器可以并行执行,输出的特征向量以end-to-end的形式拼接成一个更大的特征向量。
- 与pipeline可以共同使用创建更加复杂的模型。
功能
- 只需要调用一次fit和transform就可以训练一组estimator。
- 可以与gridSearchCV结合,在所有的estimator上进行参数调优。
- 它无法检查两个转换器是否产生了相同的特征,只是将所有转换器生成的特征合并,确保产生不一样的特征是我们需要确保的。
代码实例
简单例子
- 调用transform后,可以返回原始特征经过多个transformer转换后的特征。
- 它与pipeline类似,也有一个make_union方法来创建实例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA
from sklearn.decomposition import KernelPCA
import pandas as pd
from sklearn.model_selection import train_test_split
# 读取数据
data=pd.read_csv("/data/creditcard.csv")
# 将数据分为特征与标签
y=data['Class']
x=data.drop('Class',axis=1)
train_x,test_x,train_y,test_y=train_test_split(x,y)
# 输出原有特征数量
print(train_x.shape[1])
# 构造组合特征(后一个estimator可以写成别的,因为我写成kernelPCA后运行代码时内存不足,所以为了测试写两个一样。)
estimators=[('liner_pca',PCA(2)),('kernel_pca',PCA(3))]
union=FeatureUnion(estimators)
# 训练模型
model=union.fit(train_x,train_y)
print(model)
# newfeature=model.get_feature_names()
features=model.transform(train_x)
# 输出最后的特征数
print(features.shape[1])
print(features)
# 测试集做同样的转换
test_new=model.transform(test_x)
print(test_new.shape[1])
与pipeline结合
1 | from sklearn.pipeline import FeatureUnion |
featureunion、pipeline、gridSearch
1 | from sklearn.pipeline import FeatureUnion |