[python] Python 스크립트 “예상 된 2D 배열, 대신 1D 배열이 있습니다.”오류가 발생합니까?

이 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]))

Python 3.6을 사용하고 있는데 “예상 된 2D 배열, 대신 1D 배열이 있습니다.”라는 오류가 발생합니다. 스크립트가 이전 버전 용이라고 생각하지만 3.6 버전으로 변환하는 방법을 모르겠습니다.

이미 시도해보십시오 :

X.reshape(1, -1)



답변

predict동일한 2D 배열로 메서드 를 제공해야 하지만 처리하려는 하나 이상의 값이 있습니다. 간단히 말해

[0.58,0.76]

[[0.58,0.76]]

그리고 그것은 작동합니다.

편집 :이 답변이 인기를 얻었으므로 ML에 대한 설명을 조금 더 추가 할 것이라고 생각했습니다. 짧은 버전 : predict학습 데이터 ( X) 와 차원이 동일한 데이터 에만 사용할 수 있습니다 .

문제의 예에서 우리는 컴퓨터에 여러 행 X(각각 2 개의 값 포함)을 제공하고 y. 우리가하려는 경우 predictA – 새 값을 사용하여, 우리의 프로그램은 같은 기대 무리 행을. 하나의 행 (두 개의 값 포함)에만이를 수행하려는 경우에도 해당 행은 다른 배열의 일부 여야합니다.


답변

어레이에서 예측을 실행할 때 문제가 발생합니다 [0.58,0.76]. 전화하기 전에 모양을 변경하여 문제를 해결하십시오 predict().

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


답변

아래 접근 방식을 사용합니다.

reg = linear_model.LinearRegression()
reg.fit(df[['year']],df.income)

reg.predict([[2136]])


답변

예측하려는 인스턴스의 데이터 유형이 panda.Series객체 라는 점을 제외하고는 동일한 문제에 직면했습니다 .

한 입력 인스턴스를 예측하기 만하면됩니다. 내 데이터 조각에서 가져 왔습니다.

df = pd.DataFrame(list(BiogasPlant.objects.all()))
test = df.iloc[-1:]       # sliced it here

이 경우 1 차원 배열로 변환 한 다음이를 변환해야 reshape합니다.

 test2d = test.values.reshape(1,-1)

로부터 문서 , valuesNumPy와 배열에 시리즈를 변환합니다.


답변

나는 같은 문제에 직면했다. 배열로 만들어야하며, 첫 번째 대괄호가 배열을 초기화하고 두 번째 대괄호가 배열의 요소로 만들기 때문에 2D 배열의 단일 요소로 만들기 위해 이중 대괄호를 넣어야합니다.

따라서 간단히 마지막 문장을 다음과 같이 바꾸십시오.

print(clf.predict(np.array[[0.58,0.76]]))


답변

이전에 같은 문제에 직면했지만 어떻게 든 해결책을 찾았습니다 reg.predict([[3300]]). 시도해 볼 수 있습니다 .

스칼라 값을 허용하는 데 사용되는 API가 이제 2D 배열을 제공해야합니다.


답변

이중 대괄호 사이에 인수를 삽입하십시오.

regressor.predict ([[값]])

나를 위해 일한