Găsiți distanța euclidiană a două matrice de lungimi diferite

voturi
0

Vreau să găsească distanța euclidiană pentru a verifica similaritatea de siruri de caractere.

Baza

De la imaginea de mai sus într - un câmp obiect de pictură există mai multe tipuri de imagini în baza de date. Imaginile se afișează utilizând acest paining_objectdomeniu. Acum , vreau să afișeze imagini legate de o imagine selectate prin compararea siruri de paining_objectcâmp. Deci , am folosit metoda distanței euclidiene pentru a găsi similitudini de siruri de caractere.

Dar eu sunt cu care se confruntă cu problema de lungime. De ex. În primul rând din baza de date există patru tipuri de imagini în paining_objectdomeniu și , în al doilea rând , există mai mult de patru tipuri de imagini. Deci, cum as putea măsura distanța cu această metodă pentru matricele care au lungimi inegale.

Întrebat 24/10/2019 la 11:57
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
0

Putem folosi raportul dintre numărul de meciuri șir la numărul total de combinații ca scorul de similaritate.

// Assuming $firstArr and $secondArr are sets, i.e., don't contain duplicates
function similarityScore($firstArr, $secondArr) {
    $matchCount = 0;
    foreach ($firstArr as $first) {
        foreach($secondArr as $second) {
            if ($first == $second) {
                $matchCount++;
            }
        }
    }
    return $matchCount/(count($firstArr)*count($secondArr));
}
Publicat 24/10/2019 la 15:19
sursa de către utilizator

voturi
0

distanțele non-euclidiene

Distanța dintre două matrice neordonate poate fi reformulat ca distanța între seturi.

Un show de căutare rapidă există mai multe distanțe care reprezintă similitudinea dintre seturi, cum ar fi

  • Jaccard distanța

    d (a, b) = | a b altele | / | O uniune b |

  • metrica diferența maximă

    d (a, b) = 1 - | a b altele | / Max (| A |, | b |)

există mai multe distanțe (de exemplu) pe hârtie distanțele dintre seturi pe platoul de filmare comminality

distanța încă euclidiene

Puteți să-l vigoare în continuare:

Obține toate Mangas tale ca un vocabular V, spun dimensiunea n. Luați în considerare setul R^n.

Un rând de tabel poate fi reprezentat ca un vector vde R^n: dacă rândul conține cuvântul i, a pus v[i] = 1, în v[i]=0caz contrar

În final distanța euclidiană poate fi trivially aplicat pe vectorii de aceeași lungime.

distanța, astfel, să fie ca

d(a,b) = || v_b - v_a ||_2 = sqrt( (v_b[0] - v_a[0])^2 + ... + (v_b[n-1] - v_a[n-1)^2)

Fiecare pătrat este egal cu 1IFF , v_b[i]!=v_a[i]care este doriți să contorizați elementele anu bU b not in aidem diferența simetrică a și b Tu , astfel , pot rescrie distanța:

d(a,b) = sqrt(|a \ b|)
Publicat 25/10/2019 la 11:58
sursa de către utilizator

voturi
1

Am făcut acest lucru folosind Jaccard distanta de mai jos. În primul rând a creat două mese pentru obiect unic de unde putem colecta obiecte de la id-ul și al doilea în cazul în care toate obiect vine împreună de la separate (,)

1) image_sub_main Tabelul

introduceți descrierea imaginii aici

2) image_main Tabelul

introduceți descrierea imaginii aici

3) fișier PHP ca Wordpress Way

global $wpdb;
$post_id = $wpdb->get_results("SELECT * FROM `image_main`");

$i=1;
$finimgarray = array();
$aa = array();
$bb = array();
$firstarray = array('similarity' =>100 , 'id' => $post_id[0]->id );

foreach($post_id as $key => $post){
    if($i < count($post_id)){
    $arraya =$post_id[0]->image_types;
    $a = explode(",",$arraya);
    $arrayb =$post_id[$i]->image_types;
    $b = explode(",",$arrayb);
    $array = array_unique (array_merge ($a, $b));
    $result=array_intersect($a,$b);
    $finalres = count($result) / count($array)*100 ;
    $finimgarray[] = array('similarity' =>round($finalres, 2) , 'id' => $post_id[$i]->id );
 }
    $i++;
}

array_push($finimgarray, $firstarray);
arsort($finimgarray);

foreach($finimgarray as $findimgarr){
  $id = $findimgarr['id'];
  $image = $wpdb->get_row("SELECT * FROM `image_main` WHERE `id` = $id ");
  echo "<img src='$image->image'/>";
}

de ieșire va compara imagini pe prima imagine și o arată în funcție de similaritate%

Publicat 31/12/2019 la 06:39
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more