Правильно ли многократно выполнять перекрестную проверку в k-кратном размере в разных разделах моего набора данных? - PullRequest
0 голосов
/ 28 января 2019

Я должен найти лучший гиперпараметр 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()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...