diff --git a/function.py b/function.py index 841ed61..b3b1f56 100644 --- a/function.py +++ b/function.py @@ -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]) \ No newline at end of file