scikit-learn에서 OneHotEncoder를 사용하고 되돌리는 방법에 대해 알아보자.
머신러닝을 할 때, sklearn.preprocessing.OneHotEncoder 또는 sklearn.preprocessing.LabelEncoder를 사용하여 학습을 하게된다면, 최종 예측 결과도 one-hot encoded 된 결과로 나오게 되는데, 간단하게 inverse_transform을 통해 원래 형식으로 바꿀 수 있다.
아래처럼 샘플 시리즈 ["a", "b", "c"]가 있다고 할 때, OneHotEncoder 또는 LabelEncoder를 사용하게 된다면:
import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
s = pd.Series(['a', 'b', 'c'])
le = LabelEncoder()
ohe = OneHotEncoder(sparse=False)
s1 = le.fit_transform(s)
s2 = ohe.fit_transform(s.to_numpy().reshape(-1, 1))
유의할 점은, LabelEncoder는 주로 1d array (=pandas.Series) 용도이지만 안되진 않는다, DataConversionWarning을 보게될 뿐). 그러나 OneHotEncoder의 경우 반드시 2d array (=pandas.DataFrame)을 사용해야 한다는 것.
1d array를 2d array로 바꿔야 한다거나, 왜 에러가 나는지 모르겠다면 필자의 디버깅 글을 참조하자:
[sklearn] One Hot Encoding 되돌리기
scikit-learn
에서OneHotEncoder
를 사용하고 되돌리는 방법에 대해 알아보자.머신러닝을 할 때,
sklearn.preprocessing.OneHotEncoder
또는sklearn.preprocessing.LabelEncoder
를 사용하여 학습을 하게된다면, 최종 예측 결과도 one-hot encoded 된 결과로 나오게 되는데, 간단하게inverse_transform
을 통해 원래 형식으로 바꿀 수 있다.아래처럼 샘플 시리즈
["a", "b", "c"]
가 있다고 할 때,OneHotEncoder
또는LabelEncoder
를 사용하게 된다면:import pandas as pd from sklearn.preprocessing import LabelEncoder, OneHotEncoder s = pd.Series(['a', 'b', 'c']) le = LabelEncoder() ohe = OneHotEncoder(sparse=False) s1 = le.fit_transform(s) s2 = ohe.fit_transform(s.to_numpy().reshape(-1, 1))
아래와 같은
numpy.ndarray
형식을 보게 된다:# s1 array([0, 1, 2]) # s2 array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
이
array
를 다시 우리가 원하는 string 값으로 받으려면:inv_s1 = le.inverse_transform(s) inv_s2 = ohe.inverse_transform(s2).ravel()
최종값:
# inv_s1 array(['a', 'b', 'c'], dtype=object) # inv_s2 array(['a', 'b', 'c'], dtype=object)
유의할 점은,
LabelEncoder
는 주로 1d array (=pandas.Series
) 용도이지만 안되진 않는다,DataConversionWarning
을 보게될 뿐). 그러나OneHotEncoder
의 경우 반드시 2d array (=pandas.DataFrame
)을 사용해야 한다는 것.1d array를 2d array로 바꿔야 한다거나, 왜 에러가 나는지 모르겠다면 필자의 디버깅 글을 참조하자:
[debugging] Expected 2D array, got 1D array instead
'Python > Scikit-Learn' 카테고리의 다른 글