1d 배열이 예상되었을 때 열 벡터 y가 전달되었습니다.


117

나는 맞게 필요 RandomForestRegressor에서 sklearn.ensemble.

forest = ensemble.RandomForestRegressor(**RF_tuned_parameters)
model = forest.fit(train_fold, train_y)
yhat = model.predict(test_fold)

이 코드는 데이터를 전처리 할 때까지 항상 작동했습니다 ( train_y). 오류 메시지는 다음과 같습니다.

DataConversionWarning : 1d 배열이 예상되었을 때 열 벡터 y가 전달되었습니다. 예를 들어 ravel ()을 사용하여 y의 모양을 (n_samples,)로 변경하십시오.

모델 = forest.fit (train_fold, train_y)

이전 train_y에는 시리즈 였지만 이제는 numpy 배열입니다 (열 벡터입니다). 적용 train_y.ravel()하면 행 벡터가되고 오류 메시지가 나타나지 않습니다. 예측 단계를 통해 매우 오랜 시간이 걸립니다 (실제로는 완료되지 않습니다 ...).

문서 에서이 문제를 해결하는 방법에 대한 아이디어 로 정의되어야 함을 RandomForestRegressor알았습니다 .train_yy : array-like, shape = [n_samples] or [n_samples, n_outputs]


무엇 train_fold.shape이며 train_y.shape?
Alexander

@Alexander : train_fold : 튜플 (749904,24) ... 기차 : y.ravel () : 튜플 (749904)
Klausos Klausos

괜찮아 보인다. 데이터가 제대로 작동하는지 확인하기 위해 100 행의 데이터를 학습 해 보셨나요? 또한 train_y전처리로 인해 데이터가 손상되지 않았는지 확인하기 위해 데이터 내용을 조사 했습니까?
Alexander

RF_tuned_parameters우리를 위해 인쇄 하십시오.
Imanol Luengo 2015

@imaluengo : { 'n_estimators': 40, 'max_features': 0.8, 'n_jobs': 2, 'verbose': True, 'min_samples_split': 6, 'random_state': 123}
Klausos Klausos

답변:


189

이 줄을 변경하십시오.

model = forest.fit(train_fold, train_y)

에:

model = forest.fit(train_fold, train_y.values.ravel())

편집하다:

.values값을 배열로 제공합니다. (모양 : (n, 1)

.ravel 해당 배열 모양을 (n,)로 변환합니다.


33
누군가 그것이 실제로 변경되는 것을 설명 할 수 있습니다.
Rahul Bali

2
AttributeError : 'numpy.ndarray'개체에 'values'속성이 없습니다
john ktejik

12
numpy.ndarray가 있으면 대신 train_y.ravel ()을 사용하십시오.
Charity Leschinski 2017

13
@RahulParashar가하는 ravel()일은 : 당신이 가지고있을 때 y.shape == (10, 1), y.ravel().shape == (10, ). 즉, 배열을 평평하게 만듭니다.
PascalVKooten

이것은 유용한 경고입니까?
alex

18

KNN 분류기 를 훈련 시키려고 할 때도 이런 상황이 발생했습니다 . 하지만 내가 변경 한 후 경고가 사라졌다 것으로 보인다 :
knn.fit(X_train,y_train)

knn.fit(X_train, np.ravel(y_train,order='C'))

이 줄 앞에 import numpy as np.


.ravel()접근 방식을 사용할 때 내 열 벡터는 배열이 아닌 행 벡터로 변환되었지만이 수정은 저에게 효과적이었습니다.
kabdulla

12

나는 같은 문제가 있었다. 문제는 레이블이 열 형식이지만 행에서 예상되는 것입니다. 사용하다np.ravel()

knn.score(training_set, np.ravel(training_labels))

이것이 해결되기를 바랍니다.


1
당신 말은 np.ravel()?
Pramesh Bajracharya

10

아래 코드를 사용하십시오.

model = forest.fit(train_fold, train_y.ravel())

아래와 같이 오류로 인해 여전히 때리는 경우가 있습니까?

Unknown label type: %r" % y

이 코드를 사용하십시오.

y = train_y.ravel()
train_y = np.array(y).astype(int)
model = forest.fit(train_fold, train_y)

3

이를 수행하는 또 다른 방법은 ravel

model = forest.fit(train_fold, train_y.values.reshape(-1,))

나는 이것이 Pandas Series에서 작동하지만 Pandas DataFrames에서는 작동하지 않는다고 덧붙이고 싶습니다.
Sal Alturaigi

2

neuraxle 쉽게이 문제를 해결 할 수 있습니다 :

p = Pipeline([
   # expected outputs shape: (n, 1)
   OutputTransformerWrapper(NumpyRavel()), 
   # expected outputs shape: (n, )
   RandomForestRegressor(**RF_tuned_parameters)
])

p, outputs = p.fit_transform(data_inputs, expected_outputs)

Neuraxle은 딥 러닝 프로젝트에서 하이퍼 파라미터 튜닝 및 AutoML을위한 sklearn과 유사한 프레임 워크입니다!


1
format_train_y=[]
for n in train_y:
    format_train_y.append(n[0])

2
이 코드가 문제를 해결할 수 있지만, 이것이 문제를 해결하는 방법과 이유에 대한 설명포함 하여 게시물의 품질을 향상시키는 데 실제로 도움이 될 것이며 아마도 더 많은 찬성표를 얻게 될 것입니다. 지금 질문하는 사람뿐만 아니라 미래에 독자를 위해 질문에 답하고 있다는 것을 기억하십시오. 제발 편집 설명을 추가하고 제한 및 가정이 적용 무엇의 표시를 제공하는 답변을.
Dharman

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.