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

This commit is contained in:
cy
2024-10-15 19:54:50 +08:00
parent 5575999f1b
commit c43e1615e8
+9 -8
View File
@@ -1,7 +1,6 @@
import numpy as np import numpy as np
import os import os
from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import StandardScaler
""" """
实验说明: 实验说明:
- 自行编写实现数据加载与 kNN 的手写数字分类算法。 - 自行编写实现数据加载与 kNN 的手写数字分类算法。
@@ -43,11 +42,15 @@ def classify(input_vector, dataSet, labels, k=2):
- int: 预测的分类标签。 - int: 预测的分类标签。
""" """
dataSet_size = dataSet.shape[0] dataSet_size = dataSet.shape[0]
# 计算欧氏距离 # 计算马氏距离
cov_matrix = np.cov(dataSet.T)
inv_cov_matrix = np.linalg.inv(cov_matrix)
diff_mat = np.tile(input_vector, (dataSet_size, 1)) - dataSet diff_mat = np.tile(input_vector, (dataSet_size, 1)) - dataSet
sq_diff_mat = diff_mat ** 2 distances = []
sq_distances = sq_diff_mat.sum(axis=1) for i in range(dataSet_size):
distances = np.sqrt(sq_distances) distance = np.sqrt(np.dot(np.dot(diff_mat[i], inv_cov_matrix), diff_mat[i].T))
distances.append(distance)
distances = np.array(distances)
# 对距离进行排序 # 对距离进行排序
sorted_indices = distances.argsort() sorted_indices = distances.argsort()
class_count = {} class_count = {}
@@ -58,6 +61,7 @@ def classify(input_vector, dataSet, labels, k=2):
return sorted_class_count[0][0] return sorted_class_count[0][0]
def img_to_vector(filename): def img_to_vector(filename):
""" """
将二值图像转换为向量。 将二值图像转换为向量。
@@ -104,7 +108,6 @@ def load_dataset(directory):
if __name__ == "__main__": if __name__ == "__main__":
# 以下代码可用于测试,可自行随意修改
train_data, train_labels = load_dataset("trainingDigits") train_data, train_labels = load_dataset("trainingDigits")
test_data = ( test_data = (
@@ -146,5 +149,3 @@ if __name__ == "__main__":
train_data, train_data,
train_labels, train_labels,
) )
print(f"预测的标签: {predicted_label}")