首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为PCA创建管道?

如何为PCA创建管道?
EN

Stack Overflow用户
提问于 2021-07-20 01:05:20
回答 1查看 88关注 0票数 1

我正在做一些customer_data,作为第一步,我想做主成分分析,然后是聚类作为第二步。

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

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

代码语言:javascript
运行
复制
# 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)

我得到以下错误消息:

代码语言:javascript
运行
复制
---------------------------------------------------------------------------
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.
EN

Stack Overflow用户

回答已采纳

发布于 2021-07-20 02:10:57

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

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

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68444415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档