मैं यादृच्छिक मूल्यों के मैट्रिक्स से बाहर दिए गए कॉलम वेक्टर को निकटतम कॉलम वैक्टर खोजने के लिए विज्ञानकिट के निकटतम पड़ोसी कार्यान्वयन का उपयोग करने का प्रयास कर रहा हूं।विज्ञान-सीखने का नजदीक पड़ोसी क्यों उचित कोसाइन समानता दूरी वापस नहीं प्रतीत होता है?
इस कोड को फिर स्तंभ के खिलाफ उन पड़ोसियों की वास्तविक कोज्या समानता जाँच स्तंभ 21 के निकटतम पड़ोसी ढूंढ़ना माना जाता है 21.
from sklearn.neighbors import NearestNeighbors
import sklearn.metrics.pairwise as smp
import numpy as np
test=np.random.randint(0,5,(50,50))
nbrs = NearestNeighbors(n_neighbors=5, algorithm='auto', metric=smp.cosine_similarity).fit(test)
distances, indices = nbrs.kneighbors(test)
x=21
for idx,d in enumerate(indices[x]):
sim2 = smp.cosine_similarity(test[:,x],test[:,d])
print "sklearns cosine similarity would be ", sim2
print 'sklearns reported distance is', distances[x][idx]
print 'sklearns if that distance was cosine, the similarity would be: ' ,1- distances[x][idx]
आउटपुट लगता है कि
sklearns cosine similarity would be [[ 0.66190748]]
sklearns reported distance is 0.616586738214
sklearns if that distance was cosine, the similarity would be: 0.383413261786
तो के उत्पादन kneighbors न तो कोसाइन दूरी या कोसाइन समानता है। क्या देता है?
इसके अलावा, एक तरफ के रूप में, मैंने सोचा कि sklearn के निकटतम पड़ोसियों के कार्यान्वयन लगभग निकटतम पड़ोसियों के दृष्टिकोण नहीं थे, फिर भी मुझे लगता है कि अगर मैं इसे खत्म करता हूं तो परिणामों के मुकाबले यह मेरे डेटासेट में वास्तविक सर्वश्रेष्ठ पड़ोसियों का पता लगाना प्रतीत नहीं होता है मैट्रिक्स और सभी अन्य लोगों के लिए कॉलम 211 की समानताओं की जांच करें। क्या मैं यहां कुछ बुनियादी समझ रहा हूं?
'2 - 2 * कोसाइन समानता 'सामान्यीकृत वैक्टरों की एल 2 दूरी – eickenberg
क्या आप इसे छोटा बनाने के लिए अपना उदाहरण बदल सकते हैं, उदा। (20, 40) के बजाय (500, 500)? मेरे कंप्यूटर पर चलाने में थोड़ी देर लग गई और इस बिंदु को साबित करने के लिए उस बड़े होने की आवश्यकता नहीं है। आकार गैर वर्ग बनाने के नमूने और सुविधाओं अक्ष के बीच असंबद्ध मदद कर सकते हैं। यदि, अन्य सभी चीजें बराबर हैं, तो आप अपने लूप में 'sim2 = smp.cosine_similarity (test [x,:], test [d,:]) लिखते हैं, फिर सभी मान मेल खाते हैं। – eickenberg
मैंने पंक्ति/कॉलम रकम बदल दी है, अब तेजी से चलना चाहिए – pplat