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)
从结果可以看出,卡方核和余弦相似度查找的结果不一样,那么我们怎么选择呢?你可以选择使用任何一个并得到相似度的结果——如我们已经看到的那样——余弦相似度已经被证明是自然语言处理工作的首选,二卡方核是处理图像任务的直接选择。