generated from LufsX/Experiment-kNN
This commit is contained in:
+9
-5
@@ -55,15 +55,19 @@ def classify(input_vector, dataSet, labels, k=2):
|
||||
- input_vector (numpy array): 输入待分类的样本(1xN)。
|
||||
- dataSet (numpy array): 训练数据集(MxN)。
|
||||
- labels (list or numpy array): 训练集对应的标签。
|
||||
- k (int): kNN 算法参数,默认值为 3。
|
||||
- k (int): kNN 算法参数,默认值为 2。
|
||||
|
||||
返回:
|
||||
- int: 预测的分类标签。
|
||||
"""
|
||||
# 计算输入向量与训练集之间的欧氏距离
|
||||
distances = np.sum((input_vector - dataSet) ** 2, axis=1)
|
||||
sorted_indices = distances.argsort()
|
||||
k_nearest_distances = distances[sorted_indices[:k]]
|
||||
# 将欧氏距离改为马氏距离
|
||||
mean_vector = np.mean(dataSet, axis=0)
|
||||
cov_matrix = np.cov(dataSet.T)
|
||||
inv_cov_matrix = np.linalg.inv(cov_matrix)
|
||||
diff_vector = input_vector - dataSet
|
||||
mahalanobis_distances = np.sqrt(np.einsum('ij,jk,ik->i', diff_vector, inv_cov_matrix, diff_vector.T))
|
||||
sorted_indices = mahalanobis_distances.argsort()
|
||||
k_nearest_distances = mahalanobis_distances[sorted_indices[:k]]
|
||||
k_nearest_labels = labels[sorted_indices[:k]]
|
||||
|
||||
# 计算权重(距离的倒数)
|
||||
|
||||
Reference in New Issue
Block a user