2

我正在尝试根据该文章确定噪音的类型:

使用概率 (PCA) 和因子分析 (FA) 进行模型选择

我在 win8 64bit 上使用 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)]
4

1 回答 1

-1

好的,我想我找到了问题所在。它不适用于 PCA,但确实适用于 PPCA 但是,通过不提供 cv 编号,cross_val_score 会自动设置 3 倍交叉验证,创建 3 个大小为 334、333 和 333 的集合(我的初始训练集包含 1000 个样本)由于 nympy.mean 无法在不同大小的集合之间进行比较(334 vs 333),python 引发了一个例外。谢谢

于 2013-11-12T19:56:52.310 回答