generated from LufsX/Experiment-kNN
This commit is contained in:
+8
-2
@@ -59,15 +59,21 @@ def classify(input_vector, dataSet, labels, k=2):
|
|||||||
Returns:
|
Returns:
|
||||||
- int: 预测的分类标签。
|
- int: 预测的分类标签。
|
||||||
"""
|
"""
|
||||||
|
if dataSet.ndim > 2:
|
||||||
|
dataSet = dataSet.reshape(dataSet.shape[0], -1)
|
||||||
|
|
||||||
mean = np.mean(dataSet, axis=0)
|
mean = np.mean(dataSet, axis=0)
|
||||||
covmat = np.cov(dataSet, rowvar=0)
|
covmat = np.cov(dataSet, rowvar=0)
|
||||||
inv_covmat = np.linalg.inv(covmat)
|
inv_covmat = np.linalg.inv(covmat)
|
||||||
|
|
||||||
|
# 马氏距离计算
|
||||||
dists = [mahalanobis_distance(input_vector, mean, inv_covmat)]
|
dists = [mahalanobis_distance(input_vector, mean, inv_covmat)]
|
||||||
|
|
||||||
for data in dataSet:
|
for data in dataSet:
|
||||||
dists.append(mahalanobis_distance(data, mean, inv_covmat))
|
dists.append(mahalanobis_distance(data, mean, inv_covmat))
|
||||||
|
|
||||||
|
# 移除第一个距离,因为它是输入向量的马氏距离
|
||||||
|
dists.pop(0)
|
||||||
|
|
||||||
k_indices = np.argsort(dists)[:k]
|
k_indices = np.argsort(dists)[:k]
|
||||||
k_nearest_labels = [labels[i] for i in k_indices]
|
k_nearest_labels = [labels[i] for i in k_indices]
|
||||||
|
|
||||||
@@ -79,7 +85,7 @@ def classify(input_vector, dataSet, labels, k=2):
|
|||||||
if most_common:
|
if most_common:
|
||||||
return most_common[0][0]
|
return most_common[0][0]
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
# 这里也写自己的代码实现
|
# 这里也写自己的代码实现
|
||||||
|
|||||||
Reference in New Issue
Block a user