如何解决将PCA组件与数据集中的其余功能串联在一起
我正在寻找一种在我的数据集中应用稀疏PCA的方法,同时仍保持原始特征不变,以便可以尝试使用分类器算法。
将PCA插入管道的方法非常简单:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import SparsePCA
from sklearn.ensemble import RandomForestClassifier
scaler = StandardScaler()
pca = SparsePCA(n_components=2)
rf = RandomForestClassifier()
pipeline_1 = Pipeline(steps=[
('scaler',scaler),('PCA',pca),('classifier',rf)
])
但是,这将减小原始数据集的维数。我需要某种方式将Sparce PCA找到的组件连接到原始数据集中。
我已经看到使用 passthrough 或 FeatureUnion 或 compose.make_column_transformer 可以工作,但是我仍然不知道如何申请它。有什么建议吗?
DF示例:
在管道之前:
feature1 feature2 ...
0 1 2
1 2 4
2 3 6
3 4 8
4 5 10
5 6 12
管道之后:
feature1 feature2 ... PCA_comp_1 PCA_comp_1
0 1 2 ... result1 result1
1 2 4 ... result2 result2
2 3 6 ... result3 result3
3 4 8 ... ... ...
4 5 10 ... ... ...
5 6 12 ... ... ...
解决方法
希望我没错,所以您只需使用前两个部分:
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import SparsePCA
from sklearn.pipeline import Pipeline
scaler = StandardScaler()
pca = SparsePCA(n_components=2)
pipeline_1 = Pipeline(steps=[('scaler',scaler),('PCA',pca)])
示例数据集:
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X = pd.DataFrame(data.data,columns=data.feature_names)
y = data.target
在数据框中获取PC分数,然后进行合并:
PC = pd.DataFrame(pipeline_1.fit(X).transform(X),columns=['PC1','PC2'])
pd.concat([X,PC],axis=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。