import pandas as pd
import numpy as np
#使用pandas 读取data
train = pd.read_csv("iris-data-training.csv",encoding = "GBK")
test = pd.read_csv("iris-data-testing.csv", encoding = "GBK")
#将读取的DataFrame格式转换成np.array
train_array = train.values
test_array = test.values
#存储训练样本的最大值
train_array_max = []
train_array_min = []
#分别记录训练样本的数量及特征量数目+1
n = train_array.shape[0]
m = train_array.shape[1]
#测试样本的数目
test_n = test_array.shape[0]
#提取训练样本和测试样本的特征量和真实结果
train_x = train_array[ :, :m-1].reshape(n,m-1)
train_y = train_array[ :, m-1].reshape(n,)
test_x = test_array[ :, :m-1].reshape(test_n,m-1)
test_y = test_array[ :, m-1].reshape(test_n,)
#将特征量归一化
for i in range(m-1):
train_array_max.append(np.max(train_x[:,i]))
train_array_min.append(np.min(train_x[:,i]))
train_x[:,i] = (train_x[:, i] - train_array_min[i]) / (train_array_max[i] - train_array_min[i])
test_x[:, i] = (test_x[:, i] - train_array_min[i]) / (train_array_max[i] - train_array_min[i])
#利用最邻近算法进行预测训练数据结果
result = []
for x1 in test_x:
distance = []
for x2 in train_x:
distance.append(np.sum((x1 - x2) * (x1 - x2)))
result.append(train_y[distance.index(min(distance))])
print(result)
print(test_y.tolist())
result = np.array(result)
#获得识别率
recognition_rate = np.sum((result-test_y) == 0)/len(test_y)
print(recognition_rate)