generated from LufsX/Challenge-kNN
This commit is contained in:
+13
-3
@@ -61,10 +61,20 @@ def classify0(inX, dataSet, labels, k=3):
|
||||
covMat = np.cov(dataSet, rowvar=False)
|
||||
meanVec = np.mean(dataSet, axis=0)
|
||||
|
||||
# 计算待分类样本与训练集中每个样本的马氏距离
|
||||
# 计算协方差矩阵的逆
|
||||
invCovMat = np.linalg.inv(covMat)
|
||||
diffVecs = dataSet - meanVec
|
||||
dist = np.sqrt(np.sum((inX - meanVec).dot(invCovMat) * (inX - meanVec), axis=1))
|
||||
|
||||
# 初始化距离数组
|
||||
dist = []
|
||||
|
||||
# 计算待分类样本与训练集中每个样本的马氏距离
|
||||
for i in range(dataSet.shape[0]):
|
||||
diffVec = dataSet[i, :] - inX
|
||||
# 避免除以零的情况
|
||||
if np.linalg.det(covMat) == 0:
|
||||
dist.append(np.linalg.norm(diffVec))
|
||||
else:
|
||||
dist.append(np.sqrt(diffVec.dot(invCovMat).dot(diffVec.T)))
|
||||
|
||||
# 获取距离最近的 k 个样本的索引
|
||||
kNearestIndices = np.argsort(dist)[:k]
|
||||
|
||||
Reference in New Issue
Block a user