在 scikit-learn 中的 PCA 之后保留索引
Preserve index after PCA in scikit-learn
我想保留我的数据框 my_df
的列 Unique_id
以便在应用 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
我按照建议的方法保留原始数据的索引,并在应用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
了解更多信息。
我想保留我的数据框 my_df
的列 Unique_id
以便在应用 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
我按照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
了解更多信息。