预测w /余弦相似度

时间:2014-12-12 06:35:02

标签: 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 sim_score(v1,v2):
    score = iris.dot(v1,v2) / (iris.norm(v1)*iris.norm(v2))
    return score

所以这个程序的重点是将一组列表与输入数据进行比较。在列表中,有四个浮点数和一种花。我只是想做的是将每个花朵与用户提供的输入进行比较。这是比较输入文件数据和文件数据的正确方法吗? flower将是文件中的信息

1 个答案:

答案 0 :(得分:0)

正如一位评论者提到的那样,你一定要看看numpy和scipy,这会使很多数学运算 - 特别是那些涉及矩阵和向量的运算 - 变得更加容易。

余弦距离直接available in scipy,可以大大简化您的代码:

from scipy.spatial.distance import cosine
score = cosine(v1, v2)

加载存储在文件中的数据取决于文件格式。存储数据的一种常用方法是在csv文件中,其中每行包含一个条目(在您的情况下是一个花),其值以逗号分隔。如果您有一个名为flowers.csv的文件,您可以将其加载到如下所示的numpy数组中:

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])

然后,如果用户提供输入,我们会调用user_flower,我们可以使用scipy函数flower_data获取它与cosine中每个花之间的余弦距离如上所述:

distances = [cosine(user_flower, f) for f in flower_data]

最相似的花的数量最少。