티스토리 뷰
source:scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html
class sklearn.impute.SimpleImputer(*, missing_values=nan, strategy='mean', fill_value=None, verbose=0, copy=True, add_indicator=False)
Imputation transformer for completing missing values.
scikit-learn.org/stable/modules/impute.html#impute
어떤 이유에서든 현실의 많은 데이터들은 불완전하다. 빈칸이거나 의미 없는 값들이 기록되어 있다. 문제는 scikit-learn에서 불완전한 데이터를 입력할 수 없다는 점이다. scikit-learn estimator 들은 입력된 모든 값들이 숫자이며 의미 있는 값이라고 간주한다.
그럼 어떻게 비어 있는/잘못된 값들을 처리할 것인가.
1. 가장 쉬운 방법, 하나라도 비어 있다면 해당 열column을 모두 삭제한다.
가장 쉽게 데이터를 조작할 수 있지만, 이렇게 해버리면 의미있는 데이터를 너무 많이 삭제하게 된다. 예를 들어 한 column안에 1만개의 row가 들어 있다고 하자. 그런데 하나가 빈칸이다. 그러면 1만개 중에 1개가 빈칸이기 때문에 나머지 9999개의 데이터를 쓰지 못하게 된다.
2. Impute missing value, 비어 있는 값을 임의로 만들어 채워 넣는다.
어떻게 만드느냐는 방법이 다양하다. 여러 방법을 두 가지로 분류하면 다음과 같다.
1. Univariate; i번째 dimension에서 비어 있는 값을 만들 때 i번째 dimension만 고려해서 만든다. impute.SimpleImputer
2. Multivariate; 비어있는 값을 채워넣을 때, 전체 값을 고려해서 만든다. impute.IterativeImputer
SimpleImputer는 numpy nan(not a number), sparse matrix, pandas DataFrame 등의 자료형에 비어 있는 int, float, str, np.nan 값들을 impute 할 수 있다. 다만, 비어 있는 값이 "missing_value"으로 표기되어 있어야 변형이 가능하다.
import numpy as np
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp.fit([[1,2], [6, np.nan], [7,6]])
imp2 = SimpleImputer(missing_values=-1, strategy='mean')
imp.fit([[-1,2], [6, -1], [7,6]])
위의 경우 np.nan에 대해 impute하고, 아래 경우 -1에 대해 impute 한다. default는 np.nan이다.
SimpleImputer의 impute strategy
mean, meadian, most_frequent, constant; fill_value parameter로 고정된다.
'머신러닝 라이브러리 > scikit-learn' 카테고리의 다른 글
LabelEncoder and OneHotEncoder (0) | 2021.01.08 |
---|---|
RandomForestRegressor and Ensemble methods (0) | 2021.01.07 |
DecisionTreeRegressor (0) | 2021.01.03 |