Scikit学习数据分析问题

时间:2019-12-03 21:58:27

标签: python python-3.x scikit-learn pca

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

任何帮助解决的问题将不胜感激

1 个答案:

答案 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)