02. k临近模型

import numpy as np


def load_data(filename):
    data, label = [], []
    fr = open(filename, 'r')
    for line in fr.readlines():
        line = line.strip().split(',')
        data.append([int(num) for num in line[1:]])
        label.append(int(line[0]))
    return data, label


def predict(train_data, train_label, test_data, rank):
    y_hat = []
    num = 0
    for x1 in test_data:
        dis = []
        for x2 in train_data:
            dis.append(np.sqrt(np.sum(np.subtract(x1, x2) ** 2)))
        ranks = np.argsort(dis)[:rank]
        count = [0] * 10
        for index in ranks:
            count[train_label[index]] += 1
        y_hat.append(count.index(max(count)))
        num += 1
        print('finish {}/{}.'.format(num, len(test_data)))
    return y_hat



if __name__ == '__main__':
    train_data, train_label = load_data('../data/mnist_train.csv')
    test_data, test_label = load_data('../data/mnist_test.csv')
    test_data, test_label = test_data[:200], test_label[:200]
    y_hat = predict(train_data, train_label, test_data, 10)
    error = 0
    for y1, y2 in zip(test_label, y_hat):
        if y1 != y2:
            error += 1
    print('acc: {}%'.format(100 - error / len(y_hat) * 100))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值