codestates / codestates/ds-TIL

[TIL] 오예은_201022

Open
#640 0 comments 0 reactions 0 assignees View on GitHub
DSFT01
Dominant language
No language data
Stars
2
Forks
1
PR merge metrics
No merged PRs in 30d

Description

## 키워드
`모델선택(Model Selection)` `교차검증(Cross Validation)` `RandomizedSearchCV` `GridSearchCV` `하이퍼파라미터`
## 배운 것
#### 교차검증(Cross validation)
- cross validation을 쓰는 이유:
- train and validation set을 나눌 때 어떻게 데이터를 나누냐에 따라 학습결과가 달라지기 때문에 고르게 검증할 수 있도록 하기 위함
- 하이퍼파라미터 등 모델에 영향을 주는 변수들을 설정하는데 도움(전체 데이터에 전반적으로 가장 잘 맞을 수 있도록)
- 시계열 데이터에는 적합하지 않음
- 학습데이터를 k개로 나눠서 1개는 테스트 데이터로, 나머지는 번갈아가면서 train, validation 데이터로 사용(k-fold CV)

#### 하이퍼파라미터
- 최적화(optimization): 훈련 데이터로 더 좋은 성능을 얻기 위해 모델을 조정하는 과정
- 일반화(generalization): 학습된 모델이 처음 본 데이터에서 얼마나 좋은 성능을 내는지
- 하이퍼파라미터의 최적값을 찾기 위해 RandomizedSearchCV 또는 GridSearchCV 사용

#### 기타
- feature engineering할 때 문제가 너무 복잡한 경우엔 딥러닝이 유리
- target encoder: leakage 주의, smoothing 설정 시 randint를 쓰면 오류가 나니 실수형으로 설정하기

## 더 공부 해볼 것
- 분류모델, 선형모델에서 RandomizedSearchCV 사용해보기
- 여유시간이 생기면 [auto-sklearn](https://medium.com/dlift/%EC%A0%81%EB%8B%B9%ED%95%9C-%EC%A0%95%ED%99%95%EB%8F%84-%EA%B0%80-%EB%B3%B4%EC%9E%A5%EB%90%98%EB%8A%94-%EB%AA%A8%EB%8D%B8%EC%9D%84-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EB%A7%8C%EB%93%A4-%EC%88%98%EB%8A%94-%EC%97%86%EC%9D%84%EA%B9%8C-f0da4a6a9607) 읽어보기

- 한시간 가량 계속 파라미터 오류 해결이 안되어 지지부진 했는데, 알고 보니 대소문자를 섞어써서 발생한거였다.
컴퓨터는 사람이 아니라서 그정도를 알아서 판별해줄만한 센스는 없으니 알아서 대소문자 구분을 철저히 해야겠다.
```py
Invalid parameter RandomForestClassifier for estimator Pipeline
```
- 가장 좋다고 나온 모델에 테스트 데이터를 넣으면 자꾸 오류가 난다. feature engineering 때문에 특성 수가 줄었던 모델로 학습했던 것이 남아있어서 차원수가 안맞다고 뜨는건가 싶다. 그런데 어떤 경우엔 에러가 안나고 어떤경우엔 에러가 난다.
그리고 아래 코드는 feature engineering을 수행한 모델에 다시 원데이터로 모델을 학습시켰는데도 에러가 발생했다.
무슨 차이인지 아직 모르겠지만, 파이프라인과 randomized search CV를 다시 공부해야할 것 같다.
```py
pipe = clf.best_estimator_ # 만들어진 모델 중 가장 성능이 좋은 모델
y_pred = pipe.predict(X_test)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
1 pipe = clf.best_estimator_ # 만들어진 모델 중 가장 성능이 좋은 모델
2
----> 3 y_pred = pipe.predict(X_test)
4
5 # submission 데이터셋에 예측값 넣기

2 frames
/usr/local/lib/python3.6/dist-packages/category_encoders/ordinal.py in transform(self, X, override_return_df)
196 # then make sure that it is the right size
197 if X.shape[1] != self._dim:
--> 198 raise ValueError('Unexpected input dimension %d, expected %d' % (X.shape[1], self._dim,))
199
200 if not list(self.cols):

ValueError: Unexpected input dimension 29, expected 38
---------------------------------------------------------------------------
```

## 느낀점
- 해보고싶은 것은 많은데 아직 사용하는게 익숙치 않은 탓인지 한 셀 실행하면 다음셀이 오류인 과정이 반복되어서 시간이 부족한 느낌이다. 지금은 배워가는 단계라 천천히 하지만, 익숙해지다보면 속도를 낼 수 있겠지?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.