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

This commit is contained in:
cy
2024-10-15 18:49:04 +08:00
parent 8b6d56db02
commit 163b557baf
+24 -1
View File
@@ -56,6 +56,27 @@ def classify(input_vector, dataSet, labels, k=2):
sorted_class_count = sorted(class_count.items(), key=lambda x: x[1], reverse=True) sorted_class_count = sorted(class_count.items(), key=lambda x: x[1], reverse=True)
return sorted_class_count[0][0] 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): def img_to_vector(filename):
""" """
@@ -100,8 +121,9 @@ def load_dataset(directory):
if __name__ == "__main__": if __name__ == "__main__":
# 以下代码可用于测试,可自行随意修改
train_data, train_labels = load_dataset("trainingDigits") train_data, train_labels = load_dataset("trainingDigits")
best_k = cross_validation(train_data, train_labels)
print("Best k value:", best_k)
test_data = ( test_data = (
"00000000000000110000000000000000" "00000000000000110000000000000000"
@@ -141,6 +163,7 @@ if __name__ == "__main__":
np.array([int(char) for char in test_data]).reshape(1, 1024), np.array([int(char) for char in test_data]).reshape(1, 1024),
train_data, train_data,
train_labels, train_labels,
best_k
) )
print(f"预测的标签: {predicted_label}") print(f"预测的标签: {predicted_label}")