【问题标题】:Issue with Scikit-learn data analysisScikit-learn 数据分析的问题
【发布时间】:2019-12-03 21:58:27
【问题描述】:

我正在尝试获取包含两个变量(波长和强度)的大约 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

任何帮助解决将不胜感激

【问题讨论】:

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


【解决方案1】:

我认为在你的情况下,问题在于列名,尤其是[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)

【讨论】:

  • 那么使用您创建的数据变量,是否可以将其设为数组而不是列出每个值?
  • @domryan “而不是列出每个值”是什么意思?您确实可以将 PCA 的主要成分(即“新变量”)存储在一个数组中,并将其用于进一步分析。 (如果有帮助,请不要忘记验证响应。)
猜你喜欢
  • 2017-04-26
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2016-09-10
  • 2015-12-19
  • 2016-08-13
  • 2019-06-08
  • 2016-11-24
相关资源
最近更新 更多