Я должен найти лучший гиперпараметр C и гамму SVM (ядро rbf).Я использую цикл for, чтобы найти лучшие параметры c и gamma, используя каждый раз разные начальные значения.Затем я использую в качестве наилучших параметров пару с и гамму, которая чаще всего появляется как лучшее решение.Это правильная процедура?
best_results = {}
seeds = [1, 3, 5, 7, 11, 13, 17, 19]
#find best hyperparameters c and gamma
for seed in seeds:
result = {'best_c' : 0.0, 'best_gamma' : 0.0, 'best_score' : 0.0 }
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.1, random_state=seed)
for C in np.linspace(10.0, 200, 40):
for gamma in np.linspace(0.001, 0.01, 20):
rbf_clf = svm.SVC(C = C, gamma = gamma)
scores = cross_val_score(rbf_clf, X_train, Y_train, cv=10, n_jobs=-1)
if(scores.mean() > result['best_score']):
result = {'best_c' : C, 'best_gamma' : gamma, 'best_score' : scores.mean() }
index = "%0.3f%0.3f"%(result['best_c'], result['best_gamma'])
if(not index in best_results):
best_results[index] = []
best_results[index].append(result)
best_index = ""
moda = 0
for index in best_results:
if(len(best_results[index]) > moda):
moda = len(best_results[index])
best_index = index
# get the accuracy of my model
best_c = best_results[best_index][0]['best_c']
best_gamma = best_results[best_index][0]['best_gamma']
test_scores = np.zeros(len(seeds))
for i in range(0,len(seeds)):
seed = seeds[i]
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.1, random_state=seed)
rbf_clf = svm.SVC(C = best_c, gamma = best_gamma)
rbf_clf.fit(X_train, Y_train)
test_scores[i] = rbf_clf.score(X_test, Y_test)
print("C:%0.3f\t Gamma:%0.5f\t Accuracy:%0.5f" %(best_c, best_gamma, test_scores.mean()))