Hoe IndexError op te lossen: ongeldige index naar scalaire variabele

Deze code genereert een fout:

IndexError: invalid index to scalar variable.

op de regel: results.append(RMSPE(np.expm1(y_train[testcv]), [y[1] for y in y_test]))

Hoe dit op te lossen?

import pandas as pd
import numpy as np
from sklearn import ensemble
from sklearn import cross_validation
def ToWeight(y):
    w = np.zeros(y.shape, dtype=float)
    ind = y != 0
    w[ind] = 1./(y[ind]**2)
    return w
def RMSPE(y, yhat):
    w = ToWeight(y)
    rmspe = np.sqrt(np.mean( w * (y - yhat)**2 ))
    return rmspe
forest = ensemble.RandomForestRegressor(n_estimators=10, min_samples_split=2, n_jobs=-1)
print ("Cross validations")
cv = cross_validation.KFold(len(train), n_folds=5)
results = []
for traincv, testcv in cv:
    y_test = np.expm1(forest.fit(X_train[traincv], y_train[traincv]).predict(X_train[testcv]))
    results.append(RMSPE(np.expm1(y_train[testcv]), [y[1] for y in y_test]))

testcvis:

[False False False ...,  True  True  True]

Antwoord 1, autoriteit 100%

U probeert te indexeren in een scalaire (niet-itereerbare) waarde:

[y[1] for y in y_test]
#  ^ this is the problem

Als je [y for y in test]aanroept, herhaal je de waarden al, dus je krijgt een enkele waarde in y.

Uw code is hetzelfde als proberen om het volgende te doen:

y_test = [1, 2, 3]
y = y_test[0] # y = 1
print(y[0]) # this line will fail

Ik weet niet zeker wat je in je resultatenreeks probeert te krijgen, maar je moet [y[1] for y in y_test]verwijderen.

Als je elke y in y_test aan resultaten wilt toevoegen, moet je je lijstbegrip verder uitbreiden tot iets als dit:

[results.append(..., y) for y in y_test]

Of gebruik gewoon een for-lus:

for y in y_test:
    results.append(..., y)

Antwoord 2, autoriteit 5%

Kortom, 1is geen geldige index van y. Als de bezoeker uit zijn eigen code komt, moet hij controleren of zijn yde index bevat die hij probeert te openen (in dit geval is de index 1).


Antwoord 3

In de for heb je een iteratie, en voor elk element van die lus, dat waarschijnlijk een scalair is, heeft het geen index. Als elk element een lege array, enkele variabele of scalair is en geen lijst of array, kun je geen indices gebruiken.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

11 − nine =

Other episodes