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]