Hands-On Machine Learning with Scikit-Learn and TensorFlow 책을 공부하고 내용을 정리한 글이다.
데이터 처리 과정 순서를 데이터 파이프라인이라고 할 수 있다. 조작하고 변형해야 할 데이터가 무수히 많으므로 머신러닝에서 파이프라인은 흔히 사용된다.
1. Frame the problem
문제가 어떤 종류의 문제인지 파악한다. 지도학습인지, 비지도학습인지, 분류문제인지, 회귀문제인지 등을 파악한다.
여기서 사용되는 데이터셋(California housing dataset)은 지도학습이고, 회귀문제임을 파악할 수 있고 최종적으로 multivariate regression 으로 결론 지을 수 있다.
2. Select a performance measure
알맞은 성능 평가 지표를 고른다. 보통 회귀문제는 Root Mean Square Error를 주로 사용한다. -> 유클리이디언
만약, outlier가 많다면 Mean Absolute Error를 주로 사용한다. -> 맨해튼
3. Check the Aussumptions
설정한 가설이 맞는지 다시 한번 확인해본다.
4. Create the workspace and download the data
info()로 데이터 구조를 살펴본다. min, max, std, quantile 등을 확인해본다.
from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(housing, test_size=0.2, random_state=42)
데이터를 시각화하여 확인해보며 인사이트를 얻는다.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
num_pipeline = Pipeline([
('imputer', SimpleImputer(strategy="median")),
('attribs_adder', CombinedAttributesAdder()),
('std_scaler', StandardScaler()),
])
housing_num_tr = num_pipeline.fit_transform(housing_num)
위는 사이킷런에서 제공하는 수치형 변수를 처리하는 간단한 파이프라인 클래스이다.
사이킷런에서 제공하는 ColumnTransformer 는 수치형 변수 뿐만 아니라 범주형 변수도 함께 고려하여 전처리하는 기능을 제공한다.
from sklearn.model_selection import GridSearchCV
param_grid = [
{'n_estimators': [3, 10, 30], 'max_features': [2, 4, 6, 8]},
{'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3, 4]},
]
forest_reg = RandomForestRegressor()
grid_search = GridSearchCV(forest_reg, param_grid, cv=5,
scoring='neg_mean_squared_error',
return_train_score=True)
grid_search.fit(housing_prepared, housing_labels)
위는 사이킷런에서 제공하는 패키지로 모델을 파인튜닝할 때, 실험해보고 싶은 조합을 입력하여 가장 좋은 성능을 내는 하이퍼파라미터를 쉽고 빠르게 선정할 수 있게 해준다. 이 때, 성능 평가는 cross validation으로 진행된다.
만약 시도해야 할 조합의 수가 너무 많으면, RandomizedSearchCV을 활용한다. 방법은 GridSearchCV와 동일하지만, 랜덤하게 선택하여 평가한다는 차이가 있다.
대량의 데이터셋을 분류할 때 유용하다.
Precision과 Recall은 반비례 관계이다.