更新 function.py
Gitea Actions Test / Exp-Actions (push) Successful in 8s

This commit is contained in:
2024-09-26 16:55:19 +08:00
parent 8cb08d6204
commit 8793a9b39c
+14 -12
View File
@@ -38,7 +38,7 @@ name = "潘宇豪"
# 这里写自己的代码实现 # 这里写自己的代码实现
def classify0(inX, dataSet, labels, k=5): def classify0(inX, dataSet, labels, k=3):
""" """
KNN 分类算法。 KNN 分类算法。
@@ -51,24 +51,26 @@ def classify0(inX, dataSet, labels, k=5):
返回值: 返回值:
- int: 预测的分类标签。 - int: 预测的分类标签。
""" """
# 计算输入样本与训练数据集中每个样本的欧氏距离 # 计算协方差矩阵及其逆
diffMat = np.tile(inX, (dataSet.shape[0], 1)) - dataSet covariance_matrix = np.cov(dataSet, rowvar=False)
sqDiffMat = diffMat**2 inv_covmat = inv(covariance_matrix)
sqDistances = sqDiffMat.sum(axis=1)
distances = np.sqrt(sqDistances) # 计算马氏距离
distances = np.array([mahalanobis(inX, dataSet[i], inv_covmat) for i in range(dataSet.shape[0])])
# 对距离进行排序并找到最近的k个邻居 # 对距离进行排序并找到最近的k个邻居
sortedDistIndices = distances.argsort() sortedDistIndices = distances.argsort()[:k]
# 进行简单投票
classCount = {} classCount = {}
for i in sortedDistIndices:
for i in range(k): voteIlabel = labels[i]
voteIlabel = labels[sortedDistIndices[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
# 返回出现次数最多的类别 # 返回出现次数最多的类别
sortedClassCount = sorted(classCount.items(), key=lambda item: item[1], reverse=True) sortedClassCount = sorted(classCount.items(), key=lambda item: item[1], reverse=True)
return sortedClassCount[0][0] return sortedClassCount[0][0]
def load_data(file_path): def load_data(file_path):
""" """
加载TSV格式的数据文件。 加载TSV格式的数据文件。