Существуют различные гиперпараметры, используемые для обучения модели, и выбор лучшего гиперпараметра играет важную роль в достижении наилучшей производительности вывода. Итак, для преодоления таких проблем мы используем Grid Search.

GridSearchCV от Scikit-learn (где CV означает перекрестная проверка) обучает модель различным гиперпараметрам, введенным пользователем, и выводит наиболее подходящий гиперпараметр для соответствующих обучающих данных и модели.

В подходе GridSearchCV модель машинного обучения оценивается для диапазона значений гиперпараметров. Этот подход называется GridSearchCV, потому что он ищет лучший набор гиперпараметров из сетки значений гиперпараметров.

>>> X =  [[62812.09301], [66646.89292], [53798.55112], [79370.03798], [59729.1513], [68499.85162], [39814.522], [51752.23445], [58139.2591], [53457.10132], [73348.70745], [55421.65733], [37336.3383], [68304.47298], [72776.00382], [64662.30061], [63259.87837], [52682.06401], [54503.14423], [55368.23716]]

 >>> y = [[35321.45877], [45115.52566], [42925.70921], [67422.36313], [55915.46248], [56611.99784], [28925.70549], [47434.98265], [48013.6141], [38189.50601], [59045.51309], [42288.81046], [28700.0334], [49258.87571], [49510.03356], [53017.26723], [41814.72067], [43901.71244], [44633.99241], [54827.52403]]

>>> parameters =  [{'alpha': [0.5, 0.1, 0.01, 0.001], 'l1_ratio': [0.25, 0.5, 0.75, 1]}]

Я буду использовать ElasticNet для этого примера. Я хотел протестировать значения альфа и l1_ratio. Эти значения были добавлены в переменную параметров. Наша первая цель - найти лучшие параметры для этой модели.

Время кодирования…

>>> from sklearn.linear_model import ElasticNet
>>> from sklearn.model_selection import GridSearchCV
def cross_validation(X,y,parameters):
 # Use grid search to tune the parameters:
 eNet = ElasticNet()
 grid = GridSearchCV(eNet, parameters).fit(X, y)
 best_estimator = grid.best_estimator_
 return {‘alpha’: best_estimator.alpha,
 ‘l1_ratio’: best_estimator.l1_ratio}
>>> cross_validation(X,y,parameters)
{'alpha': 0.5, 'l1_ratio': 1}

Когда мы рассматриваем наши входные данные и алгоритм, лучшее значение альфа равно 0,5, а лучшее значение l1_ratio равно 1.

Попробуем на реальном примере. В этом примере я буду использовать набор данных «диабет».

>>> from sklearn import datasets
>>> from sklearn.linear_model import ElasticNet
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import GridSearchCV
>>> from sklearn.model_selection import train_test_split
>>> import numpy as np
# Load the dataset
>>> diabetes = datasets.load_diabetes()
>>> X, y = diabetes.data, diabetes.target
>>> parameters = [{‘alpha’: [0.5, 0.1, 0.01, 0.001], ‘l1_ratio’: [0.25, 0.5, 0.75, 1]}]
# Splitting dataset into train and test set
>>> X_train, X_test, Y_train, Y_test = train_test_split( X, y, 
 test_size = 1/3, 
 random_state = 0 )
def cross_validation(X,y,parameters):
 # Use grid search to tune the parameters:
 eNet = ElasticNet()
 grid = GridSearchCV(eNet, parameters).fit(X, y)
 best_estimator = grid.best_estimator_
 return {‘alpha’: best_estimator.alpha, ‘l1_ratio’: best_estimator.l1_ratio}
>>> cross_validation(X_train, Y_train, parameters))
{'alpha': 0.001, 'l1_ratio': 1}

Да. это лучшая альфа и l1_ratio для ElasticNet.

Теперь давайте изменим алгоритм на логистическую регрессию.

# Model training
>>> max_accuracy = 0
# grid searching for learning rate
>>> parameters = { ‘C’ : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] }
>>> model = LogisticRegression()
>>> grid = GridSearchCV( model, parameters )
>>> grid.fit( X_train, Y_train )
>>> print(“best_estimator_”, grid.best_estimator_)
best_estimator_ LogisticRegression(C=2)

Мы нашли лучшее значение C. Это 2.

# Prediction on test set
Y_pred = grid.predict( X_test )
# measure performance
correctly_classified = 0
# counter
count = 0
for count in range(np.size(Y_pred)):
    if Y_test[count] == Y_pred[count] :
        correctly_classified = correctly_classified + 1
accuracy = ( correctly_classified / count ) * 100
print( “Maximum accuracy achieved by sklearn model through grid searching : “, np.round( accuracy, 2 ) )
Maximum accuracy achieved by sklearn model through grid searching : 0.68

Спасибо за чтение :)