我有一个学校作业,必须创建一个分类器(kNN)。我尝试这样做,它非常慢。我需要在不使用循环的情况下加快速度,但是我不确定该怎么做。我有训练数据和标签。我也有测试数据。
我已经创建了执行分类的功能。
label=classifier(train, trainlabel, testvector)
其中train是训练数据,它是一个nxm矩阵。 trainlabel是mx1的标签。 testvector是单个样本,为nx1。
我必须预测的完整测试数据是一些nxk矩阵。现在,我正在创建一个循环以提取列并将其传递到我的分类器中。请参见下面的代码。
for i in range(0, numoftestsamples):
testvector=testdata[:,i]
predictions[i]= classifier(train, trainlabel, testvector)
有什么方法可以向量化它,使其在python上运行更快?
答案 0 :(得分:0)
欢迎使用StackOverflow!
如@hpaulj所说,您需要在分类器中进行优化,以使其一次对完整矩阵testdata
进行操作,而不是一次对列(testvector
)进行操作。 。然后,您的for
循环将替换为
predictions = classifier(train,trainlabel,testdata)
您还可以并行化对列向量的操作,并且有多种方法可以做到这一点。停留在香草python中,有一个multiprocessing
模块可以使这一过程变得非常简单。但是,根据计算密集型classifier
的程度,一种方法可能会胜过另一种方法。