Postępuję zgodnie z tym samouczkiem, aby sformułować prognozę ML:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn import svm
x = [1, 5, 1.5, 8, 1, 9]
y = [2, 8, 1.8, 8, 0.6, 11]
plt.scatter(x,y)
plt.show()
X = np.array([[1,2],
[5,8],
[1.5,1.8],
[8,8],
[1,0.6],
[9,11]])
y = [0,1,0,1,0,1]
X.reshape(1, -1)
clf = svm.SVC(kernel='linear', C = 1.0)
clf.fit(X,y)
print(clf.predict([0.58,0.76]))
Używam Pythona 3.6 i otrzymuję błąd „Oczekiwana tablica 2D, zamiast niej otrzymałem tablicę 1D:” Myślę, że skrypt jest przeznaczony dla starszych wersji, ale nie wiem, jak przekonwertować go do wersji 3.6.
Już spróbuj z:
X.reshape(1, -1)
python
python-3.x
machine-learning
predict
JonTargaryen
źródło
źródło
X = X.reshape(1, -1)
. Zmiana kształtu nie jest na miejscu.clf.predict(<a-1d-thing>)
, ponieważX
jest już dwuwymiarowa (reshape
mimo wszystko bezużyteczna ).X
.Odpowiedzi:
Powinieneś po prostu podać
predict
metodę z tą samą tablicą 2D, ale z jedną wartością, którą chcesz przetworzyć (lub więcej). Krótko mówiąc, możesz po prostu wymienić[0.58,0.76]
Z
[[0.58,0.76]]
I powinno działać.
EDYCJA: Ta odpowiedź stała się popularna, więc pomyślałem, że dodam trochę więcej wyjaśnień na temat ML. Krótka wersja: możemy używać tylko
predict
na danych, które mają taką samą wymiarowość jak dane uczące (X
).W omawianym przykładzie podajemy komputerowi kilka wierszy
X
(po 2 wartości w każdym) i pokazujemy mu prawidłowe odpowiedzi w formaciey
. Kiedy chcemypredict
użyć nowych wartości, nasz program oczekuje tego samego - kilku wierszy. Nawet jeśli chcemy to zrobić tylko dla jednego wiersza (z dwiema wartościami), ten wiersz musi być częścią innej tablicy.źródło
Problem występuje podczas uruchamiania przewidywania na tablicy
[0.58,0.76]
. Rozwiąż problem, zmieniając jego kształt, zanim zadzwoniszpredict()
:import numpy as np import matplotlib.pyplot as plt from matplotlib import style style.use("ggplot") from sklearn import svm x = [1, 5, 1.5, 8, 1, 9] y = [2, 8, 1.8, 8, 0.6, 11] plt.scatter(x,y) plt.show() X = np.array([[1,2], [5,8], [1.5,1.8], [8,8], [1,0.6], [9,11]]) y = [0,1,0,1,0,1] clf = svm.SVC(kernel='linear', C = 1.0) clf.fit(X,y) test = np.array([0.58, 0.76]) print test # Produces: [ 0.58 0.76] print test.shape # Produces: (2,) meaning 2 rows, 1 col test = test.reshape(1, -1) print test # Produces: [[ 0.58 0.76]] print test.shape # Produces (1, 2) meaning 1 row, 2 cols print(clf.predict(test)) # Produces [0], as expected
źródło
Stosuję poniższe podejście.
reg = linear_model.LinearRegression() reg.fit(df[['year']],df.income) reg.predict([[2136]])
źródło
Napotkałem ten sam problem, z wyjątkiem tego, że typem danych instancji, którą chciałem przewidzieć, był
panda.Series
obiekt.Po prostu musiałem przewidzieć jedną instancję wejściową. Wziąłem to z wycinka moich danych.
df = pd.DataFrame(list(BiogasPlant.objects.all())) test = df.iloc[-1:] # sliced it here
W takim przypadku musisz przekonwertować go na tablicę 1-D, a następnie
reshape
ją.test2d = test.values.reshape(1,-1)
Od docs ,
values
przekonwertuje Series w numpy tablicy.źródło
Miałem ten sam problem. Musisz po prostu uczynić z niej tablicę, a ponadto musisz umieścić podwójne nawiasy kwadratowe, aby uczynić z niej pojedynczy element tablicy 2D, ponieważ pierwszy nawias inicjuje tablicę, a drugi czyni ją elementem tej tablicy.
Więc po prostu zamień ostatnie stwierdzenie na:
print(clf.predict(np.array[[0.58,0.76]]))
źródło
Miałem ten sam problem wcześniej, ale jakoś znalazłem rozwiązanie, możesz spróbować
reg.predict([[3300]])
.API używane do dopuszczania wartości skalarnych, ale teraz musisz podać tablicę 2D.
źródło
Po prostu wstaw argument między podwójnym nawiasem kwadratowym:
regressor.predict ([[wartości]])
to zadziałało dla mnie
źródło
Dzięki jednej funkcji moja lista Dataframe jest konwertowana na Serię. Musiałem przekonwertować go z powrotem na listę Dataframe i zadziałało.
if type(X) is Series: X = X.to_frame()
źródło
Macierz X i Y zmiennej niezależnej i zmiennej zależnej odpowiednio do DataFrame z typu int64, tak aby została przekonwertowana z tablicy 1D na tablicę 2D .. tj. X = pd.DataFrame (X) i Y = pd.dataFrame (Y), gdzie pd należy do klasy pandy w języku Python. a zatem skalowanie funkcji z kolei nie prowadzi do żadnego błędu!
źródło