“标量变量的无效索引” - 使用 Scikit Learn 时“accuracy_score”

Posted

技术标签:

【中文标题】“标量变量的无效索引” - 使用 Scikit Learn 时“accuracy_score”【英文标题】:"Invalid Index to Scalar Variable" - When Using Scikit Learn "accuracy_score" 【发布时间】:2013-10-13 07:38:37 【问题描述】:

不确定到底出了什么问题。但是,我的目标是建立一个交叉验证的 python 代码。我知道有各种指标,但我认为我使用的是正确的指标。我没有得到我想要的 CV10 结果,而是收到一个错误:

“标量变量的无效索引”

我在 *** 上找到了这个: IndexError:当您尝试索引 numpy 标量(例如 numpy.int64 或 numpy.float64)时,会发生对标量变量的无效索引。它非常类似于 TypeError: 'int' object has no attribute '_getitem_' when you try to index an int.

任何帮助将不胜感激......

我正在尝试关注 :: http://scikit-learn.org/stable/modules/model_evaluation.html

from sklearn.ensemble import RandomForestClassifier
from sklearn import cross_validation
from numpy import genfromtxt
import numpy as np
from sklearn.metrics import accuracy_score

def main():
    #read in  data, parse into training and target sets
    dataset = genfromtxt(open('D:\\CA_DataPrediction_TrainData\\CA_DataPrediction_TrainDataGenetic.csv','r'), delimiter=',', dtype='f8')[1:]   
    target = np.array( [x[0] for x in dataset] )
    train = np.array( [x[1:] for x in dataset] )

    #In this case we'll use a random forest, but this could be any classifier
    cfr = RandomForestClassifier(n_estimators=10)

    #Simple K-Fold cross validation. 10 folds.
    cv = cross_validation.KFold(len(train), k=10, indices=False)

    #iterate through the training and test cross validation segments and
    #run the classifier on each one, aggregating the results into a list
    results = []
    for traincv, testcv in cv:
        pred = cfr.fit(train[traincv], target[traincv]).predict(train[testcv])
        results.append(accuracy_score(target[testcv], [x[1] for x in pred]) )

    #print out the mean of the cross-validated results
    print "Results: " + str( np.array(results).mean() )

if __name__=="__main__":
    main()

【问题讨论】:

【参考方案1】:

你的pred变量只是一个预测列表,所以你不能索引它的元素(这是错误的原因)

results.append(accuracy_score(target[testcv], [x[1] for x in pred]) )

应该是

results.append(accuracy_score(target[testcv], pred) )

或者如果你真的想要一份副本

results.append(accuracy_score(target[testcv], [x for x in pred]) )

【讨论】:

以上是关于“标量变量的无效索引” - 使用 Scikit Learn 时“accuracy_score”的主要内容,如果未能解决你的问题,请参考以下文章

使用 scikit-bio 读取 fastq 的最快方法

SciKit-Learn使用什么方法来进行基本的LinearRegression?

根据 Pairs 评估 Scikit-learn 中的聚类

如 scikit-learn 的文档中所述,如何在 cv 中使用 TimeSeriesSplit

如何在python中使用scikit-image greycomatrix()函数?

Python scikit-learn 到 JSON