generated from LufsX/Experiment-kNN
This commit is contained in:
+9
-8
@@ -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}")
|
|
||||||
Reference in New Issue
Block a user