generated from LufsX/Challenge-kNN
This commit is contained in:
+6
-7
@@ -39,7 +39,7 @@ name = "向兴宇"
|
|||||||
|
|
||||||
|
|
||||||
# 这里写自己的代码实现
|
# 这里写自己的代码实现
|
||||||
def classify0(inX, dataSet, labels, k=8, _cache={"VI": None}):
|
def classify0(inX, dataSet, labels, k=8, _cache={"VI": None, "dataSet": None}):
|
||||||
"""
|
"""
|
||||||
KNN 分类算法。
|
KNN 分类算法。
|
||||||
|
|
||||||
@@ -61,14 +61,13 @@ def classify0(inX, dataSet, labels, k=8, _cache={"VI": None}):
|
|||||||
diff = dataSet - inX
|
diff = dataSet - inX
|
||||||
|
|
||||||
# 使用矩阵运算计算马氏距离
|
# 使用矩阵运算计算马氏距离
|
||||||
# distances = np.einsum("ij,jk,ik->i", diff, _cache["VI"], diff)
|
distances = np.einsum("ij,jk,ik->i", diff, _cache["VI"], diff)
|
||||||
|
|
||||||
|
# 对距离排序,获取前 k 个最近的样本索引
|
||||||
|
sortedDistIndices = np.argpartition(distances, 8)[:8]
|
||||||
|
|
||||||
# 统计前 k 个样本的标签
|
# 统计前 k 个样本的标签
|
||||||
classCount = np.bincount(
|
classCount = np.bincount(labels[sortedDistIndices])
|
||||||
labels[
|
|
||||||
np.argpartition(np.einsum("ij,jk,ik->i", diff, _cache["VI"], diff), 8)[:8]
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
# 返回出现次数最多的标签
|
# 返回出现次数最多的标签
|
||||||
return np.argmax(classCount)
|
return np.argmax(classCount)
|
||||||
|
|||||||
Reference in New Issue
Block a user