심도 있는 학습기초3:tensorflow2.0과 sklearn...RandomizeSearchCV 하이퍼매개변수 검색

카탈로그

  • 소개
  • 실현 방법
  • 요약
  • 소개하다.


    본 블로그는 tf2를 어떻게 활용하는지 기록할 것입니다.0과 skleran은 구축된 회귀 모델(캘리포니아 집값 예측에 사용)에 대해 초파라미터 검색을 하고 코드는jupyter notebook에서 실행됩니다.

    실현 방법

  • 의존 라이브러리 먼저 가져오기
  • import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    import sklearn 
    import os
    import sys
    import time
    import tensorflow as tf
    from tensorflow import keras
    
    print(tf.__version__)
    print(sys.version_info)
    for module in mpl, np, pd, sklearn, tf, keras:
        print(module.__name__, module.__version__)
    
  • tf를 이용하다.keras의 데이터 집합 인터페이스에서 데이터 집합을 다운로드하고 데이터 구조를 보기
  • from sklearn.datasets import fetch_california_housing
    housing = fetch_california_housing()
    print(housing.DESCR)
    print(housing.data.shape)
    print(housing.target.shape)
    
  • 데이터 집합 분리: 데이터 집합을 트레이닝 집합(train data), 검증 집합(valid data), 테스트 집합(test data)으로 나눈다
  • from sklearn.model_selection import train_test_split
    x_train_all, x_test, y_train_all, y_test = train_test_split(housing.data, housing.target, random_state = 7)
    x_train, x_valid, y_train, y_valid = train_test_split(x_train_all, y_train_all, random_state = 11)
    print(x_train.shape, y_train.shape)
    print(x_test.shape, y_test.shape)
    print(x_valid.shape, y_valid.shape)
    

    traintest_split 함수: 행렬을 무작위로 훈련 서브집합과 테스트 서브집합으로 나누고 구분된 훈련 집합 테스트 집합 샘플과 훈련 집합 테스트 집합 라벨을 되돌려줍니다.  매개 변수 randomstate: 무작위 피드입니다.랜덤수 피드: 사실은 이 그룹의 랜덤수 번호입니다. 중복 시험이 필요할 때 같은 랜덤수를 얻을 수 있습니다.예를 들어 네가 매번 1을 채우면 다른 매개 변수와 같은 상황에서 네가 얻은 무작위 그룹은 같다.그러나 0을 쓰든지 말든지 매번 다르다.  랜덤 수의 생성은 씨앗에 달려 있다. 랜덤 수와 씨앗 간의 관계는 다음과 같은 두 가지 규칙에 따른다. 씨앗이 다르면 서로 다른 랜덤 수가 발생한다.피드가 같으면 실례가 다르더라도 같은 랜덤수를 만들 수 있다.
  • sklearn을 이용한다.preprocessing의 함수는 훈련, 검증, 테스트 데이터를 표준화하는데 입력 데이터를 표준의 정적 분포 x~(0,1)
  • 에 복종시키기 위한 것이다.
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    x_train_scaler = scaler.fit_transform(x_train)
    x_valid_scaler = scaler.transform(x_valid)
    x_test_scaler = scaler.transform(x_test)
    

      StandardScaler 클래스는 데이터를 귀일화하고 표준화하는 클래스입니다.표준화 방법: X = (x --μ )/σ X=(x-\mu)/\sigma X=(x−μ)/σ, μ\mu μ데이터 x x x의 평균값으로σ\sigma σ데이터 x x x의 표준 차이인 경우 X X X X ~ N (0,1) N (0,1) N (0,1) fittransform 방법은fit와transform의 결합:fittransform(x train) 계산 xtrain의μ\mu μ및σ\sigma σ및 저장μ\mu μ및σ\sigma σ,그런 다음 x x x 를 표준화합니다.  transform은 xtrain의μ\mu μ및σ\sigma σ입력 데이터를 표준화하다.
  • keras를 이용한다.wrappers.scikit_learn.KerasRegressor 함수는 정의된 모델을 sklearn 모델로 변환
  • def build_model(hidden_layers = 1, layer_size = 30, learning_rate = 3e-3):
        model = keras.models.Sequential()
        model.add(keras.layers.Dense(layer_size, activation = 'relu', input_shape = x_train_scaler.shape[1:]))
        for _ in range(hidden_layers -1):
            model.add(keras.layers.Dense(layer_size,activation = 'relu'))
        model.add(keras.layers.Dense(1))
        optimizer = keras.optimizers.SGD(learning_rate)
        model.compile(loss = 'mse', optimizer = optimizer)
        return model
    # step 1:    :          ,  KerasRegressor;     KerasClassifier     
    sklearn_model = keras.wrappers.scikit_learn.KerasRegressor(
        build_fn = build_model)
    callbacks = [keras.callbacks.EarlyStopping(patience = 5, min_delta = 1e-2)]    
    history = sklearn_model.fit(x_train_scaler, y_train, 
                        validation_data = (x_valid_scaler, y_valid),
                        epochs = 10,
                        callbacks = callbacks)
    
  • 정의 매개 변수 집합과 검색 매개 변수reciprocal(a, b) 함수: 연속 공간의 분포를 생성합니다. f(x)=1/(x*log(b/a)a<=x<=b 여기에서 Reciprocal의 함수 기능을 볼 수 있습니다:
  • from scipy.stats import reciprocal
    reciprocal.rvs(1e-4, 1e-2, size=10)
    # 1e-4:      
    # 1e-2:      
    # size:        
    

    param_distribution: 이 사전에 저장된 매개 변수는 이전 단계build모델 함수의 입력 매개 변수
    # step 2:       :
    from scipy.stats import reciprocal
    # f(x) = 1/(x*log(b/a)) a<=x<=b
    
    param_distribution = {
        'hidden_layers': [1, 2, 3, 4],
        'layer_size': np.arange(1, 100),
        'learning_rate': reciprocal(1e-4, 1e-2),
    }
    # step 3:     
    from sklearn.model_selection import RandomizedSearchCV
    random_search_cv = RandomizedSearchCV(sklearn_model,
                                         param_distribution,
                                         n_iter = 10,
                                         cv =3,
                                         n_jobs = 1)
    random_search_cv.fit(x_train_scaler, y_train, epochs = 100,
                        validation_data = (x_valid_scaler, y_valid),
                        callbacks = callbacks)
    # cross_validation:      n ,n-1     ,        
    
  • 검색한 최적 매개 변수를 인쇄하고 모델을 평가합니다
  • .
    print(random_search_cv.best_params_)
    print(random_search_cv.best_score_)
    print(random_search_cv.best_estimator_)
    
    model = random_search_cv.best_estimator_.model
    model.evaluate(x_test_scaler, y_test)
    

    총결산


    이상은tensorflow2.0과 sklearn...RandomizeSearchCV가 초파라미터 검색을 하는 전 과정, 완전한 코드 수업은 저의github를 참고하세요.

    좋은 웹페이지 즐겨찾기