iT邦幫忙

2

使用python寫出knn算法

https://ithelp.ithome.com.tw/upload/images/20191106/20111873BBOEwd0PMe.png

請問各位大大,要怎麼算出各英文單字他們之間的距離,
目前只有查到三維的並使用tf.form()函數,
並沒有2維x,y的範例,

懇請解答,感謝


之後有寫出程式碼(菜),如有更好的寫法,可以在下面留言,謝謝

import math
from collections import OrderedDict

print('各item的top 3 neighbor:')
toDataFrame={}
for y in range(len(vectors)):
    distances = []
    distances_dict = {}
    three_item = []
    ##############使用 Euclidean distance
    for x in range(len(vectors)):
        if x==y:
            continue
        else:
            distance = vectors[y]-vectors[x]
            distances.append(math.sqrt( distance[0]*distance[0] + distance[1]*distance[1] ))

    ##################   

    # key為 index
    distances_dict = dict(zip(range(len(distances)), distances))
    
    #取出前 3 近的
    d_sorted_by_value = OrderedDict(sorted(distances_dict.items(), key=lambda x: x[1]))   
    d_sorted_by_value_three = [i for i in d_sorted_by_value.keys()][:3]
 
    #印出 前三 接近的
    for three in range(3):
        if d_sorted_by_value_three[three] >= y:
            three_item.append(w2v_df.word[d_sorted_by_value_three[three]+1])
        else:
            three_item.append(w2v_df.word[d_sorted_by_value_three[three]])
    toDataFrame[w2v_df.word[y]] = three_item
    
for x, y in toDataFrame.items():
  print(x, y)
player iT邦大師 1 級 ‧ 2019-11-06 15:42:55 檢舉
照維基百科上面的計算公式, 自己寫程式啊
https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm
二維兩點距離不就
sqr( abs((a-b).x)^2 + abs((a-b).y)^2 ) ?
p39212053 iT邦新手 5 級 ‧ 2019-11-07 13:10:47 檢舉
抱歉,因為昨天趕著要30分鐘寫出來,所以問了伸手牌問題,
已在文章內補上自己實做出來的程式碼,感謝

1 個回答

2
Darwin Watterson
iT邦新手 1 級 ‧ 2019-11-06 16:07:01
最佳解答

目前只有查到三維的並使用tf.form()函數,
並沒有2維x,y的範例,

二維 (x, y) 套三維 (x, y, z) 最簡單的方式不就把 z 設成某個常數就能用了 !
/images/emoticon/emoticon19.gif
例如:

bag    -2.091543    0.136671    0
book   -0.757159   -1.415790    0 
crayon -1.894580    6.104396    0
...

你的高中數學老師在背後默默哭泣 ! /images/emoticon/emoticon02.gif

看更多先前的回應...收起先前的回應...
dragonH iT邦大師 1 級 ‧ 2019-11-06 16:24:11 檢舉

不是體育老師嗎

浪費我的課給你們小考XD /images/emoticon/emoticon48.gif

/images/emoticon/emoticon21.gif
天冷了 ! 別再講冷笑話了 !

dragonH iT邦大師 1 級 ‧ 2019-11-06 16:39:29 檢舉

/images/emoticon/emoticon37.gif

阿展展展 iT邦研究生 1 級 ‧ 2019-11-06 19:31:58 檢舉

/images/emoticon/emoticon10.gif

p39212053 iT邦新手 5 級 ‧ 2019-11-07 13:15:42 檢舉

抱歉,因為昨天趕著要30分鐘寫出來,所以問了伸手牌問題,
已在文章內補上自己實做出來的程式碼,感謝各位大神

p.s. 以前連公民課也拿來考試
/images/emoticon/emoticon13.gif

我要發表回答

立即登入回答