建立图像相似度的引擎

1、处理图像

from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

def display_img(img_no):
    fig, ax = plt.subplots()
    ax.set_xticklabels([])
    ax.set_yticklabels([])
    ax.matshow(digits.images[img_no], cmap=plt.cm.binary)
display_img(0)

2、查找相似的图像

2.1、余弦相似性

from sklearn.metrics.pairwise import cosine_similarity

计算第一个图像和所有其他图像之间的相似性

X= digits.data
co_sim = cosine_similarity(X[0].reshape(1, -1), X)

当输入一维数组事,scikit-learn需要我们重塑数组。

最后,将结果放到一个pandas的DataFrame对象中,并查看结果

cosf = pd.DataFrame(co_sim).T
cosf.columns=['similarity']
cosf.sort_values('similarity', ascending = True)

2.2、卡方核

from sklearn.metrics.pairwise import chi2_kernel
k_sim = chi2_kernel(X[0].reshape(1, -1), X)
kf = pd.DataFrame(k_sim).T
kf.columns = ['similarity']
kf.sort_values('similarity', ascending=False)
从结果可以看出,卡方核和余弦相似度查找的结果不一样,那么我们怎么选择呢?你可以选择使用任何一个并得到相似度的结果——如我们已经看到的那样——余弦相似度已经被证明是自然语言处理工作的首选,二卡方核是处理图像任务的直接选择。

猜你喜欢

转载自blog.csdn.net/xueruixuan/article/details/80915316