Python w/余弦相似性预测 @staticmethod def dot(v1,花朵): dot_prod=0 i=0 正如一位评论者所提到的,我想你肯定应该看看numpy和scipy,它们使许多数学运算——特别是涉及矩阵和向量的运算——变得更加容易
余弦距离是直接的,这将大大简化您的代码:Python w/余弦相似性预测 @staticmethod def dot(v1,花朵): dot_prod=0 i=0 正如一位评论者所提到的,我想你肯定应该看看numpy和scipy,它们使许多数学运算——特别是涉及矩阵和向量的运算——变得更加容易,python,Python,余弦距离是直接的,这将大大简化您的代码: @staticmethod def dot(v1,flower): dot_prod = 0 i = 0 while i<4: dot_prod+=float(v1[i])*float(flower[i]) i+=1 return dot_prod @staticmethod def norm(vec): return math.sqrt(iris.dot(vec,vec))
@staticmethod
def dot(v1,flower):
dot_prod = 0
i = 0
while i<4:
dot_prod+=float(v1[i])*float(flower[i])
i+=1
return dot_prod
@staticmethod
def norm(vec):
return math.sqrt(iris.dot(vec,vec))
@staticmethod
def sim_score(v1,v2):
score = iris.dot(v1,v2) / (iris.norm(v1)*iris.norm(v2))
return score
加载存储在文件中的数据取决于文件格式。存储数据的一种常见方式是在csv文件中,其中每行包含一个条目(在您的示例中是一朵花),其值用逗号分隔。如果您有一个名为flowers.csv
的文件,您可以将其加载到一个numpy数组中,如下所示:
from scipy.spatial.distance import cosine
score = cosine(v1, v2)
然后,如果用户提供了一个我们称之为user\u flower
的输入,我们可以使用scipy函数cosine
获得它与flower\u数据中每个花之间的余弦距离,如上所述:
import csv
import numpy as np
# open the csv file to read the data
with open('flowers.csv') as flower_file:
# create a reader that will read the file line by line
# and split each line at the commas while reading
flower_reader = csv.reader(flower_file)
# map list of string values in each line to floats,
# and package the whole thing in a numpy array
flower_data = np.array([map(float, line) for line in flower_reader])
最相似的花的数目最少。你的问题是什么?什么是flower?你的问题中似乎没有问题。另外,对于这类代码,我强烈建议你看看NumPy。我正在尝试将文件中的数据与用户输入进行比较,并找到具有最高余弦相似性分数的虹膜
distances = [cosine(user_flower, f) for f in flower_data]