0

何が間違っているのか正確にはわかりません。ただし、私の目標は、相互検証の Python コードを確立することです。いろいろな指標があることは承知していますが、正しいものを使っていると思います。目的の CV10 の結果を得る代わりに、次のエラーが表示されます。

「スカラー変数への無効なインデックス」

StackOverflow でこれを見つけました: IndexError: numpy.int64 や numpy.float64 などの numpy スカラーにインデックスを付けようとすると、スカラー変数への無効なインデックスが発生します。これは TypeError: 'int' object has no attribute '_ getitem _'に非常に似ています。

どんな助けでも大歓迎です...

私はフォローしようとしています:: 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()
4

1 に答える 1

2

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]) )
于 2013-10-06T19:44:55.770 に答える