【发布时间】:2022-01-13 01:02:27
【问题描述】:
我正在尝试在一个非常小的数据集(Kaggle Leaf 大约有 990 行)上调整 KNN 的超参数:
def knnTuning(self, x_train, t_train):
params = {
'n_neighbors': [1, 2, 3, 4, 5, 7, 9],
'weights': ['uniform', 'distance'],
'leaf_size': [5,10, 15, 20]
}
grid = GridSearchCV(KNeighborsClassifier(), params)
grid.fit(x_train, t_train)
print(grid.best_params_)
print(grid.best_score_)
return knn.KNN(neighbors=grid.best_params_["n_neighbors"],
weight = grid.best_params_["weights"],
leafSize = grid.best_params_["leaf_size"])
打印:
{'leaf_size': 5, 'n_neighbors': 1, 'weights': 'uniform'}
0.9119999999999999
然后我返回这个分类器
class KNN:
def __init__(self, neighbors=1, weight = 'uniform', leafSize = 10):
self.clf = KNeighborsClassifier(n_neighbors = neighbors,
weights = weight, leaf_size = leafSize)
def train(self, X, t):
self.clf.fit(X, t)
def predict(self, x):
return self.clf.predict(x)
def global_accuracy(self, X, t):
predicted = self.predict(X)
accuracy = (predicted == t).mean()
return accuracy
我用 700 行训练和 200 行验证运行了几次,它们是通过随机排列选择的。
然后我得到了从 0.01(经常)到 0.4(很少)的全局精度结果。
我知道我没有比较两个相同的指标,但我仍然无法理解结果之间的巨大差异。
【问题讨论】:
标签: python machine-learning scikit-learn knn gridsearchcv