建立图像相似度的引擎

本文介绍如何使用余弦相似性和卡方核两种方法来计算图像间的相似度,并通过实例展示了这两种方法的不同结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值