Trouver la distance euclidienne de deux choix de longueurs différentes

voix
0

Je veux trouver la distance euclidienne pour vérifier la similarité des chaînes.

Image

De l' image ci - dessus dans un champ objet de peinture il y a beaucoup de types d'images dans la base de données. Images affiche en utilisant ce paining_objectchamp. Maintenant , je veux montrer des images connexes d'une image sélectionnée en comparant les chaînes de paining_objectchamp. J'ai donc utilisé la méthode de la distance euclidienne de trouver des similitudes de chaînes.

Mais je suis face à problème avec la longueur. Ex. Dans la première rangée de la base de données , il existe quatre types d'image dans le paining_objectterrain et dans la deuxième rangée , il y a plus de quatre types d'image. Alors, comment pourrais - je mesurer la distance avec cette méthode pour les réseaux ayant une longueur inégale.

Créé 24/10/2019 à 11:57
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
0

Nous pouvons utiliser le rapport du nombre de matches de chaîne au nombre total de combinaisons que le score de similarité.

// 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));
}
Créé 24/10/2019 à 15:19
source utilisateur

voix
0

distances non euclidiennes

La distance entre les deux tableaux désordonnées peut être reformulée comme la distance entre les ensembles.

Une montre de recherche rapide, il existe plusieurs distances représentant la similitude entre les ensembles tels que

  • la Jaccard la distance

    d (a, b) = | a inter b | / | Union b |

  • la métrique de différence maximale

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

il y a plus de distances (par exemple) sur le papier distances entre les ensembles sur le plateau comminality

la distance euclidienne encore

Vous pouvez forcer encore:

Obtenez tous vos mangas comme un vocabulaire V, la taille dire n. Considérons l'ensemble R^n.

Une ligne de votre table peut être représentée comme un vecteur vde R^n: si la ligne contient mot i, mettre v[i] = 1, v[i]=0sinon

Enfin, la distance euclidienne peut trivialement être appliqué sur les vecteurs de même longueur.

la distance est donc comme

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)

Chaque carré est égal à 1IFF v_b[i]!=v_a[i]qui est vous voulez compter les éléments anon bU b not in aidem la différence symétrique de a et b Vous pouvez ainsi réécrire votre distance:

d(a,b) = sqrt(|a \ b|)
Créé 25/10/2019 à 11:58
source utilisateur

voix
1

Je l'ai fait cela en utilisant la distance Jaccard comme ci-dessous. Tout d'abord créé deux tables pour objet unique d'où nous pouvons recueillir des objets d'id et le second où tout objet se réunit séparé de (,)

1) image_sub_main Tableau

entrez la description d'image ici

2) image_main Tableau

entrez la description d'image ici

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

Votre sortie comparera images à première image et montrer selon la similitude%

Créé 31/12/2019 à 06:39
source utilisateur

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