私は このチュートリアル に従ってこの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配列を提供するだけで、1つ(またはそれ以上)処理したい値を提供することになっています。要するに、あなたはちょうど置き換えることができます
[0.58,0.76]
と
[[0.58,0.76]]
そして、それは動作するはずです
配列[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
予測したいインスタンスのデータ型がpanda.Series
オブジェクトであったことを除いて、同じ問題に直面しました。
1つの入力インスタンスを予測する必要がありました。私は自分のデータの一部からそれを取りました。
df = pd.DataFrame(list(BiogasPlant.objects.all()))
test = df.iloc[-1:] # sliced it here
この場合、それを1次元配列に変換してからreshape
に変換する必要があります。
test2d = test.values.reshape(1,-1)
docs から、values
はSeriesをnumpy配列に変換します。
私は同じ問題に直面しました。それを配列にするだけでなく、最初のブラケットが配列を初期化し、2番目の配列がその配列の要素になるため、二重角括弧を配置して2D配列の単一要素にする必要があります。
したがって、最後のステートメントを次のように置き換えるだけです。
print(clf.predict(np.array[[0.58,0.76]]))
以下のアプローチを使用します。
reg = linear_model.LinearRegression()
reg.fit(df[['year']],df.income)
reg.predict([[2136]])
1つの機能を使用すると、データフレームリストがシリーズに変換されます。私はそれをDataframeリストに変換し直さなければならなかった、そしてそれは働いた。
if type(X) is Series:
X = X.to_frame()
Int64型からDataFrameへの独立変数および従属変数のXおよびY行列。1D配列から2D配列に変換されます。つまり、X = pd.DataFrame(X)およびY = pd.dataFrame(Y)ここで、pd Pythonのパンダクラスです。したがって、機能のスケーリングは順番にエラーにつながりません!