generated from LufsX/Experiment-kNN
This commit is contained in:
+7
-14
@@ -28,7 +28,7 @@ id = "202210423117"
|
||||
name = "程悦"
|
||||
|
||||
|
||||
def classify(input_vector, dataSet, labels, k=2):
|
||||
def classify(input_vector, dataSet, labels, k=3):
|
||||
"""
|
||||
KNN 分类算法。
|
||||
|
||||
@@ -42,15 +42,11 @@ def classify(input_vector, dataSet, labels, k=2):
|
||||
- int: 预测的分类标签。
|
||||
"""
|
||||
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
|
||||
distances = []
|
||||
for i in range(dataSet_size):
|
||||
distance = np.sqrt(np.dot(np.dot(diff_mat[i], inv_cov_matrix), diff_mat[i].T))
|
||||
distances.append(distance)
|
||||
distances = np.array(distances)
|
||||
sq_diff_mat = diff_mat ** 2
|
||||
sq_distances = sq_diff_mat.sum(axis=1)
|
||||
distances = np.sqrt(sq_distances)
|
||||
# 对距离进行排序
|
||||
sorted_indices = distances.argsort()
|
||||
class_count = {}
|
||||
@@ -61,7 +57,6 @@ def classify(input_vector, dataSet, labels, k=2):
|
||||
return sorted_class_count[0][0]
|
||||
|
||||
|
||||
|
||||
def img_to_vector(filename):
|
||||
"""
|
||||
将二值图像转换为向量。
|
||||
@@ -101,13 +96,11 @@ def load_dataset(directory):
|
||||
label = int(file.split('_')[0])
|
||||
labels.append(label)
|
||||
data_set.append(img_to_vector(os.path.join(root, file)))
|
||||
data_set = np.array(data_set).reshape(len(data_set), -1)
|
||||
scaler = StandardScaler()
|
||||
data_set = scaler.fit_transform(data_set)
|
||||
return data_set, np.array(labels)
|
||||
return np.array(data_set).reshape(len(data_set), -1), np.array(labels)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 以下代码可用于测试,可自行随意修改
|
||||
train_data, train_labels = load_dataset("trainingDigits")
|
||||
|
||||
test_data = (
|
||||
|
||||
Reference in New Issue
Block a user