슈퍼 파라미터 조정의 온화한 지침.

안녕하세요!
안녕하세요?
오늘 우리는 RandomisedSearchCV 알고리즘을 빌려 초파라미터 조정을 진행할 것이다.

무엇이 슈퍼 파라미터입니까?


기계 학습 알고리즘을 사용할 때 기본적으로 특정 알고리즘의 실례나 방법과 관련된 각종 매개 변수를 제공하여 좋은 결과를 얻을 수 있음을 살펴본다.그러나 만약 우리가 결과의 정확성을 높이려면 기본 매개 변수를 조정해야 한다.특정 알고리즘의 실례를 이용하여 이런 파라미터를 조정하여 주어진 모델의 정밀도를 높이는 과정을 초파라미터 조정이라고 할 수 있다.
행처럼 보이면 벡터 분류기 SVC 실례를 지원하는 기본 매개 변수 예시를 볼 것입니다.

위의 예에서, 우리가 SVC 실례의 파라미터를 보았을 때, 우리는 위에서 언급한 기본 파라미터를 얻을 것이다.따라서 SVC 인스턴스를 인스턴스화할 때 기본 매개변수가 전달됩니다.단, 우리가 SVC 공식 문서를 방문했을 때, 우리는 이 인자들이 사전이나 목록으로 전달될 수 있음을 보았다.따라서 우리는 이러한 매개 변수의 유연성을 이용하여 서로 다른 매개 변수를 시도하고 최상의 매개 변수를 찾아 최상의 결과를 제시한다.
그래서 우리가 해야 할 일은 데이터 집합을 가져와 그것을 처리하고 기본 매개 변수의 정확성을 찾은 다음에 몇 개의 매개 변수를 조정하여 점수를 높이는 것이다.
이 작업에 대해서는 Jupyter 노트북을 사용합니다.만약 네가 로컬 기기에서 이 일을 하는 것을 좋아한다면, 괜찮지만, 나는 네가 온라인 Jupyter 노트북을 사용하는 것을 강력히 건의한다.Colab는 매우 좋은 자원으로 무료로 사용할 수 있으며 Deepnote는 Google Colab의 또 다른 대체품입니다.
여기서는 개인적으로 Deepnote을 사용할 것입니다.
    #importing required moduels.
    import pandas as pd #for tabular data frame analysis
    import numpy as np. #Form mathematical Manipulation
    import matplotlib.pyplot as plt #for data visulaization
    import seaborn as sns #Seaborn is developed on top of matplotlib library
그래서 우리는 데이터 집합이 필요하다.kaggle에는 다양한 데이터 세트가 제공됩니다.우리는 Kaggle Heart Disease Dataset에서 간단한 데이터 집합을 얻었다.
#loading dataset
df = pd.read_csv('./heart.csv') #The dataset is downloaded and saved to root folder.
df.head()

그 다음에 우리는 데이터 집합의 다섯 줄을 얻었다.
그러나 만약에 우리가 목표 특징을 자세히 관찰하면 우리는 모든 1을 볼 수 있다. 만약에 우리가 df['Target']에 대해 더 가까운 거리를 덮어쓰면 데이터 집합의 앞부분은 목표 특징에 1개의 값이 있고 나머지는 0개의 값이 있는 모델을 볼 수 있다.이것은 교육, 테스트 단계에서 좋지 않은 결과를 초래할 수 있는 매우 큰 문제일 수 있다.그래서 우리가 해야 할 일은 판다로 카드를 씻는 데이터 집합이다.sample () 방법.
    df = df.sample(frac = 2, random_state=42, replace = True)
    df.head()
이후에 우리가 데이터 집합을 분석할 때 우리는 목표 변수 중 0과 1의 무작위 분포를 볼 수 있다.

현재 우리가 해야 할 일은 데이터 집합에 빈 값이나 부족한 값이 있는지 확인하는 것이다.
    df.isnull().sum()

여기서 우리는 빈 값이 없다는 것을 볼 수 있다.
이제 저희가 기계 학습 미션을 시작할 준비를 하고 있습니다.
우선 필요한 모듈을 가져옵니다.
    #Import Machine Learning Libraries
    from sklearn.model_selection import train_test_split
    from sklearn import svm 
    from sklearn.model_selection import RandomizedSearchCV
필요한 모뎀을 가져옵니다.train test split 는 데이터 세트를 트레이닝 및 테스트 하위 데이터 세트로 구분하는 데 사용됩니다.지원 벡터기는 지원 벡터기 알고리즘이다.RandomizedSearchCV는 하이퍼패라메트릭 조정에 사용됩니다.RandomizedSearchCV의 대체품은 GridSearchCV이지만, RandomizedSearchCV는 GridSearchCV보다 빠를 수 있습니다.
    X = df.drop(['target'], 1)
    y = df.target
    print(X.shape, y.shape)

그런 다음 피쳐 변수로 구성된 데이터 프레임 X를 생성하여 피쳐 변수가 아니라 대상 변수이기 때문에 대상이 삭제됩니다.y는 판다 시리즈의 대상으로 정의되었고 목표는 판다 시리즈의 유일한 특징이다.
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    clf = svm.SVC()
    clf.fit(X_train, y_train)
    print("The accuracy of the classifier is {}".format(clf.score(X_test, y_test)))
