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

在 scikit-learn 中保留 PCA 后的索引

如何解决在 scikit-learn 中保留 PCA 后的索引

我想保留我的数据框 Unique_idmy_df 列,以便在应用 PCA 后进行进一步分析。但是在降维过程中,列将丢失。有没有办法保留专栏?

my_df 看起来像这样:


    Unique_id EndValue Peak_val score       f1          f2          f3          f4          f5          f6
0   15         44.5   46.5     377.17   38.366667   17.757471   -0.610802   -1.028477   45.372727   0.150168
1   15         45.0   47.0     1268.37  46.909091   0.090909    -2.846050   6.100000    46.909091   0.090909
2   18         45.0   47.0     373.16   45.030303   0.030303    5.480078    28.031250   45.651685   0.252298
3   18         45.0   47.0     369.68   45.000000   0.000000    0.000000    -3.000000   46.052632   0.052632
4   19         45.0   47.0     1414.97  46.000000   0.000000    0.000000    -3.000000   46.000000   0.000000

我按照 this thread 建议的方法保留原始数据的索引,并在应用 PCA 后将其附加到 my_df

在 PCA 期间,我删除Unique_id 列,因为它不是一项功能。然后我尝试:

def pca2(data,n,pc_count = None):
    return PCA(n_components = n).fit_transform(data)

results_2d = pca2(my_df,2)

df_temp = pd.DataFrame(results_2d,index=my_df.index)
df_temp

输出看起来像这样:

     0              1
0   -1.863714e+03   -14.793301
1   -2.754914e+03   -10.330997
2   -1.859704e+03   23.473387
3   -1.856224e+03   5.703049
4   -2.901514e+03   -19.540132
5   -1.786054e+03   17.621220
6   -2.555565e+03   38.636828
7   -1.667134e+03   11.647753

我意识到很难验证索引是否正确。有什么方法可以检查我的结果吗?是否有更好的方法来保留实际的 Unique_id

解决方法

您应该使用ColumnTransformer

>>> import pandas as pd
>>> from sklearn.compose import ColumnTransformer
>>> from sklearn.decomposition import PCA
>>> df = pd.DataFrame({'c1': [1,2,3,4],...                    'c2': [3.,5.5,8.,10.5],...                    'c_to_preserve': [-5,-3,6,10]})
>>> featurizer = ColumnTransformer([('pca',PCA(n_components=1),['c1','c2']),...                                 ('preserve','passthrough',['c_to_preserve'])])
>>> featurizer.fit_transform(df)
array([[ 4.03887361,-5.        ],[ 1.3462912,-3.        ],[-1.3462912,6.        ],[-4.03887361,10.        ]])

查看 sklearn.compose.ColumnTransformer 了解更多信息。

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