From d0fe2856a8a3f979f953b4bb4285772e1a8e34ef Mon Sep 17 00:00:00 2001 From: wujunjie <297081150@qq.com> Date: Sun, 6 Oct 2024 18:22:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20function.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.py | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/function.py b/function.py index 1908924..696ba1d 100644 --- a/function.py +++ b/function.py @@ -39,7 +39,7 @@ name = "吴俊煯" # 这里写自己的代码实现 -def classify0(inX, dataSet, labels): +def classify0(inX, dataSet, labels,k=4): """ KNN 分类算法。 @@ -51,25 +51,16 @@ def classify0(inX, dataSet, labels): Returns: - int: 预测的分类标签。 """ -# 获取数据集的大小 - dataSetSize =dataSet.shape[0] -# 计算数据集的协方差矩阵的逆 - VI = np.linalg.inv(np.cov(dataSet.T)) -# 计算 Mahalanobis 距离 - distances =np.zeros(dataSetSize) - for i in range(dataSetSize): - distances[i]=mahalanobis(inX,dataSet[i],VI) -# 对距离排序,获取前 k 个最近的样本索引 - sortedDistIndices=distances.argsort() -# 统计前 k 个样本的标签 - classCount ={} - for i in range(9): - voteLabel=labels[sortedDistIndices[i]] - classCount[voteLabel]=classCount.get(voteLabel,0)+1 -# 返回出现次数最多的标签 - sortedClasscount=sorted( - classCount.items(), key=operator.itemgetter(1), reverse = True - ) + k=min(k,dataSet.shape[0]) + diffMat =np.tile(inX,(dataSet.shape[0],1))- dataSet + sqDiffMat =diffMat **2 + distances =np.sqrt(sqDiffMat.sum(axis=1)) + sortedDistIndicies=distances.argsort() + classCount={} + for i in range(k): + voteIlabel=labelssortedDistIndiciesi]] + classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 + sortedClassCount = sorted(classCount,items(), key=lambda item: item[1l. reverse=True) return sortedclassCount[0][0]