scikit-learn PCA 没有“分数”方法
Posted
技术标签:
【中文标题】scikit-learn PCA 没有“分数”方法【英文标题】:scikit-learn PCA doesn't have 'score' method 【发布时间】:2013-11-24 11:23:20 【问题描述】:我正在尝试根据那篇文章确定噪音的类型:
Model selection with Probabilistic (PCA) and Factor Analysis (FA)
我在 win8 64 位上使用 scikit-learn-0.14.1.win32-py2.7 我知道它指的是 0.15 版,但是在 0.14 版文档中它提到 score 方法可用于 PCA,所以我想它应该正常工作:
sklearn.decomposition.ProbabilisticPCA
问题是,无论我将哪个 PCA 用于 *cross_val_score*,我总是会收到一条类型错误消息,指出估算器 PCA 没有 score 方法:
*TypeError: 如果没有指定评分,则传递的估计器应该有一个'score'方法。估计器 PCA(copy=True, n_components=None, whiten=False) 没有。*
任何想法为什么会发生这种情况?
在此先感谢
克里斯托斯
X 有 40 个特征的 1000 个样本
这里是部分代码:
import numpy as np
import csv
from scipy import linalg
from sklearn.decomposition import PCA, FactorAnalysis
from sklearn.cross_validation import cross_val_score
from sklearn.grid_search import GridSearchCV
from sklearn.covariance import ShrunkCovariance, LedoitWolf
#read in the training data
train_path = '<train data path>/train.csv'
reader = csv.reader(open(train_path,"rb"),delimiter=',')
train = list(reader)
X = np.array(train).astype('float')
n_samples = 1000
n_features = 40
n_components = np.arange(0, n_features, 4)
def compute_scores(X):
pca = PCA()
pca_scores = []
for n in n_components:
pca.n_components = n
pca_scores.append(np.mean(cross_val_score(pca, X, n_jobs=1)))
return pca_scores
pca_scores = compute_scores(X)
n_components_pca = n_components[np.argmax(pca_scores)]
【问题讨论】:
数据可以在这里找到:kaggle.com/c/data-science-london-scikit-learn/data 使用概率 PCA,不会出现错误。然而,示例通常只适用于它们附带的版本。 谢谢安德烈亚斯,这是正确的。如果您使用概率 PCA,它可以正常工作。他们没有为 14.1 版本提供任何示例,但它可以工作。我想在新版本中它也适用于 PCA 【参考方案1】:好的,我想我找到了问题所在。它不适用于 PCA,但确实适用于 PPCA 但是,通过不提供 cv 编号,cross_val_score 会自动设置 3 倍交叉验证 创建了 3 个大小为 334、333 和 333 的集合(我的初始训练集包含 1000 个样本) 由于 nympy.mean 无法在不同大小的集合之间进行比较(334 vs 333),python 引发了一个例外。 谢谢
【讨论】:
这应该不是问题。以上是关于scikit-learn PCA 没有“分数”方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 scikit-learn PCA 找到具有最高方差的维度