weixin_40884083 2019-09-05 10:40 采纳率: 78.6%
浏览 285
已采纳

机器学习k近邻算法算出结果不对

输入代码

from numpy import *
import operator

def createDataSet():
    group = array([[ 1.0, 1.1],[ 1.0, 1.0],[0,0],[0, 0.1]])
    labels = ['A','A','B','B']
    return group, labels

def classify0(inX,dataSet,labels,k):
    dataSetSize = dataSet.shape[0]
    #❶(以下三行)距离计算
    diffMat = tile(inX,(dataSetSize,1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances=sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDistIndicies=distances.argsort()
    classCount={}
    #❷(以下两行)选择距离最小的k个点
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
        #❸排序
        sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse=True)
        return sortedClassCount[0][0]

def file2matrix(filename):
    fr = open(filename)
    arrayOlines= fr.readlines()
    numberOfLines = len(arrayOlines) #❶ 得到文件行数
    returnMat = zeros((numberOfLines,3)) #❷ 创建返回的Numpy 矩阵 classLabelVector = []
    classLabelVector = []
    index = 0
    #❸ (以下三行)解析文件数据到列表
    for line in arrayOlines:
        line = line.strip()
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine[0:3]
        classLabelVector.append(int(listFromLine[-1]))
        index += 1
    return returnMat,classLabelVector

错误执行结果

>>> datingDataMat
array([[4.092000e+04, 8.326976e+00, 9.539520e-01],
       [0.000000e+00, 0.000000e+00, 0.000000e+00],
       [0.000000e+00, 0.000000e+00, 0.000000e+00],
       ...,
       [0.000000e+00, 0.000000e+00, 0.000000e+00],
       [0.000000e+00, 0.000000e+00, 0.000000e+00],
       [0.000000e+00, 0.000000e+00, 0.000000e+00]])
>>> datingLabels[0:20]
[3]

正确的应该是

>>> datingDataMat 
array([[ 7. 29170000e+ 04, 7. 10627300e+ 00, 2. 23600000e- 01], 
[ 1. 42830000e+ 04, 2. 44186700e+ 00, 1. 90838000e- 01], 
[ 7. 34750000e+ 04, 8. 31018900e+ 00, 8. 52795000e- 01], 
..., 
[ 1. 24290000e+ 04, 4. 43233100e+ 00, 9. 24649000e- 01], 
[ 2. 52880000e+ 04, 1. 31899030e+ 01, 1. 05013800e+ 00], 
[ 4. 91800000e+ 03, 3. 01112400e+ 00, 1. 90663000e- 01]]) 
>>> datingLabels[ 0: 20] 
[3, 2, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3]

请大佬看下哪里出错了

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-09-06 08:02
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化