am试图获取包含两个变量(波长和强度)的大约90,000条数据线的.dat文件,并对其应用sklearn.pca过滤器。
以下是该数据的一小部分:
wavelength intensity
[um] [W/m**2/um/sr]
196.078431372549 1.108370393265022E-003
192.307692307692 1.163428008597600E-003
188.679245283019 1.223639983609668E-003
我用于分析数据的代码如下
pca= PCA(n_components=2)
pca.fit(data)
print(pca.components_)
当我尝试将2个pca组件应用于数据集之一时,我得到的错误代码是:
ValueError: Datatype coercion is not allowed
任何帮助解决的问题将不胜感激
答案 0 :(得分:0)
我认为在您的情况下,问题出在列名,尤其是[W/m**2/um/sr]
。
使用PCA时,请不要忘记使用StandardScaler
将输入变量重新缩放为“可比较”的单位。
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
data = pd.DataFrame({'wavelength [um]': [196.078431372549, 1.108370393265022E-003, 192.307692307692], 'intensity [W/m**2/um/sr]': [1.163428008597600E-003, 188.679245283019, 1.223639983609668E-003]})
scaler = StandardScaler(with_mean=True, with_std=True)
pca= PCA(n_components=2)
pca.fit(scaler.fit_transform(data))
print(pca.components_)
对我来说很好。也许您只需要指定:
data.columns = data.columns.astype(str)