微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为 PCA 创建管道?

如何解决如何为 PCA 创建管道?

我正在研究一些 customer_data,作为第一步,我想要进行 PCA,然后进行聚类作为第二步。

由于在将数据提供给 PCA 之前需要完成编码(和缩放),我认为最好将它们全部放入管道中。 - 不幸的是,这似乎不起作用。

我如何创建这个管道,这样做是否有意义?

# Creating pipeline objects 
encoder = OneHotEncoder(drop='first')
scaler = StandardScaler(with_mean=False)
pca = PCA()

# Create pipeline
pca_pipe = make_pipeline(encoder,scaler,pca)

# Fit data to pipeline
pca_pipe.fit_transform(customer_data_raw)

我收到以下错误消息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-c4ce88042a66> in <module>()
     20 
     21 # Fit data to pipeline
---> 22 pca_pipe.fit_transform(customer_data_raw)

2 frames
/usr/local/lib/python3.7/dist-packages/sklearn/decomposition/_pca.py in _fit(self,X)
    385         # This is more informative than the generic one raised by check_array.
    386         if issparse(X):
--> 387             raise TypeError('PCA does not support sparse input. See '
    388                             'TruncatedSVD for a possible alternative.')
    389 

TypeError: PCA does not support sparse input. See TruncatedSVD for a possible alternative.

解决方法

OneHotEncoder 默认在变换时创建一个稀疏矩阵。从那里,错误消息非常简单:您可以尝试使用 TruncatedSVD 而不是 PCA。但是,如果您想坚持使用 sparse=False,您也可以在编码器中设置 PCA

也就是说,您真的想对每个特征进行一次热编码吗?然后缩放这些虚拟变量?如果您想对某些特征进行编码并缩放其他特征,请考虑使用 ColumnTransformer

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。