일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- student t분포
- 회귀분석
- 기술통계학
- 은준아 화이팅
- 가설검정
- 감성분석
- 모두의 딥러닝
- 밑바닥부터 시작하는 딥러닝
- 최소자승법
- 기초통계
- 차원축소
- 다층 퍼셉트론
- 오래간만에 글쓰네
- F분포
- 텍스트 분류
- 히스토그램
- 군집화
- numpy
- 밑바닥부터 시작하는 딥러닝2
- Django
- 코사인 유사도
- rnn
- 파이썬 pandas
- 자연어 처리
- 텐서플로2와 머신러닝으로 시작하는 자연어처리
- Pandas
- word2vec
- 머신러닝
- 구글 BERT의 정석
- 결정계수
- Today
- Total
데이터 한 그릇
머신러닝(6)_교차검증과 최적 파라미터 본문
교차검증해보기
import numpy as np
np.mean(cross_val_score(knn, X_train, y_train))
최적의 하이퍼 파라미터 찾아보기
temp = []
for i in range(1,20):
knn = KNeighborsClassifier(n_neighbors = i)
knn.fit(X_train, y_train)
temp.append(knn.score(X_test, y_test))
반복문을 통해서 최적의 하이퍼 파라미터 값을 찾아볼 수 있음.
GridSearchCV
GridSearchCV 를 통해서 모델의 최적의 하이퍼 파라미터값을 서칭할 수 있다.
params = {
'n_neighbors' : [2,3,4,5,6,7],
'weights' : ['distance','uniform']
}
grid = GridSearchCV(knn, param_grid = params, cv = 5)
grid.fit(iris2.iloc[:,:-1],iris2.target)
grid 객체를 생성하고 param_grid 에 집어넣어볼 하이퍼 파라미터 값들을 넣어준다.
#params의 요소개수의 곱만큼 나옴
df_score = pd.DataFrame(grid.cv_results_)
df_score[['params','mean_test_score','rank_test_score']]
모든 경우의 하이퍼 파라미터 경우의 수들의 테스트 점수들을 확인해본다.
grid.best_params_
grid.best_score_
최적의 하이퍼 파라미터 값들과 점수를 확인할 수 있다.
wine 데이터로 GridSearchCV 실습
from sklearn.datasets import load_wine
data_wine = load_wine()
data_df = pd.DataFrame(data_wine.data, columns = data_wine.feature_names)
data_df['target'] = data_wine.target
사이킷런 와인 데이터 로드
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV, train_test_split
모듈들 로드
def all_models(X_train, y_train, cv = 10):
#1. LogisticRegression
lr = LogisticRegression()
grid_lr = GridSearchCV(lr, cv =cv, param_grid = {'penalty':['l2']})
grid_lr.fit(X_train, y_train)
lr_pd = pd.DataFrame(grid_lr.cv_results_)
#2. KNeighbors
knn = KNeighborsClassifier()
grid_knn = GridSearchCV(knn ,cv = cv, param_grid = {'n_neighbors':[2,3,5]})
grid_knn.fit(X_train, y_train)
knn_pd = pd.DataFrame(grid_knn.cv_results_)
return pd.concat([lr_pd, knn_pd], axis = 1)
각 모델 객체를 생성하고
하이퍼파라미터 설정할 값들을 `param_grid` 에 딕셔너리로 넣어준다.
all_models(wine.iloc[:,:-1], wine.target)
그에 따른 결과를 보여준다.
pipe 사용하기
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
파이프라인 모듈 불러오기
pipe = Pipeline([('ss', StandardScaler()), ('knn',KNeighborsClassifier())])
객체 생성 `이름 + 객체 ` 로 생성가능.
#pipe 자체에 설정할 수 있는 하이퍼 파라미터 값들
#pipeline은 알고리즘의 하이퍼 파라미터 이름을 앵글링한다.
#앵글링은 프로그램 자체에서 생성한 이름, 우리가 생성한게 아니라 이게 앵글리 기법
pipe.get_params()
pipe 의 설정할 수 있는 하이퍼 파라미터 값들의 목록을 보여준다.
무조건 이 목록에 있는 걸로 grid를 설정해야 한다.
#KNeighborsClassifier 하이퍼 파라미터 확인
pipe.steps[-1][1].get_params()
#StandardScaler 하이퍼 파라미터 확인
pipe.steps[0][1].get_params()
이건 단순히 각 알고리즘마다의 하이퍼 파라미터 목록을 확인하는 것
grid = GridSearchCV(pipe, {'knn__n_neighbors' : [2,3,4,5]})
X = wine.iloc[:,:-1]
y = wine.target
grid.fit(X,y)
학습시키고
grid.best_params_
grid.best_score_
최적의 하이퍼 파라미터 값을 찾아주고, 점수를 찾아준다.
하지만 pipe 는 최적의 하이퍼 파라미터를 찾아주기는 하지만 최적의 알고리즘을 찾아주진 않는다.
GridSearchCV 로 최적의 알고리즘 찾기
알고리즘을 바꾸면서 GridSearchCV 를 할 수 있다.
pipe = Pipeline([('ss',StandardScaler()),('clf',KNeighborsClassifier())])
생성
#pipe 에서 지정하는 하이퍼 파라미터 값 찾기.
pipe.get_params()
'clf': KNeighborsClassifier() 를 목록에서 확인할 수 있다.
params = {
'clf' : [KNeighborsClassifier(), LogisticRegression(max_iter=4000)]
}
grid = GridSearchCV(pipe, param_grid = params )
이걸 이용해서 grid 에다가 pipe 를 집어넣고 하이퍼 파라미터 목록에 다른 알고리즘을 집어넣으면 최적의 알고리즘을 찾는다.
(알고리즘 선택)
params = [{
'clf':[KNeighborsClassifier()], 'clf__n_neighbors' : [2,3,4,5]
},
{'clf':[LogisticRegression()], 'clf__penalty' : ['l2']}]
grid = GridSearchCV(pipe, param_grid = params)
알고리즘마다의 최적의 하이퍼 파라미터 찾기
정리
하나의 알고리즘에 최적의 하이퍼 파라미터 찾는다.
최적의 알고리즘 선택 : 하나의 딕셔너리에 전부 넣어줘 찾는다. (pipe)
알고리즘마다의 최적의 하이퍼 파라미터는 알고리즘마다 딕셔너리를 만들어준다. (pipe)
'머신러닝 > 머신러닝기초' 카테고리의 다른 글
머신러닝(7)_피처 스케일링 (0) | 2021.07.23 |
---|---|
머신러닝(5)_모델을 저장하고 불러오기 (0) | 2021.07.23 |
머신러닝(4)_교차검증 (0) | 2021.07.23 |
머신러닝(3)_전처리 (0) | 2021.07.23 |
머신러닝(2)_데이터분리 (0) | 2021.07.21 |