상세 컨텐츠

본문 제목

[국비지원무료교육][빅데이터 개발자 과정][머신러닝] 파이썬- 다섯 번째 수업: iris 데이터 분석 실습 풀이

Python

by Sam_Park 2022. 3. 16. 00:12

본문

- 본 글은 스마트 인재개발원 서포터즈 활동으로 작성한 글입니다

 

  • iris 모델 선택 및 하이퍼 파라미터 튜닝
  • 학습 평가 반복문 작성
  • grid Search
  • knn
    • train_test_ split() 함수
      • 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(횟수 int 21억 2**32)

# 모델 선택 및 하이퍼 파라미터 튜닝

# 모델 선택 및 하이퍼 파라미터 튜닝
## 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 = 1의 경우 train 데이터 score 는 무조건 1.0
k=1 train :  1.0 / test : 0.933
k=3 train : 0.971 / test : 0.955
k=4 train : 0.971 / test : 0.955
k=5 train : 0.9809 / test : 0.977
k=6 train : 0.9619 / test : 0.955
k=7 train : 0.9619 / test : 0.955
k=8 train : 0.9619 / test : 0.911
 
---
i) k=5, p=1 train : 0.9619 / test : 0.9333
ii) k=5, p=2 train : 0.9809 / test : 0.9777
 
---
j) k=5, p=2, weights=uniform train : 0.9809 / test : 0.9777
jj) k=5, p=2, weights=distance train : 1.0 / test : 0.9777
 
---
 
k) k=7, p=2, weights=distance train : 1.0 / test : 0.9777
kk) k=3, p=2, weights=distance train : 1.0 / test : 0.9777

 

*** 우리 반에서 쌤한테 질문해서 받은 꿀팁!

# 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

 

스마트인재개발원 : 네이버 블로그

빅데이터, 인공지능, 사물인터넷, SW 전문 취업연계 무료교육기관‍♀️ 교육은 무료로! 취업은 당당하게!

blog.naver.com

 

관련글 더보기

댓글 영역