更新 function.py
Gitea Actions Experiment Test / Experiment-Actions (push) Successful in 34s

This commit is contained in:
cy
2024-10-15 18:57:16 +08:00
parent 163b557baf
commit 6ddbe34013
+4 -28
View File
@@ -42,11 +42,10 @@ def classify(input_vector, dataSet, labels, k=2):
- int: 预测的分类标签。
"""
dataSet_size = dataSet.shape[0]
# 计算欧氏距离
# 计算曼哈顿距离
diff_mat = np.tile(input_vector, (dataSet_size, 1)) - dataSet
sq_diff_mat = diff_mat ** 2
sq_distances = sq_diff_mat.sum(axis=1)
distances = np.sqrt(sq_distances)
abs_diff_mat = np.abs(diff_mat)
distances = abs_diff_mat.sum(axis=1)
# 对距离进行排序
sorted_indices = distances.argsort()
class_count = {}
@@ -56,27 +55,7 @@ def classify(input_vector, dataSet, labels, k=2):
sorted_class_count = sorted(class_count.items(), key=lambda x: x[1], reverse=True)
return sorted_class_count[0][0]
def cross_validation(dataSet, labels, k_list=(2, 3, 5, 7, 9)):
from sklearn.model_selection import KFold
kf = KFold(n_splits=5)
best_k = None
best_accuracy = 0
for k in k_list:
accuracies = []
for train_index, test_index in kf.split(dataSet):
train_data, test_data = dataSet[train_index], dataSet[test_index]
train_labels, test_labels = np.array(labels)[train_index], np.array(labels)[test_index]
predictions = []
for vector in test_data:
predicted_label = classify(vector.reshape(1, -1), train_data, train_labels, k)
predictions.append(predicted_label)
accuracy = sum([1 for p, t in zip(predictions, test_labels) if p == t]) / len(test_labels)
accuracies.append(accuracy)
avg_accuracy = sum(accuracies) / len(accuracies)
if avg_accuracy > best_accuracy:
best_accuracy = avg_accuracy
best_k = k
return best_k
def img_to_vector(filename):
"""
@@ -122,8 +101,6 @@ def load_dataset(directory):
if __name__ == "__main__":
train_data, train_labels = load_dataset("trainingDigits")
best_k = cross_validation(train_data, train_labels)
print("Best k value:", best_k)
test_data = (
"00000000000000110000000000000000"
@@ -163,7 +140,6 @@ if __name__ == "__main__":
np.array([int(char) for char in test_data]).reshape(1, 1024),
train_data,
train_labels,
best_k
)
print(f"预测的标签: {predicted_label}")