sklearn Problem: Gefunden-arrays mit inkonsistenten Anzahl von Proben, wenn dabei die regression
scheint diese Frage gebeten worden war, bevor, aber ich kann nicht scheinen, um einen Kommentar für eine weitere Klärung auf die akzeptierte Antwort, und ich konnte nicht herausfinden, die Lösung bereitgestellt.
Ich versuche zu lernen, wie sklearn mit meinen eigenen Daten. Ich wesentlichen habe gerade das jährliche Veränderung in % BIP 2 verschiedenen Ländern über die letzten 100 Jahre. Ich versuche nur, zu lernen, mit einer einzigen Variablen für jetzt. Was ich im wesentlichen versucht zu tun, ist mit sklearn, vorherzusagen, was die BIP-Veränderung in % für Land A wird die prozentuale Veränderung in Land B BIP.
Das problem ist, dass ich erhalten eine Fehlermeldung, die sagt:
ValueError: Gefunden-arrays mit inkonsistenten zahlen der Proben: [ 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, gelten die sklearn tutorial (Sie verwendet einige diabetes-Datensatz), um meine eigenen einfachen Daten. Meine Daten, die nur das Datum enthält, Land A ist % Veränderung des BIP für das jeweilige Jahr, und Land B ist % Veränderung des BIP für das gleiche Jahr.
Ich habe versucht, die Lösungen hier und hier (im Grunde versucht, mehr herauszufinden über die Lösung im ersten link), aber nur erhalten die exakt gleichen Fehler.
Hier der traceback in Fall, dass Sie wollen, um es zu sehen:
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]
- Überprüfen Sie die Formen der
chntrain
undaustrain
vor der Aufteilung in Trainings - /test-sets. Sie sollten die gleiche Form haben; der Fehler scheint zu sein, die angibt, dass die Größen sind nicht das gleiche - Wie kann ich das tun? Ich habe schon gegoogelt aber jede Lösung, die wir mich Form oder die Form, gibt nur den Fehler: IndexError: zu viele Indizes für das array
- für z.B.
print chngdpchange.shape, ausgdpchange.shape
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fit(X,y),die input-parameter X soll eine 2-D-array. Aber, wenn X in Ihre Daten ist nur eine dimension, Sie kann Sie nur Umformen, es in eine 2-D-array wie dieses:
regr.fit(chntrain_X.reshape(len(chntrain_X), 1), chntrain_Y)
Diese nicht richtig Aussehen. Der erste parameter
fit
sollte einX
bezieht sich auf einen feature-Vektor. Der zweite parameter sollte einy
, die die richtigen Antworten (Ziele) Vektor zugeordnetX
.Zum Beispiel, wenn Sie das BIP, die Sie haben könnten:
Beurteilung durch Ihren Namen, die beide
chntrain
undaustrain
sind feature-Vektoren. Die Beurteilung durch, wie Sie laden Ihre Daten, vielleicht der letzten Spalte ist das Ziel?Vielleicht müssen Sie etwas tun, wie:
Aber wir können nicht sagen, ohne die genaue Kenntnis der storage format Ihrer Daten.
Versuchen
chntrain
zu einem 2-D-array anstelle von 1-D, d.h. Umformen zu(len(chntrain), 1)
.Für die Vorhersage, auch ändern
chntest
zu einem 2-D array.Ich habe ähnliche Probleme wie du und eine Lösung gefunden haben.
Wo Sie die folgende Fehlermeldung:
[1 107] Teil ist im Grunde sagen, dass dein array ist der falsche Weg um. Sklearn denkt, dass Sie haben 107 Spalten der Daten mit 1 Zeile.
Um dies zu beheben versuchen, die Umsetzung der X-Daten etwa so:
Den re-run your fit:
Je nachdem, was Ihre "österreichische" Daten aussieht, wie können Sie umgesetzt werden müssen, diese auch.
Können Sie verwenden
np.newaxis
als gut. Das Beispiel kannX = X[:, np.newaxis]
. Ich fand die Methode bei Die Logistische Funktion