2015-09-08 47 views
1

我正在制作一个图像分类器,它将在Python中分辨图像是否是汽车。我想通过距离蟒蛇质心的距离对数据进行分类

这里是我的步骤:

  1. 获得约200张图像SIFT描述与他们的汽车。
  2. 在所有这些SIFT描述符上使用k-means算法并找到约50个质心。
  3. 使用这些质心和新图像生成SVM的列车数据 。

我想只找到一次k-均值质心,然后将它们保存在文件中以供重用。

我的问题是:

我有50个预先计算好的质心。我用SIFT描述符创建了新图像。我想为每个描述符找到最接近的质心。

例如:质心1最接近5个描述符,质心2最接近12个描述符,依此类推。然后我会将这些数据提供给SVM。

这就像kmeans.predict(),但我不想每次添加新图像时计算k-means。

那么python中有什么函数可以给超空间中的50个点(质心),N个是否在同一个超空间中,并且它会根据最接近的质心返回那些N个点的分布?

感谢

+0

当您使用predict()时,仅当使用fit()时,scikit-learn的KMeans算法找不到新的质心,那么您是否需要一种方法来保存kmeans模型? – Rob

+0

是的,如果我可以保存kmeans模型,然后加载它没有计算这将解决我的问题。你能告诉我该怎么做吗? – lasha

回答

0

看一看关于模型持久的scikit学习文档中的文章:http://scikit-learn.org/stable/modules/model_persistence.html

使用泡菜保存模型:

import pickle 
with open('kmeans.dat', 'w') as f: 
    pickle.dump(kmeans, f) 

以后可以通过重新加载使用:

with open('kmeans.dat', 'r') as f: 
    kmeans = pickle.load(f) 

请注意,你c一个仅由同一个python版本存储的负载模型。

相关问题