# -*- coding: utf-8 -*-
"""
Created on Thu Feb 1 17:24:19 2018
@author: Administrator
"""
import pandas
#输入数组X,数组Y,数组x,k,输出y
def predict(X,Y,x,k):
#定义一个数组D,用来统计每行的距离值。
D=[]*len(X)
#遍历数组X
for i in range(len(X)):
#取出第i行的数据,放到数组T中
T=X[i]
#让数组T与数组x的相同位置上的数相减,减值再平方得到平方值(距离值),得到新的数组s
s=[(T[i]-x[i])*(T[i]-x[i]) for i in range(len(x))]
#s的元素求和后放到D
D.append(sum(s))
#定义一个数组r,长度为112,元素取值(0到111)
r=[]
for i in range(len(X)):
r.append(i)
#定义一个字典a,r作为key,D作为value
a=dict(zip(r,D))
#定义一个字典b,r作为key,Y作为value
b=[x[0] for x in Y]
#按照value的从小到大对a进行排序后得到一个list类型的c
c=sorted(a.items(),key = lambda x:x[1])
n=0
f=[]
for i,v in c:
n=n+1
if n<k+1:
for j in range(len(b)):
if j==i:
f.append(b[j])
#数组num用来统计前4个最小距离所对应的类别值在f中出现的最多次数,并返回该最多次数对应的类别值
print(len(f))
num=[]
for v in set(f):
num.append(f.count(v))
for v in set(f):
if f.count(v)==max(num):
y=v
return y
X=pandas.read_csv('train_X.csv').values
Y=pandas.read_csv('train_y.csv').values
test_X=pandas.read_csv('test_X.csv').values
result=[]
for i in range(len(test_X)):
x=test_X[i]
result.append(predict(X,Y,x,5))
#打印输出诊断结果,与实际的结果比较
#读取38位顾客的实际值
test_y=pandas.read_csv('test_y.csv')
labels=['女娃','男孩','没有怀孕']
i=0
#正确的诊断数
predictOKNum=0
print("编号,诊断值,实际值,")
while i<test_y.shape[0]:
#第i个诊断结果与实际的第i个结果比较,相等表示诊断正确
if result[i]==(test_y.values[i,0]):
predictOKNum=predictOKNum+1
okOrNo="准确"
else:
okOrNo="错误"
print("%s,%s,%s,%s"%(i+1,labels[result[i]],labels[test_y.values[i,0]],okOrNo))
i=i+1
print("诊断正确率:%s"%(predictOKNum/i))
数据集入群后跟我要,群号:228735640