Vektoriaus erdvės modelis: kosino panašumas su euklidiniu atstumu

Turiu įslaptintą tekstą. Iš jų aš sukuriu vektorius. Kiekvienas vektorius atitinka vieną dokumentą. Vektoriniai komponentai yra šio dokumento žodžių svoriai, apskaičiuoti kaip TFIDF vertės. Tada aš sukursiu modelį, kuriame kiekvienai klasei atstovauja vienas vektorius. Modelis turi tiek vektorių, kiek yra pastatų klasių. Modelio komponentinis vektorius apskaičiuojamas kaip visų komponentų, paimtų iš šios klasės vektorių, vidurkis. Neklasifikuotiems vektoriams, aš apibrėžiu panašumą su modelio vektoriumi, apskaičiuojant kosiną tarp šių vektorių.

Klausimai:

1) Ar galima naudoti euklidinį atstumą tarp neklasifikuoto ir modelio vektoriaus, kad būtų galima apskaičiuoti jų panašumą?

2) Kodėl euklido atstumas negali būti naudojamas kaip panašumo matas, o ne tarp dviejų vektorių kampo ir atvirkščiai?

Ačiū!

24
16 окт. spalio 16 d. 2013-10-16 20:48 '13, 20:48, 2013-10-16 20:48
@ 3 atsakymai

Vienas neoficialus, bet intuityvus būdas galvoti apie tai yra dviejų vektoriaus komponentų: krypties ir dydžio.

Kryptis yra vektoriaus „pirmenybė“ / „stilius“ / „jausmas“ / „paslėptas kintamasis“, o dydis yra toks stiprus, kaip ir šia kryptimi.

Klasifikuojant dokumentus norime juos klasifikuoti pagal jų bendrus nustatymus, todėl naudojame kampinį atstumą.

Euklido atstumas yra jautrus tai, kad dokumentai yra suskirstyti pagal jų L2 normą (vertę dvimatėje byloje), o ne kryptimi. Tai reiškia, kad vektoriai su visiškai skirtingomis kryptimis bus sugrupuoti, nes jų atstumai nuo šaltinio yra panašūs.

23
27 янв. atsakymą pateikė kizzx2 27 jan. 2014-01-27 15:57 '14, 15:57 2014-01-27 15:57

Atsakysiu į klausimus atvirkštine tvarka. Antrasis klausimas - kosino panašumas ir Euklido atstumas yra du skirtingi vektoriaus panašumo matavimo būdai. Pirmieji matuoja vektorių panašumą, palyginti su koordinačių kilme, o pastarieji matuoja atstumą tarp konkrečių interesų taškų išilgai vektoriaus. Galite naudoti arba izoliuoti, sujungti juos ir naudoti abu, arba pažvelgti į vieną iš daugelio kitų būdų, kaip nustatyti panašumus. Daugiau informacijos rasite „Michael Collins“ paskaitoje.

Jūsų pirmasis klausimas nėra labai aiškus, tačiau turėtumėte sugebėti naudoti bet kokią priemonę, kad surastumėte atstumą tarp dviejų vektorių, neatsižvelgiant į tai, ar lyginate dokumentus ar „modelius“ (kurie tradiciškai apibūdinami kaip klasteriai, kur modelis yra visų grupių suma) .

17
03 янв. Atsakymas duotas Tyson 03 jan. 2014-01-03 21:16 '14, 21:16, 2014-01-03 21:16

Numatomas laikas ( python ):

 import time import numpy as np for i in range(10): start = time.time() for i in range(10000): a, b = np.random.rand(100), np.random.rand(100) np.dot(a, b) / ( np.linalg.norm(a) * np.linalg.norm(b)) print 'Cosine similarity took', time.time() - start start = time.time() for i in range(10000): a, b = np.random.rand(100), np.random.rand(100) 2 * (1 - np.dot(a, b) / ( np.linalg.norm(a) * np.linalg.norm(b))) print 'Euclidean from 2*(1 - cosine_similarity) took', time.time() - start start = time.time() for i in range(10000): a, b = np.random.rand(100), np.random.rand(100) np.linalg.norm(ab) print 'Euclidean Distance using np.linalg.norm() took', time.time() - start start = time.time() for i in range(10000): a, b = np.random.rand(100), np.random.rand(100) np.sqrt(np.sum((ab)**2)) print 'Euclidean Distance using np.sqrt(np.sum((ab)**2)) took', time.time() - start print '--------------------------------------------------------' 

[exit]:

 Cosine similarity took 0.15826010704 Euclidean from 2*(1 - cosine_similarity) took 0.179041862488 Euclidean Distance using np.linalg.norm() took 0.10684299469 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.113723039627 -------------------------------------------------------- Cosine similarity took 0.161732912064 Euclidean from 2*(1 - cosine_similarity) took 0.178358793259 Euclidean Distance using np.linalg.norm() took 0.107393980026 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.111194849014 -------------------------------------------------------- Cosine similarity took 0.16274189949 Euclidean from 2*(1 - cosine_similarity) took 0.178978919983 Euclidean Distance using np.linalg.norm() took 0.106336116791 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.111373186111 -------------------------------------------------------- Cosine similarity took 0.161939144135 Euclidean from 2*(1 - cosine_similarity) took 0.177414178848 Euclidean Distance using np.linalg.norm() took 0.106301784515 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.11181807518 -------------------------------------------------------- Cosine similarity took 0.162333965302 Euclidean from 2*(1 - cosine_similarity) took 0.177582979202 Euclidean Distance using np.linalg.norm() took 0.105742931366 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.111120939255 -------------------------------------------------------- Cosine similarity took 0.16153883934 Euclidean from 2*(1 - cosine_similarity) took 0.176836967468 Euclidean Distance using np.linalg.norm() took 0.106392860413 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.110891103745 -------------------------------------------------------- Cosine similarity took 0.16018986702 Euclidean from 2*(1 - cosine_similarity) took 0.177738189697 Euclidean Distance using np.linalg.norm() took 0.105060100555 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.110497951508 -------------------------------------------------------- Cosine similarity took 0.159607887268 Euclidean from 2*(1 - cosine_similarity) took 0.178565979004 Euclidean Distance using np.linalg.norm() took 0.106383085251 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.11084485054 -------------------------------------------------------- Cosine similarity took 0.161075115204 Euclidean from 2*(1 - cosine_similarity) took 0.177822828293 Euclidean Distance using np.linalg.norm() took 0.106630086899 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.110257148743 -------------------------------------------------------- Cosine similarity took 0.161051988602 Euclidean from 2*(1 - cosine_similarity) took 0.181928873062 Euclidean Distance using np.linalg.norm() took 0.106360197067 Euclidean Distance using np.sqrt(np.sum((ab)**2)) took 0.111301898956 -------------------------------------------------------- 
5
05 апр. Atsakyti alvas 05 Bal 2016-04-05 12:49 '16 at 12:49 2016-04-05 12:49

Žr. Kitus klausimus, susijusius su žymėmis, arba Užduoti klausimą