sklearn: LinearRegression.fit () çağrılırken tutarsız sayıda örnek içeren diziler bulundu


103

Sadece basit bir doğrusal regresyon yapmaya çalışıyorum ama bu hataya şaşıyorum:

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

hangi üretir:

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

Bu seçimler aynı boyutlara sahip olmalı ve uyuşuk diziler olmalı, peki neyi kaçırıyorum?

Yanıtlar:


117

Sklearn (satır numarası, sütun numarası) veri şeklini gerektiriyor gibi görünüyor. Veri şekliniz (satır numarası,) gibi (999, )ise çalışmaz. Kullanarak numpy.reshape(), dizinin şeklini değiştirmelisiniz (999, 1), örn.

data=data.reshape((999,1))

Benim durumumda bununla çalıştı.


6
veri şeklim (10L,), onu nasıl (10L, 1) 'e dönüştürebilirim. Data = data.reshape (len (data), 1) kullandığımda ortaya çıkan şekil (10L, 1L) değil (10L, 1)
user3841581

@ user3841581 lütfen bu yazıya bakın .
George Liu

1
@Boern Yorum için teşekkürler. Ayrıca, X_train'in (N, 1) boyutunda olması gerektiğini, ancak y_train'in (N,) değil (N, 1) boyutunda olması gerektiğini, aksi takdirde işe yaramayacağını, en azından benim için olmadığını keşfettim.
CrossEntropy

data.reshape (...), data Series nesnesiyse, sınırlama uyarısı gösterebilir. Data.values.reshape'i kullanın (...)
NightFurry

data = data.reshape (-1,1)
Itachi

25

Görünüşe göre panda veri çerçevesi (df2 adından) kullanıyorsunuz.

Ayrıca şunları da yapabilirsiniz:

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

NOT: Pandalar Serisini numpy.ndarray'e dönüştüren ve numpy.ndarray'in to_frame () özniteliği olmadığı için "değerleri" kaldırdım.


11

Udacity derin öğrenme temel kursunda görüldü:

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

2
Teşekkürler! Bu gerçekten anlaşılması en basit ve en kolay olanıdır!
Juan A. Navarro

Aslında, Y parametresinin bir (uzunluk) şekli olması beklenir. Teşekkürler!
Michael_Zhang

6

Regr.fit'in "X" argümanının bir matris olması gerektiğini düşünüyorum, bu yüzden aşağıdakiler çalışmalı.

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

4

Bu hatayla karşılaştım çünkü verilerimi bir np.array. Verilerimi np.matrixbunun yerine bir veriye dönüştürüp devrik alarak sorunu çözdüm.

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

Doğru: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))


3
expects X(feature matrix)

Özelliklerinizi şöyle bir demete koymaya çalışın:

özellikler = ['TV', 'Radyo', 'Gazete']
X = veri [özellikler]

1

Ben de benzer bir sorunla karşılaştım. Benim durumumdaki sorun, X'teki satır sayısının y'deki satır sayısına eşit olmamasıydı.

Örneğin, freature sütunlarından bazı satırları attığım için özellik sütunlarındaki girişlerin sayısı hedef değişkendeki giriş sayısına eşit değildi.


0

İki diziyi (dizi1 ve dizi2) analiz etmek için aşağıdaki iki gereksinimi karşılamaları gerekir:

1) bir numpy.ndarray olmaları gerekir

İle kontrol edin

type(array1)
# and
type(array2)

En az biri için durum böyle değilse,

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

2) Boyutların aşağıdaki gibi olması gerekir:

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

N, dizideki öğelerin sayısıdır. Dizi1'e doğru sayıda eksen sağlamak için şunları yapın:

array1 = array1[:, numpy.newaxis]

0

Yukarıda bahsedildiği gibi, X argümanı bir matris veya bilinen boyutlara sahip bir matris dizisi olmalıdır. Yani muhtemelen bunu kullanabilirsin:

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

Böylece veri çerçeveniz bilinen boyutlara sahip bir diziye dönüştürülür ve onu yeniden şekillendirmeniz gerekmez.



-1

tren testi bölünmesi sırasında bir hata yapmış olabilirsiniz

x_train,x_test,y_train,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)

Yukarıdaki kod doğru

Aşağıdaki gibi yapmış olabilirsin ki yanlış

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.