generated from LufsX/Challenge-kNN
This commit is contained in:
+22
-2
@@ -42,6 +42,8 @@ name = "章程鸿"
|
||||
# 这里写自己的代码实现
|
||||
import numpy as np
|
||||
from collections import Counter
|
||||
from sklearn.model_selection import GridSearchCV
|
||||
from sklearn.neighbors import KNeighborsClassifier
|
||||
|
||||
def classify0(inX, dataSet, labels, k=1):
|
||||
"""
|
||||
@@ -116,10 +118,28 @@ if __name__ == "__main__":
|
||||
# 归一化训练数据,并获取最小值和最大值
|
||||
train_data_normalized, min_vals, max_vals = normalize_min_max(train_data)
|
||||
|
||||
# 定义KNN分类器
|
||||
knn = KNeighborsClassifier()
|
||||
|
||||
# 定义要搜索的k值范围
|
||||
param_grid = {'n_neighbors': list(range(1, 31))}
|
||||
|
||||
# 使用GridSearchCV进行网格搜索
|
||||
grid_search = GridSearchCV(knn, param_grid, cv=10, scoring='accuracy')
|
||||
grid_search.fit(train_data_normalized, train_labels)
|
||||
|
||||
# 获取最佳的k值
|
||||
optimal_k = grid_search.best_params_['n_neighbors']
|
||||
print("Optimal k:", optimal_k)
|
||||
|
||||
# 使用最佳k值进行预测
|
||||
best_knn = KNeighborsClassifier(n_neighbors=optimal_k)
|
||||
best_knn.fit(train_data_normalized, train_labels)
|
||||
|
||||
# 测试数据点也需要用同样的方式归一化
|
||||
test_point = np.array([65915, 3.868359, 0.128078])
|
||||
test_point_normalized = (test_point - min_vals) / (max_vals - min_vals)
|
||||
|
||||
# 使用归一化后的数据进行预测
|
||||
predicted_label = classify0(test_point_normalized, train_data_normalized, train_labels)
|
||||
print("预测的分类标签是:", predicted_label)
|
||||
predicted_label = best_knn.predict([test_point_normalized])
|
||||
print("预测的分类标签是:", predicted_label[0])
|
||||
Reference in New Issue
Block a user