ValueError: Expected 2D array, got 1D array instead
sklearnのモデルを学習する際に、fit()を実行すると「ValueError: Expected 2D array, got 1D array instead」というエラーが発生する場合があります。
エラーの原因と解決策
解決策としていくつか方法がありますが、sklearnのfit()では、DataFrame型やnumpyの行列形式(縦ベクトル)のみを受け付けていますので、その形式でfit()に渡すことでエラーを解決できます。
そのため、通常のリストやSerieis型を渡すと以下のようなエラーになりますので、
ValueError: Expected 2D array, got 1D array instead: array=[12 16 20 28 36]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
2D配列ではなく、1D配列(通常のリスト等)になってしまっているためです。 そのため以下のようにするとエラーになります。
・このプログラムはエラーになる例です
# エラーになってしまう例
from sklearn.linear_model import LinearRegression
x = [12,16,20,28,36]
y = [700,900,1300,1750,1800]
model = LinearRegression()
model.fit(x,y)
エラーを出さすにfit()を正常に処理させるには、 二重カッコ もしくは、エラーメッセージに記載あるようにreshape(-1,1)
を用いる必要があります。
from sklearn.linear_model import LinearRegression
X = [[12],[16],[20],[28],[36]]
y = [[700],[900],[1300],[1750],[1800]]
model = LinearRegression()
model.fit(X,y)
reshape(-1, 1) を用いる場合
関連テキスト:NumPy reshapeの-1に関して | AI Academy
import numpy as np
from sklearn.linear_model import LinearRegression
x = [12,16,20,28,36]
y = [700,900,1300,1750,1800]
X = np.array(x).reshape(-1,1)
model = LinearRegression()
model.fit(X,y)
reshape()はnumpy arrayに対して利用できるため、リスト型のxをnumpy arrayにしてから、reshape()を実施しています。
以下の画像の、1つ目のxは通常のリストとして定義しており、2つ目のxはnumpy arrayとしてのxです。
このように、sklearnのfit()では以下のような形状を受け付けております。
array([[12],
[16],
[20],
[28],
[36]])
fit()に渡すXの形状が以下のように行列形式であれば問題ありません。
print(X.shape) # (5,1)
質問し放題の環境で1日あたりの費用194円で学べる!業界最安値オンラインAIプログラミングスクールAI Academy Bootcamp
AI Academy Bootcampの「オンデマンド動画+チャットサポートプラン」は6ヶ月質問し放題で受講料が35,000円(税込)でご受講頂けます。
1日の受講費用換算で、なんと194円でご受講頂けます。
450種類のオリジナルテキストコンテンツに加え、5つの動画コース(AIプランナーコース、初めてのPythonプログラミング、Pythonプログラミング入門コース、データサイエンティストコース、機械学習エンジニアコース)もご受講頂けます。
業界最安値で、どこよりもお得に、効率よくAIスキルを身に付けたい方、AI人材として転職したい方は是非ご受講ご検討ください。