NearestNeighnor 实现cifar-10图像分类

import numpy as np
class NearestNeighnor(object):
    def __init__(self):
        pass

    def train(self,X,y):
        self.Xtr=X
        self.ytr=y

    def predict(self,X):
        num_test=X.shape[0]
        Ypred=np.zeros(num_test,dtype=self.ytr.dtype)
        for i in xrange(num_test):
           # distances=np.sum(np.abs(self.Xtr-X[i,:]),axis=1)
           distances=np.sqrt(np.sum(np.square(self.Xtr-X[i,:]),axis=1))
           min_index=np.argmin(distances)
           Ypred[i]=self.ytr[min_index]
        return  Ypred


import numpy as np
from NearestNeighnor import NearestNeighnor
def unpickle(file):
    import cPickle
    fo=open(file,'rb')
    dict=cPickle.load(fo)
    fo.close()
    return dict
dataTrain=[]
labelTrain=[]
for i in range(1,6):
    dic=unpickle("data\cifar-10-batches-py\data_batch_"+str(i))
    for item in dic["data"]:
        dataTrain.append(item)
    for item in dic["labels"]:
        labelTrain.append(item)

dataTest=[]
labelTest=[]
dic=unpickle("data\cifar-10-batches-py\\test_batch")
for item in dic["data"]:
    dataTest.append(item)
for item in dic["labels"]:
    labelTest.append(item)

dataTr=np.asarray(dataTrain)
dataTs=np.asarray(dataTest)
labelTr=np.asarray(labelTrain)
labelTs=np.asarray(labelTest)
print dataTr.shape

nn=NearestNeighnor()
nn.train(dataTr,labelTr)
Yte_predict=nn.predict(dataTs)
print 'accuracy:%f'%(np.mean(Yte_predict==labelTs))

这里写图片描述

正确率很低,只有25%左右,NN不适合做图像分类

(1)在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:“cPickle – A faster pickle”。
cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等。而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复。
2. load:载入本地文件,恢复python对象
3. 学习借鉴:pickle 及cpikle
http://blog.csdn.net/yucan1001/article/details/8478755

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值