在验证集上手动调整超参数

时间:2021-05-28 19:24:18

标签: python machine-learning knn

我很困惑我是否以正确的方式使用了验证数据。正如我在谷歌上搜索的那样,验证集用于调整,模型“看到”数据但没有“训练”该数据。 我知道 Gridsearch 是一个调优选项,但它非常慢,我想手动调优以真正了解该过程,因此我的调优如下:

原始数据:train_datatrain_label 用于训练,test_datatest_label 用于测试未见数据

从 sklearn.model_selection 导入 train_test_split 首先,我进一步将原始训练数据拆分为较小的训练集(X_train)和验证集(X_val

X_train, X_val, y_train, y_val = train_test_split(train_data, train_label, test_size=0.2, random_state=42)

n_neighbors = [3,5,7,9,11,13,15,17,19]
p=[1,2]   

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

all_k=[]
all_dist=[]
scores=[]
for k in n_neighbors:
    for dist in p:
        knn= KNeighborsClassifier(n_neighbors=k, p= dist)
        knn.fit(X_train, y_train)

#预测验证集 (X_val) 上的标签以查看哪些超参数产生最高准确度:

    preds=knn.predict(X_val)
        all_k+=[k]
        all_dist+=[dist]
        scores+=[accuracy_score(y_val,preds)]
highest_accuracy=max(scores)
idx_max=scores.index(highest_accuracy)
print("Best parameter: k: {} distance metric: {} accuracy:{}".format(all_k[idx_max], all_dist[idx_max], highest_accuracy))

=> 我得到了 Best parameter: k: 3 distance metric: 2 accuracy: 0.997

所以我在测试集 (k) 上使用这些超参数 (p = 3 和 test_data = 2) 来查看模型的表现

knn2= KNeighborsClassifier(n_neighbors=3, p= 2)
knn2.fit(X_train, y_train)
preds2=knn2.predict(test_data)
accuracy=accuracy_score(test_label,preds2)

=> 我得到了 0.799 的准确率

我是否以正确的方式使用了验证集?我觉得我只是评估了模型 2 次。由于我所做的与 Gridsearch 不同,而且我是机器学习的新手,所以我有点困惑,需要根据我的代码来确认我的理解。提前致谢!

0 个答案:

没有答案
相关问题