単純な線形回帰を実行しようとしていますが、次の理由でこのエラーに困惑しています。
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]
これらの選択は同じ次元でなければならず、それらはでこぼこした配列でなければなりません。
Sklearnが(行番号、列番号)のデータ形状を必要とするように見えます。あなたのデータ形状が(999, )
のような(行番号)の場合、それは機能しません。 numpy.reshape()
を使うことによって、あなたは(999, 1)
に変えるべきです、例えば。使う
data.reshape((999,1))
私の場合はそれでうまくいった。
あなたがパンダデータフレームを使っているように見えます(名前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"を削除しました。
Udacityディープラーニングファンデーションコースを見てください:
df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])
Regr.fitの "X"引数は行列である必要があると思うので、以下はうまくいくはずです。
regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)
データを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)))
expects X(feature matrix)
あなたの機能を次のようなタプルに入れてみてください。
features = ['テレビ'、 'ラジオ'、 '新聞'] X =データ[特徴]
上で述べたように、X引数は、既知の次元をもつ行列または派手な配列でなければなりません。だからあなたはおそらくこれを使用することができます:
df2.iloc[1:1000, 5:some_last_index].values
そのため、データフレームは既知の大きさの配列に変換されるので、それを変形する必要はありません。
私は同様の問題に直面しました。私の場合の問題は、Xの行数がyの行数と等しくないことでした。
つまり、freature列からいくつかの行を削除したため、feature列のエントリ数はターゲット変数のエントリ数と等しくありませんでした。
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]