如何解决在 scikit-learn 中保留 PCA 后的索引
我想保留我的数据框 Unique_id
的 my_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 举报,一经查实,本站将立刻删除。