generated from LufsX/Challenge-kNN
This commit is contained in:
+5
-8
@@ -52,19 +52,16 @@ def classify0(inX, dataSet, labels, k=8, _cache={"VI": None, "dataSet": None}):
|
||||
Returns:
|
||||
- int: 预测的分类标签。
|
||||
"""
|
||||
# 检查数据集是否发生变化
|
||||
if _cache["dataSet"] is None or not np.array_equal(dataSet, _cache["dataSet"]):
|
||||
# 计算并缓存数据集的协方差矩阵的逆
|
||||
# 管它三七二十一,直接用缓存
|
||||
if _cache["VI"] is None:
|
||||
# 缓存数据集的协方差矩阵的逆
|
||||
_cache["VI"] = np.linalg.inv(np.cov(dataSet.T))
|
||||
_cache["dataSet"] = dataSet
|
||||
|
||||
VI = _cache["VI"]
|
||||
|
||||
# 计算 inX 与数据集的差值
|
||||
diff = dataSet - inX
|
||||
|
||||
# 使用矩阵运算计算马氏距离
|
||||
distances = np.sum(diff @ VI * diff, axis=1)
|
||||
distances = np.sum(diff @ _cache["VI"] * diff, axis=1)
|
||||
|
||||
# 对距离排序,获取前 k 个最近的样本索引
|
||||
sortedDistIndices = np.argsort(distances)
|
||||
@@ -113,4 +110,4 @@ if __name__ == "__main__":
|
||||
# print(f"KNN 分类算法,k={j+1}")
|
||||
print(f"{correct}% 正确率")
|
||||
end_time = time.time()
|
||||
print(f"运行时间:{end_time - start_time} s")
|
||||
print(f"运行时间:{(end_time - start_time)*1000}ms")
|
||||
|
||||
Reference in New Issue
Block a user