2014-12-12 7 views
-3
@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 

그래서이 프로그램의 요점은 입력 목록과 목록의 목록을 비교하는 것입니다. 목록 내에서 네 개의 부동 소수점 숫자와 한 종류의 꽃이 있습니다. 내가하려는 일은 각 꽃을 사용자가 입력 한 것과 비교하는 것입니다. 이것이 입력 파일 데이터와 파일의 데이터를 비교하는 정확한 방법일까요? 꽃은 파일의 정보가 될 것입니다.코사인 유사성 예측

+3

무엇이 당신의 질문입니까? 꽃이란 무엇입니까? –

+2

질문에 질문이없는 것 같습니다. – NPE

+1

또한이 종류의 코드에서 NumPy를 살펴 보는 것이 좋습니다. – NPE

답변

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 기능 cosine를 사용 flower_data 꽃 위의 설명 : 가장 유사한 꽃이 작은 수있을 것이다

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

.

관련 문제