K邻近算法之最邻近算法代码

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章