更新 function.py
Gitea Actions Experiment Test / Experiment-Actions (push) Has been cancelled

This commit is contained in:
2024-10-20 14:05:01 +08:00
parent abb056671c
commit 870aa2fc2d
+10 -4
View File
@@ -45,15 +45,21 @@ import numpy as np
import os
from collections import Counter
def classify(input_vector, dataSet, labels, k=1):
def classify(input_vector, dataSet, labels, k=3):
"""使用 KNN 算法对输入样本进行分类。"""
distances = np.sum((input_vector - dataSet) ** 2, axis=1)
# 计算协方差矩阵和其逆矩阵
cov_matrix = np.cov(dataSet, rowvar=False)
inv_cov_matrix = np.linalg.inv(cov_matrix + 1e-5 * np.eye(cov_matrix.shape[0])) # 添加小常数以防止奇异矩阵
# 计算马氏距离
diffs = input_vector - dataSet
distances = np.sqrt(np.einsum('ij,jk->i', diffs, np.dot(inv_cov_matrix, diffs.T)))
sorted_indices = distances.argsort()
k_nearest_distances = distances[sorted_indices[:k]]
k_nearest_labels = labels[sorted_indices[:k]]
# 计算权重(距离的倒数),避免除以零
weights = 1 / (k_nearest_distances + 1e-5)
weights = 1 / (distances[sorted_indices[:k]] + 1e-5)
# 归一化权重
weights /= weights.sum()