Home Project

Data Analyst's Home Project

[Legacy] Data/[Legacy] Machine Learning

Expected 2D array, got 1D array instead 에러 : flatten(), reshape(), ravel() 알아보기

Haeon 2019. 2. 23. 02:56
728x90

에러 : 

Expected 2D array, got 1D array instead:

array=[0.23 0.21 0.23 ... 0.7  0.86 0.75].

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.



오늘 아무 생각없이 모델 피팅하다가 이런 에러문구가 떴다.

머신러닝 모델에서 fit 메소드는 2차원 배열을 입력으로 기대한다. 그런데, 1D 배열을 인풋으로 피팅하였기 때문에 에러가 발생한 것이다.

이럴 경우, 1차원을 2차원으로 변환해야한다. reshape메소드를 통해 배열의 형태를 바꿀 수 있다.


예를 들어, 

A라는 배열의 shape가 (1000, )이면 이를 모델에 피팅할 때 에러가 발생한다. 

shape가 (1000, )이라는 것은, 1000개의 원소가 1차원으로 있다는 뜻이다.

이를


A.reshape(-1, 1)


하게 되면, shape가 (1000, 1)로 바뀌고 되고 피팅이 가능해진다.

여기서 -1은 해당 축(axis)의 사이즈를 자동으로 결정하라는 뜻이다. 위 코드에서 (-1, 1)이라 했으므로, 행(row)는 자동결정하고, 열(columns) 부분을 1열로 지정한다. 이렇게 하면, 2차원 배열로 reshape된다.


또한, newaxis를 통해 차원만 1차원 증가시킬 수 있다.


a = array([1,2,3,4,5])

a[:, np.newaxis]      -->

array([[1],

        [2],

        [3],

        [4],

        [5]])




추가로, flatten( )와 raval( ) 메소드에 대해 알아보겠다.



1. a.flatten()


2. a.ravel()


둘 다 다차원 배열을 무조건 1차원 배열로 펼친다.





반응형
LIST