어떻게 프로젝트를 시작하게 되었고, 진행하면서 느낀 개발자와 디자이너의 생생한 스토리를 직접 확인해보세요!
Development
ML Chap 2. Machine Learning Project-2
#DS/ML/DL
HyeWon Lee
2023. 9. 18.
ML Chap 2. Machine Learning Project-2
Machine Learning Project(2)
Hands-on-Machine-Learning Chap2
이전 project 과정에 이어서
4. Prepare the data for Machine Learning algorithms.
데이터 준비를 수동이 아니라 함수를 만들어 자동화하는 이유 -> 데이터 변환이 쉽고 어떤 조합이 좋은지 확인하는데 편리, 변환 라이브러리를 점차 구축하게 됨, 새 데이터 주입 전에 함수 사용 가능
separate the predictors and the labels since we don’t necessarily want to apply the same transformations to the predictors and the target values
1) Data Cleaning
누락된 attribute를 처리하는 방법 - option1)해당 구역 제거 - option2) 전체 특성 삭제 - option3) 어떤 값으로 채우기(0, mean, median…)
Imputer는 누락된 값을 쉽게 다루도록 함.
2) Handling Text and Categorical Attributes
categorical인 ocean_proximaty를 numerical로 변환
0 category에 1category보다 4category가 더 비슷하다는 문제. one-hot encoding ->one-hot vector로 바꿔주기
fit_transform() method는 2차원 배열을 넣어줘야 함. 1차원 배열인 housing_cat_encoded 구조를 바꿔야 함.
a SciPy sparse matrix - 수천개의 categories가 있는 categorical features일 때 효율적. - OneHotEncoder하면 열이 수천개인 행렬로 변하고 각 행은 1이 하나뿐이고 그 외는 모두 0인 행렬이 됨. 메모리 낭비를 피하기 위해 sparse matrix는 0이 아니 원소의 위치만 저장함.
to convert it to a (dense) NumPy array, just call the toarray() method
text category를 numerical category로, numerical category를 one-hot vector로 바꿔주는 이 두 가지 변환을 CategoricalEncoder를 사용하여 한번에 처리 가능
3) Custom Transformers
4) Feature Scaling
the input numerical가 너무 다른 scales을 가질 때 머신러닝 알고리즘은 잘 작동하지 않는다. scaling the target values는 일반적으로 요구되지 않는다.
scaling 방법
(1) min-max scaling(nomalization)
data에서 min을 빼고 (max-min)로 나누면 0~1 범위에 들도록 값을 이동할 수 있다. 0~1 범위를 원하지 않으면 feature_range hyperparameter로 범위 변경 가능.
> 범위의 상한 하한이 있음
(2) standardization
먼저 mean을 뺀다. (그래서 standardization을 하면 mean이 0이 됨.) 그 다음 sd로 나누어 the resultiong distribution이 unit variance를 갖도록 한다.
> 범위의 상한 하한이 없어서 범위가 요구되는 알고리즘에서는 문제 발생. -> outier에 영향을 덜 받음.
5) Transformation Pipelines
Pipeline : A sequence of data processing components
5. Select a model and train it.
1) Training and Evaluation on the Traning Set
median_housing_values의 대부분이 120000에서 265000 사이의 값이었는데 prediction error가 68628인 것은 좋지 않다. underfitting됨
underfitting 해결 방법
more powerful model 선택
better features 주입
constraints 줄이기
more powerful model 선택하도록 decisiontreeregressor로 training
error가 0이 나옴. -> error가 0이 될 수 없기 때문에 overfitting된 것.
2) Better Evaluation Using Cross-Validation
DecisionTree model을 평가하는 방법 - train_test_split으로 training set를 더 작은 training set과 test set으로 나누어 training - K-fold cross validation
decisiontree보다 linear regression의 성능이 더 좋다.
randomeforest는 성능이 좋아보이지만 training score가 test score보다 매우 낮으므로 여전히 overfitting.
overfitting 해결 방법
model을 간단히
constraints
더 많은 training data 모으기
6. Fine-tune your model.
1) Grid Search
탐색하려는 hyperparameter와 시도해볼 값을 지정하면 가능한 모든 combination of hyperparameter 에 대해 cross validation을 사용해 평가함.
2) Randomized Search
비교적 적은 수이면 grid search 사용 괜찮으나 hyperparameter의 search space가 커지면 RandomizedSearchCV를 사용하는 것이 좋음. -> 반복횟수를 설정하면 hyperparameter가 각기 다른 값을 탐색한다는 장점 -> 반복횟수 조절만으로 컴퓨팅 자원 제어한다는 장점