이 단계에서, 우리는 X, y를 훈련과 테스트 서브 데이터 집합으로 나누었다.train test split은 네 개의 대상을 되돌려주기 때문에 우리는 이 값을 X train, X test, y train, y test에 저장합니다.파라미터는 X, y,test size=0.2 파라미터는test 집합에 대해 설명할 데이터 집합의 백분율을 정의합니다. 이 예에서test 집합은 X test와 y test입니다.
그리고 SVC (벡터 분류기 지원) 를 가변 clf로 실례화하고, fit () 방법으로 X 서열과 y 서열을 맞춥니다.
이 분류기의 정확도는 68.85%에 불과하다.

유감스럽게도 68.85%의 정확도가 매우 낮기 때문에 우리는 일부 파라미터를 조정하여 정확도를 높이려고 시도한다.
#Lets try tuning some hyperparameters.
    param_dist = {'C': [0.1, 1, 10, 100, 1000],
    'gamma': [1, 0.1, 0.01, 0.001, 0.0001],
    'kernel': ['rbf']
    }
    svc_hyper = RandomizedSearchCV(SVC(), param_distributions=param_dist, verbose=2, cv=3, random_state=42, n_iter=10, scoring='accuracy')
    svc_hyper.fit(X_train, y_train)

여기서, 우리는 C,gamma,kernel과 같은 서로 다른 매개 변수 집합을 사용하여 매개 변수의 조합을 순환시키고, 마지막으로 이 매개 변수의 조합을 정의하여 최상의 결과를 얻었다.
여기 C는 정규화 매개 변수입니다.정규화의 강도는 C와 반비례한다. 반드시 엄격해야 한다.징벌은 2급 징벌의 제곱이다.
매개 변수gamma는'rbf','poly','sigmoid'의 핵계수이다.
매개 변수kernel은 알고리즘에 사용할 핵 형식을 지정합니다.그것은 반드시 '선형', '다각형', 'rbf', 'S형', '예상 계산' 또는 '호출 가능' 중의 하나여야 한다.만약 주지 않으면 "rbf"를 사용합니다.
여기서 우리는 rbf만 사용한다. 왜냐하면 다른 핵은 많은 시간을 들여 훈련해야 하기 때문이다.너 스스로 다른 내핵을 시도해 보아라. 이것이 결과를 바꿀 수 있는지 없는지를 보자.
SVC에 대한 자세한 내용은 this를 참조하십시오.
    svc_hyper.best_params_

우리가 얻은 가장 좋은 매개 변수는 {'kernel':'rbf','gamma':0.001,'C':1000}이다.그래서 우리는 그것으로 데이터를 합치자.
    best_svc = SVC(C=1000, gamma=0.001, kernel='rbf')
    best_svc.fit(X_train, y_train)
    print("The accuracy of the classifier is {}".format(best_svc.score(X_test, y_test)))

SVC 방법으로 데이터를 합성하고 가장 좋은 파라미터를 선택하여 94.26%의 정밀도를 얻었다.이것은 우리가 처음 관찰한 68.85%에 대해서 말하자면 매우 대단한 것이다.
따라서 RandomizedSearchCV를 사용하여 매개변수를 조정하고 정밀도를 높일 수 있습니다.
GitHub 재구매 코드: https://github.com/bibekebib/Hyperpramater-tuning-article-code
Deepnote 공유 코드: https://deepnote.com/@bibek-chalise/Hyperparameters-Tuning-Tutorial-j46REW6sTXaWqbz8APnolQ#
만약 당신이 다른 알고리즘을 시도하고 싶다면, 여기에 파라미터 목록이 하나 있는데, 당신은 초과 조정할 수 있습니다.
    #Random Forest 
    n_estimator = [int(x) for (x) in np.linspace(100, 1200, num=12)]
    max_depth = [int(x) for x in np.linspace(5, 30, num=6)]     
    min_samples_split = [2, 5, 10, 15, 100]
    min_samples_leaf = [1, 2, 5, 10] criterion = ['gini', 'entropy']
    param_dist = { "n_estimators" : n_estimator, "max_depth" : max_depth, "min_samples_leaf":min_samples_leaf, "criterion":criterion, "min_samples_split":min_samples_split }

    #KNN
    n_neighbors = [int(x) for x in np.linspace(start = 1, stop = 100, num = 50)]
    weights = ['uniform','distance'] 
    metric = ['euclidean','manhattan','chebyshev','seuclidean','minkowski'] 
    random_grid = { 'n_neighbors': n_neighbors, 'weights': weights, 'metric': metric, }

    #Logistic Regression
    param_dist = { 'penalty' : ['l1', 'l2'], 
    'C' : [0, 1, 2, 3, 4] 
    }

    #Gaussian Naive
    params_NB = {'var_smoothing': np.logspace(0,-9, num=100)}

즐겁게 공부하세요!

좋은 웹페이지 즐겨찾기