- 본 글은 스마트 인재개발원 서포터즈 활동으로 작성한 글입니다
# 모델 선택 및 하이퍼 파라미터 튜닝
# 모델 선택 및 하이퍼 파라미터 튜닝
## train test 분할
### X (문제) , y(정답) 을 넣으면 X_train, X_test, y_train, y_test로 만듦
### 데이터를 섞어줌
### train과 test의 비율을 조절
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 6)
### X_train, X_test, y_train, y_test 의 순서를 맞추어줘야 함
+ 상기 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 6) 여기 코드와 같이 비율을 조절하고 섞어주는 것을 random sampling 이라고 함.
+이러한 랜덤 샘플링에 사용되는 매개변수는 random_state 이고 이는 특정한 방식으로 데이터 값을 섞어주는 것을 말함.
- 랜덤이 아닌 특정 방식으로 섞어주기 때문에, 둘 이상의 사람이 같은 데이터를 가지고, 같은 random_state 값으로 섞어줄 경우, 같은 형태로 섞인 데이터를 갖게 됨.
X_train.shape, y_test.shape # 데이터 확인
## 모델 로드
from sklearn.neighbors import KNeighborsClassifier
knn_model=KNeighborsClassifier(n_neighbors = 9, p=2, weights='distance')
# 학습
knn_model.fit(X_train, y_train)
# 평가
knn_model.score(X_train, y_train)
knn_model.score(X_test, y_test)
이러한 과정을 진행할 때의 주의사항으로 말씀하신 것은 결과 스코어도 중요하지만, 어떤 것이 적합한 모델인지를 생각하면서 하는 것임.
# 하이퍼 파라미터 튜닝
### 5,6,7 의 과정을 한 번에 진행
### k 값에 따라 train과 test 의 score 가 어떻게 변하는지 한 번에 확인하는 반복문
train_score = []
test_score = []
n_neighbors_set = range(1,51)
for n_n in n_neighbors_set:
# 모델 생성
knn_model = KNeighborsClassifier(n_neighbors = n_n)
# 모델 학습
knn_model.fit(X_train, y_train)
# 점수 확인
train_knn = knn_model.score(X_train, y_train)
test_knn = knn_model.score(X_test, y_test)
# 점수 입력
train_score.append(train_knn)
test_score.append(test_knn)
이 반복문 코드를 통해서 k 값의 변화마다 나타나는 train과 test의 결과 값을 리스트 형태로 저장
이를 시각화하여 확인.
# 시각화
import matplotlib.pyplot as pit
pit.plot(n_neighbors_set, train_score, label = 'Train')
pit.plot(n_neighbors_set, test_score, label = 'Test')
이렇게 하면 아래와 같은 그래프가 나왔었음( 그런데 아마 이 그래프는 random_state 가 6이 아니라 다른 값으로 했을 때의 결과였을 것 )
그리고 아래는 직접 k 값을 조정할 때의 결과 메모 기록
n_neighbors 조정: k= train : / test :
*** 우리 반에서 쌤한테 질문해서 받은 꿀팁!
# k 의 권장 수
# 샘 권장 수 : 데이터의 총 개수 / 정답 종류의 개수
# 105 / 2 / 3
*** 빨리 끝나서 미리 알려주신, 나중에 배울 기술!
# GridSearch
- 하이퍼 파라미터 튜닝을 쉽게 해주는 도구
- 하이퍼파라미터의 범위를 저장해놓으면
학습을 전부 진행하고 가장 좋은 값을 출력
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_neighbors' : range(1,13),
'p' : [1,2],
'weights' : ['uniform' , 'distance']
}
# cv=5
# 전체 데이터를 5 등분하고 하나를 테스트,
# 나머지 4 개를 train으로 사용
grid = GridSearchCV(KNeighborsClassifier(), param_grid, cv = 5)
grid.fit(X_train, y_train)
grid.best_score_
grid.best_params_
귀찮아서 한 번에 다 넣었다 ㅎㅎ...
여튼 - 내용처럼 param_grid 의 안에 매개 변수 범위가 있으면, 그 범위의 모든 케이스를 해서 가장 높은 케이스의 값과 케이스 변수를 출력할 수 있다.
grid.best_score_ 는 가장 높은 케이스의 값
grid.best_params_ 는 가장 높은 케이스이다!
굿굿
- 스마트인재개발원 홈페이지 https://www.smhrd.or.kr/
- 스마트인재개발원 네이버블로그 https://blog.naver.com/jang0_0yw
[국비지원무료교육][머신러닝] 파이썬- 머신러닝 네 번째 수업: 과(대)적합, 과소적합, 일반화, KNN (0) | 2022.03.10 |
---|---|
[국비지원무료교육][머신러닝] 파이썬- 머신러닝 세 번째 수업: 모델 선택, 학습, 평가 (0) | 2022.03.10 |
[국비지원무료교육][머신러닝] 파이썬- 머신러닝 두 번째 수업: 비지도 학습 개념, bmi-500 data, pandas와 pyplot으로 시각화 하기 (0) | 2022.03.08 |
[국비지원무료교육][머신러닝] 파이썬- 머신러닝 첫 수업: 사이킷런(scikitlearn) 랜덤포레스트(RandomForest) 사용해보기 (0) | 2022.03.06 |
pandas 기능 정리(1) (0) | 2021.12.30 |
댓글 영역