sort(key = byDist_Key)返回错误:“列表”对象没有属性“ d”

时间:2018-12-10 21:43:48

标签: python python-3.x

试图在Iris Fisher数据集上实现K邻域。怎么了?谢谢。

import matplotlib as mpl
import math
f=open('Iris.txt', 'r')
row_array=f.readlines()

all_points=[]
class point(object):
    def __init__(self, x, y):
        self.x=x
        self.y=y
class pair(object):
    def __init__(self, d, i):
        self.d= d
        self.ind=i
k=4
for i in range(150):
    tmp_rec=[4, 5]
    for a in range(2):
        tmp =row_array[i][0 + 8*a] + row_array[i][1 + 8*a] + row_array[i][2 + 8*a]
        tmp_rec[a]=float(tmp)
    all_points.append(point(tmp_rec[0], tmp_rec[1]))
learn_points=[all_points[i] for i in range(25)]
learn_points.append([all_points[50 + i] for i in range(25)])
learn_points.append([all_points[100 + i] for i in range(25)])
def d(i, j):
    return math.sqrt(pow(all_points[i].x-all_points[j].x,2) + pow(all_points[i].y- all_points[j].y, 2))
def byDist_key(pair):
    return pair.d
def K_neig(i):
    tmp=[pair(d(i,j), j) for j  in range(25)]
    tmp.append([pair(d(i,50 + j), 50 + j) for j  in range(25)])
    tmp.append([pair(d(i,100 + j), 100 + j) for j  in range(25)])
    tmp=sorted(tmp, key = byDist_key)
    return [tmp[L].i for L in range(k)]
def votes(klass, i):
    tmp=K_neig(i)
    s=0
    for j in tmp:
        if (j>=klass * 50 and j <klass * 50  +50):
            s+=1.0 / pow(d(i, j), 2)
    return s
def klass(i):
    m= -1
    ind=-1
    for j in range(3):
        if(votes(j, i)>=max):
            max= votes(j, i)
            ind = j
    return ind

n = 3
m = 3
confusion = [[0] * m for i in range(n)]
for i in range(3):
    t= 50 * i
    for j in range(25):
        confusion[i][klass(t + j)]+=1
confusion
f.close()

但是程序返回:

<ipython-input-88-cbe26db1600f> in byDist_key(pair)
     26     return math.sqrt(pow(all_points[i].x-all_points[j].x,2) + pow(all_points[i].y- all_points[j].y, 2))
     27 def byDist_key(pair):
---> 28     return pair.d
     29 def K_neig(i):
     30     tmp=[pair(d(i,j), j) for j  in range(25)]

AttributeError: 'list' object has no attribute 'd'

0 个答案:

没有答案