it-swarm.com.de

sklearn-Problem: Bei der Regression wurden Arrays mit inkonsistenten Samples gefunden

diese Frage scheint zuvor schon gestellt worden zu sein, aber ich kann mich zur näheren Erläuterung der akzeptierten Antwort nicht äußern, und ich habe keine Lösung gefunden.

Ich versuche zu lernen, wie Sklearn mit meinen eigenen Daten verwendet wird. Ich habe im Wesentlichen gerade die jährliche prozentuale Veränderung des BIP für zwei verschiedene Länder in den letzten 100 Jahren erhalten. Ich versuche gerade, mit einer einzigen Variablen zu lernen. Ich versuche im Wesentlichen, mit sklearn vorherzusagen, wie sich die Veränderung des BIP in Land A angesichts der prozentualen Veränderung des BIP von Land B ändert.

Das Problem ist, dass ich eine Fehlermeldung bekomme: 

ValueError: Gefundene Arrays mit inkonsistenten Samples: [1 107]

Hier ist mein Code:

import sklearn.linear_model as lm
import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
import matplotlib.dates as mdates


def bytespdate2num(fmt, encoding='utf-8'):#function to convert bytes to string for the dates.
    strconverter = mdates.strpdate2num(fmt)
    def bytesconverter(b):
        s = b.decode(encoding)
        return strconverter(s)
    return bytesconverter

dataCSV = open('combined_data.csv')

comb_data = []

for line in dataCSV:
    comb_data.append(line)

date, chngdpchange, ausgdpchange = np.loadtxt(comb_data, delimiter=',', unpack=True, converters={0: bytespdate2num('%d/%m/%Y')})


chntrain = chngdpchange[:-1]
chntest = chngdpchange[-1:]

austrain = ausgdpchange[:-1]
austest = ausgdpchange[-1:]

regr = lm.LinearRegression()
regr.fit(chntrain, austrain)

print('Coefficients: \n', regr.coef_)

print("Residual sum of squares: %.2f"
      % np.mean((regr.predict(chntest) - austest) ** 2))

print('Variance score: %.2f' % regr.score(chntest, austest))

plt.scatter(chntest, austest,  color='black')
plt.plot(chntest, regr.predict(chntest), color='blue')

plt.xticks(())
plt.yticks(())

plt.show()

Was mache ich falsch? Ich habe im Wesentlichen versucht, das Sklearn-Tutorial (sie verwendeten einige Diabetes-Daten) auf meine eigenen einfachen Daten anzuwenden. Meine Daten enthalten nur das Datum, die prozentuale Veränderung des BIP von Land A für das betreffende Jahr und die prozentuale Veränderung des BIP von Land B für dasselbe Jahr. 

Ich habe die Lösungen hier und hier ausprobiert (im Grunde versuche ich im ersten Link mehr über die Lösung herauszufinden) , bekomme aber genau den gleichen Fehler.

Hier ist das vollständige Traceback für den Fall, dass Sie es sehen möchten:

Traceback (most recent call last):
  File "D:\My Stuff\Dropbox\Python\Python projects\test regression\tester.py", line 34, in <module>
    regr.fit(chntrain, austrain)
  File "D:\Programs\Installed\Python34\lib\site-packages\sklearn\linear_model\base.py", line 376, in fit
    y_numeric=True, multi_output=True)
  File "D:\Programs\Installed\Python34\lib\site-packages\sklearn\utils\validation.py", line 454, in check_X_y
    check_consistent_length(X, y)
  File "D:\Programs\Installed\Python34\lib\site-packages\sklearn\utils\validation.py", line 174, in check_consistent_length
    "%s" % str(uniques))
ValueError: Found arrays with inconsistent numbers of samples: [  1 107]
9
pyman

Bei der Anpassung (X, y) soll der Eingabeparameter X ein 2-D-Array sein. Wenn X in Ihren Daten jedoch nur eine Dimension hat, können Sie es einfach in ein 2D-Array umformen: regr.fit(chntrain_X.reshape(len(chntrain_X), 1), chntrain_Y)

6
Chang Men

Sie können auch np.newaxis verwenden. Das Beispiel kann X = X[:, np.newaxis] sein. Ich fand die Methode unter Logistic function

0
Cloud Cho

Ich hatte ähnliche Probleme wie Sie und habe eine Lösung gefunden.

Wo haben Sie folgenden Fehler:

ValueError: Found arrays with inconsistent numbers of samples: [  1 107]

Der Teil [1 107] besagt im Wesentlichen, dass Ihr Array falsch herum liegt. Sklearn meint, Sie haben 107 Datenspalten mit einer Zeile.

Um dies zu beheben, transponieren Sie die X-Daten wie folgt:

chntrain.T

Die wiederholen Sie Ihre Passform:

regr.fit(chntrain, austrain)

Je nachdem, wie Ihre "austrain" -Daten aussehen, müssen Sie möglicherweise auch diese transponieren.

0
bobo
regr.fit(chntrain, austrain)

Das sieht nicht richtig aus. Der erste Parameter für fit sollte eine X sein, die sich auf einen Merkmalsvektor bezieht. Der zweite Parameter sollte y sein. Dies ist der korrekte Antwortvektor (Ziele), der X zugeordnet ist.

Wenn Sie beispielsweise BIP haben, haben Sie möglicherweise Folgendes:

X[0] = [43, 23, 52] -> y[0] = 5
# meaning the first year had the features [43, 23, 52] (I just made them up)
# and the change that year was 5

Gemessen an Ihren Namen sind sowohl chntrain als auch austrain Merkmalsvektoren. Je nachdem, wie Sie Ihre Daten laden, ist vielleicht die letzte Spalte das Ziel?

Vielleicht müssen Sie etwas tun wie:

chntrain_X, chntrain_y = chntrain[:, :-1], chntrain[:, -1]
# you can do the same with austrain and concatenate them or test on them if this part works
regr.fit(chntrain_X, chntrain_y)

Aber wir können es nicht sagen, ohne das genaue Speicherformat Ihrer Daten zu kennen.

0
IVlad

Ändern Sie chntrain in ein 2-D-Array anstelle von 1-D, d. H. Umwandeln Sie in (len(chntrain), 1).

Ändern Sie zur Vorhersage auch chntest in ein 2D-Array.

0
qg_jinn