sklearn : LinearRegression.fit ()을 호출 할 때 샘플 수가 일치하지 않는 배열을 찾았습니다.


102

단순한 선형 회귀를 시도했지만 다음과 같은 오류로 당황합니다.

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]

이러한 선택은 동일한 차원을 가져야하며 배열이 numpy 여야합니다. 그래서 무엇을 놓치고 있습니까?

답변:


116

sklearn에 (행 번호, 열 번호)의 데이터 모양이 필요한 것 같습니다. 데이터 모양이 (행 번호,) 같은 (999, )경우 작동하지 않습니다. 사용하여 numpy.reshape(), 당신은에 배열의 형태로 변경해야 (999, 1)사용 예를,

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

제 경우에는 그것과 함께 일했습니다.


6
내 데이터 모양은 (10L,)인데, (10L, 1)로 어떻게 변환합니까? data = data.reshape (len (data), 1) 사용할 때 결과 모양은 (10L, 1)이 아닌 (10L, 1L)입니다
user3841581

@ user3841581이 게시물을 참조하십시오 .
George Liu

1
@Boern 의견 주셔서 감사합니다. 또한 X_train은 크기가 (N, 1)이어야하지만 y_train은 크기가 (N,)이 아니라 (N, 1)이어야한다는 것을 발견했습니다. 그렇지 않으면 적어도 저에게는 작동하지 않습니다.
CrossEntropy

data.reshape (...)는 데이터가 Series 객체 인 경우 deprication 경고를 표시 할 수 있습니다. data.values.reshape (...) 사용
NightFurry

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

24

pandas 데이터 프레임 (이름 df2)을 사용중인 것 같습니다.

다음을 수행 할 수도 있습니다.

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

참고 : pandas 시리즈를 numpy.ndarray로 변환하고 numpy.ndarray에 to_frame () 속성이 없기 때문에 "값"을 제거했습니다.


11

Udacity 딥 러닝 기초 과정에서 확인 :

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

2
감사! 이것은 정말 가장 간단하고 이해하기 쉽습니다!
Juan A. Navarro

실제로 Y 매개 변수는 (길이,) 모양으로 예상됩니다. 감사!
Michael_Zhang

5

regr.fit의 "X"인수는 행렬이어야하므로 다음이 작동합니다.

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

4

내 데이터를 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)))


2
expects X(feature matrix)

다음과 같이 튜플에 기능을 넣으십시오.

기능 = [ 'TV', '라디오', '신문']
X = 데이터 [특징]

1

비슷한 문제에 직면했습니다. 제 경우의 문제는 X의 행 수가 y의 행 수와 같지 않다는 것입니다.

즉, 기능 열의 항목 수는 내가 freature 열에서 일부 행을 삭제했기 때문에 대상 변수의 전체 수와 같지 않았습니다.


0

두 어레이 (array1 및 array2)를 분석하려면 다음 두 가지 요구 사항을 충족해야합니다.

1) numpy.ndarray 여야합니다.

확인

type(array1)
# and
type(array2)

그 중 하나 이상이 그렇지 않은 경우

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

위에서 언급했듯이 X 인수는 알려진 차원의 행렬 또는 numpy 배열이어야합니다. 따라서 아마도 이것을 사용할 수 있습니다.

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

따라서 데이터 프레임은 알려진 차원의 배열로 변환되며 모양을 변경할 필요가 없습니다.


-1

기차 테스트 분할 중에 실수를했을 수 있습니다.

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

위의 코드가 정확합니다.

아래와 같이 잘못했을 수도 있습니다.

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.