generated from LufsX/Challenge-kNN
This commit is contained in:
+5
-3
@@ -54,7 +54,8 @@ def classify0(inX, dataSet, labels, k=3):
|
|||||||
- int: 预测的分类标签。
|
- int: 预测的分类标签。
|
||||||
"""
|
"""
|
||||||
# 确保输入样本 inX 是二维数组
|
# 确保输入样本 inX 是二维数组
|
||||||
inX = np.mat(inX)
|
inX = np.atleast_2d(inX)
|
||||||
|
|
||||||
# 计算样本数量和特征数量
|
# 计算样本数量和特征数量
|
||||||
numSamples, numFeatures = dataSet.shape
|
numSamples, numFeatures = dataSet.shape
|
||||||
|
|
||||||
@@ -66,8 +67,9 @@ def classify0(inX, dataSet, labels, k=3):
|
|||||||
covMat += np.eye(numFeatures) * 0.0001
|
covMat += np.eye(numFeatures) * 0.0001
|
||||||
|
|
||||||
# 计算待分类样本与训练集中每个样本的马氏距离
|
# 计算待分类样本与训练集中每个样本的马氏距离
|
||||||
inXMinusMean = inX - meanVals
|
diffMat = dataSet - meanVals
|
||||||
dist = np.sqrt(np.sum(inXMinusMean * np.linalg.inv(covMat) * inXMinusMean.T))
|
invCovMat = np.linalg.inv(covMat)
|
||||||
|
dist = np.sum(np.dot(diffMat, invCovMat) * diffMat, axis=1)
|
||||||
|
|
||||||
# 获取距离最近的k个样本的索引
|
# 获取距离最近的k个样本的索引
|
||||||
sortedDistIndices = np.argsort(dist)
|
sortedDistIndices = np.argsort(dist)
|
||||||
|
|||||||
Reference in New Issue
Block a user