Trova distanza euclidea di due array di lunghezza diversa

voti
0

Voglio trovare distanza euclidea per verificare similarità delle stringhe.

Database

Da sopra in un campo oggetto pittura ci sono molti tipi di immagine nel database. Immagini è la visualizzazione di utilizzare questo paining_objectcampo. Ora voglio mostrare le immagini correlate di un'immagine selezionata confrontando stringhe da paining_objectcampo. Così ho usato il metodo distanza euclidea di trovare similitudini di stringhe.

Ma sto affrontando problema con la lunghezza. Per es. Nella prima fila verso banca dati ci sono quattro tipi di immagine nel paining_objectcampo e nella seconda fila ci sono più di quattro tipi di immagine. Quindi, come potrei misurare la distanza con questo metodo per le matrici aventi lunghezza diversa.

È pubblicato 24/10/2019 alle 11:57
fonte dall'utente
In altre lingue...                            


3 risposte

voti
0

Possiamo usare il rapporto tra numero di partite di stringa per il numero totale di combinazioni come il punteggio di somiglianza.

// 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));
}
Risposto il 24/10/2019 a 15:19
fonte dall'utente

voti
0

distanze non euclidee

La distanza tra due array non ordinati può essere riformulata come distanza tra le serie.

Un rapido spettacoli di ricerca esistono varie distanze rappresentano la somiglianza tra le serie come

  • la Jaccard distanza

    d (a, b) = | A Inter b | / | A b unione |

  • la metrica differenza massima

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

ci sono più distanze (per esempio) sulla carta distanze tra insiemi di comminality set

distanza euclidea ancora

È ancora possibile forzare:

Ottenere tutti i tuoi manga come un vocabolario V, dicono dimensioni n. Si consideri l'insieme R^n.

Una riga della tabella può essere rappresentato come un vettore vdi R^n: se la riga contiene la parola i, Put v[i] = 1, v[i]=0altrimenti

Infine la distanza euclidea può banalmente essere applicato sui vettori di uguale lunghezza.

distanza pertanto quella

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)

Ogni quadrato è uguale a 1se e solo se v_b[i]!=v_a[i]che è si desidera contare gli elementi in anon in bU b not in aidem la differenza simmetrica di A e B Si può quindi riscrivere la distanza:

d(a,b) = sqrt(|a \ b|)
Risposto il 25/10/2019 a 11:58
fonte dall'utente

voti
1

Ho fatto questo utilizzando Jaccard a distanza come di seguito. In primo luogo ha creato due tavoli per oggetto unico da cui possiamo raccogliere oggetti da id e la seconda in cui tutti gli oggetti viene insieme separato da (,)

1) image_sub_main Tabella

entrare descrizione dell'immagine qui

2) image_main Tabella

entrare descrizione dell'immagine qui

3) file PHP come 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'/>";
}

L'output sarà confrontare le immagini prima immagine e uno a mostrare in base alla somiglianza%

Risposto il 31/12/2019 a 06:39
fonte dall'utente

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