2015-06-12 16 views
75

Chỉ cần cố gắng để làm một hồi quy tuyến tính đơn giản nhưng tôi bối rối bởi lỗi này cho:sklearn: Tìm thấy mảng với số không phù hợp của mẫu khi gọi LinearRegression.fit()

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

trong đó sản xuất:

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

Các lựa chọn này phải có cùng kích thước và chúng phải là mảng có nhiều mảng, vì vậy tôi bị thiếu gì?

Trả lời

100

Dường như sklearn yêu cầu hình dạng dữ liệu (số hàng, số cột). Nếu hình dạng dữ liệu của bạn là (số hàng,) như (999,), nó không hoạt động. Bằng cách sử dụng numpy.reshape(), bạn nên đổi thành (999, 1), ví dụ: sử dụng

data.reshape((999,1)) 

Trong trường hợp của tôi, nó hoạt động với điều đó.

+5

hình dạng dữ liệu của tôi là (10L), làm cách nào để chuyển đổi thành (10L, 1). Khi tôi sử dụng dữ liệu = data.reshape (len (dữ liệu), 1), hình dạng kết quả là (10L, 1L) không (10L, 1) – user3841581

+0

@ user3841581 vui lòng tham khảo [post] này (http://stackoverflow.com/q/40440997/4896087). –

+0

@Boern Cảm ơn bạn đã bình luận. Tôi cũng phát hiện ra rằng X_train nên có kích thước (N, 1) nhưng y_train nên có kích thước (N,) không (N, 1), nếu không nó không hoạt động, ít nhất là không cho tôi. – CrossEntropy

6

Tôi cho rằng đối số "X" của regr.fit cần phải là ma trận, vì vậy, các thao tác sau sẽ hoạt động.

regr = LinearRegression() 
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values) 
3
expects X(feature matrix) 

Cố gắng đưa các tính năng của bạn trong một tuple như thế này:

features = ['TV', 'Radio', 'Newspaper'] 
X = data[features]
18

Hình như bạn đang sử dụng gấu trúc dataframe (từ tên df2).

Bạn cũng có thể làm như sau:

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

Chú ý: Tôi đã gỡ bỏ "giá trị" như có thể chuyển đổi Series gấu trúc để numpy.ndarray và numpy.ndarray không có to_frame thuộc tính().

5

Tôi gặp lỗi này vì tôi đã chuyển đổi dữ liệu của mình thành một số np.array. Tôi đã khắc phục sự cố bằng cách chuyển dữ liệu của tôi sang một số np.matrix thay thế và thực hiện chuyển đổi.

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

Đúng: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))

-2

Để phân tích hai mảng (array1 và array2) họ cần phải đáp ứng hai yêu cầu sau:

1) Họ cần phải là một numpy.ndarray

Kiểm tra với

type(array1) 
# and 
type(array2) 

Nếu đó không phải là trường hợp ít nhất một trong số họ thực hiện

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

2) Các kích thước cần phải thực hiện như sau:

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

N là số các mục nằm trong mảng. Để cung cấp array1 với số bên phải của trục thực hiện:

array1 = array1[:, numpy.newaxis] 
1

Vì nó đã được đề cập ở trên lập luận X phải là một ma trận hoặc một mảng NumPy với kích thước được biết đến. Vì vậy, bạn có thể có thể sử dụng này:

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

Vì vậy dataframe của bạn sẽ được chuyển đổi sang một mảng với kích thước được biết đến và bạn sẽ không cần phải định hình lại nó

2

Nhìn vào quá trình nền tảng học sâu Udacity:

df = pd.read_csv('my.csv') 
... 
regr = LinearRegression() 
regr.fit(df[['column x']], df[['column y']]) 
Các vấn đề liên quan