web-dev-qa-db-ja.com

sklearn:LinearRegression.fit()を呼び出すときにサンプル数が矛盾する配列を見つけた

単純な線形回帰を実行しようとしていますが、次の理由でこのエラーに困惑しています。

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)

これが生成されます:

ValueError: Found arrays with inconsistent numbers of samples: [  1 999]

これらの選択は同じ次元でなければならず、それらはでこぼこした配列でなければなりません。

92
sunny

Sklearnが(行番号、列番号)のデータ形状を必要とするように見えます。あなたのデータ形状が(999, )のような(行番号)の場合、それは機能しません。 numpy.reshape()を使うことによって、あなたは(999, 1)に変えるべきです、例えば。使う

data.reshape((999,1))

私の場合はそれでうまくいった。

112
Yul

あなたがパンダデータフレームを使っているように見えます(名前df2から)。

次のこともできます。

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())

注:パンダシリーズをnumpy.ndarrayに変換し、numpy.ndarrayにはto_frame()属性がないため、 "values"を削除しました。

23
user24981

Udacityディープラーニングファンデーションコースを見てください:

df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])
10
xilef

Regr.fitの "X"引数は行列である必要があると思うので、以下はうまくいくはずです。

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)
5
Anish

データをnp.arrayに変換したため、このエラーが発生しました。私は自分のデータを代わりにnp.matrixに変換して転置して問題を解決しました。

ValueError:regr.fit(np.array(x_list), np.array(y_list))

正しい:regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))

4
Josh Grinberg
expects X(feature matrix)

あなたの機能を次のようなタプルに入れてみてください。

features = ['テレビ'、 'ラジオ'、 '新聞'] 
 X =データ[特徴]
2
Yuanxu Xu

上で述べたように、X引数は、既知の次元をもつ行列または派手な配列でなければなりません。だからあなたはおそらくこれを使用することができます:

df2.iloc[1:1000, 5:some_last_index].values

そのため、データフレームは既知の大きさの配列に変換されるので、それを変形する必要はありません。

0
Andy J.

私は同様の問題に直面しました。私の場合の問題は、Xの行数がyの行数と等しくないことでした。

つまり、freature列からいくつかの行を削除したため、feature列のエントリ数はターゲット変数のエントリ数と等しくありませんでした。

0
Shivam Agrawal

2つの配列(配列1と配列2)を分析するには、次の2つの要件を満たす必要があります。

1)彼らは不器用である必要があります。ndarray

確認する

type(array1)
# and
type(array2)

そうでない場合は、それらのうちの少なくとも1つが実行します。

array1 = numpy.ndarray(array1)
# or
array2 = numpy.ndarray(array2)

2)寸法は次のようにする必要があります。

array1.shape #shall give (N, 1)
array2.shape #shall give (N,)

Nは配列内にある項目の数です。 array1に正しい数の軸を指定するには、次のようにします。

array1 = array1[:, numpy.newaxis]
0
Richard