0

Ich habe viele Beispiele für die Berechnung der euklidischen Distanz für KNN, aber nicht für die Stimmungseinstufung gesehen.Berechnung der euklidischen Entfernung für KNN

Zum Beispiel habe ich einen Satz „ein sehr enges Spiel“

Wie berechnet ich den euklidischen Abstand für den Satz „Ein großartiges Spiel“?

+0

Es ist unklar, was Sie für Sätze von ‚euklidischen Abstand‘ bedeuten. Um irgendeine Art von Entfernung zu erhalten, müssen Sie eine Codierung korrigieren - zum Beispiel könnten Sie Vektoren von Zählungen, ihre binäre Version oder tfidf-Vektoren verwenden. –

+0

Angenommen, Sie haben Trainingsdaten von [link] (https://i.stack.imgur.com/PrqAF.png) und Sie müssen mit KNN den Satz "Ein sehr dichtes Spiel" klassifizieren ... so etwas – xx4xx4

+0

Diese Daten haben Satzzeichenfolgen. Es gibt viele Möglichkeiten, sie zu vektorisieren, wie ich bereits erwähnt habe. –

Antwort

1

Denken Sie über einen Satz als über einen Punkt im mehrdimensionalen Raum, erst nachdem Sie das Koordinatensystem definiert haben, können Sie die euklidische Entfernung berechnen. Zum Beispiel. Ein Satzlänge (Länge)

  • O2 - - Eine Wörter Nummer (WordsCount)
  • O2 - Sie können

    1. O1 einführen Alphabetisch Zentrum (ich davon nur gedacht). Es kann als arithmetisches Mittel des alphabetischen Zentrums jeder Arbeit in einem Satz berechnet werden.

      CharsIndex = Sum(Char.indexInWord)/CharsCountInWord; CharsCode = Sum(Char.charCode)/CharsCount; AlphWordCoordinate = [CharsIndex, CharsCode]; WordsIndex = Sum(Words.CharsIndex)/WordsCount; WordsCode = Sum(Words.CharsCode)/WordsCount; AlphaSentenceCoordinate = (WordsIndex ^2+WordsCode^2+WordIndexInSentence^2)^1/2;

    der euklidische Abstand kann also berechnet werden nicht, wie folgend:

    EuclidianSentenceDistance = (WordsCount^2 + Length^2 + AlphaSentenceCoordinate^2)^1/2 
    

    Nein kann jeder Satz Punkt im dreidimensionalen Raum, wie P [Länge umgewandelt werden , Wörter, AlphaCoordinate]. Mit einer Entfernung können Sie Sätze vergleichen und klassifizieren.

    Es ist nicht ideal Ansatz denke ich, aber ich wollte Ihnen eine Idee zeigen.

    import math 
    
    def calc_word_alpha_center(word): 
        chars_index = 0; 
        chars_codes = 0; 
        for index, char in enumerate(word): 
         chars_index += index 
         chars_codes += ord(char) 
        chars_count = len(word) 
        index = chars_index/len(word) 
        code = chars_codes/len(word) 
        return (index, code) 
    
    
    def calc_alpha_distance(words): 
        word_chars_index = 0; 
        word_code = 0; 
        word_index = 0; 
        for index, word in enumerate(words): 
         point = calc_word_alpha_center(word) 
         word_chars_index += point[0] 
         word_code += point[1] 
         word_index += index 
        chars_index = word_chars_index/len(words) 
        code = word_code/len(words) 
        index = word_index/len(words) 
        return math.sqrt(math.pow(chars_index, 2) + math.pow(code, 2) + math.pow(index, 2)) 
    
    def calc_sentence_euclidean_distance(sentence): 
        length = len(sentence) 
    
        words = sentence.split(" ") 
        words_count = len(words) 
    
        alpha_distance = calc_alpha_distance(words) 
    
        return math.sqrt(math.pow(length, 2) + math.pow(words_count, 2) + math.pow(alpha_distance, 2)) 
    
    
    sentence1 = "a great game" 
    sentence2 = "A great game" 
    
    distance1 = calc_sentence_euclidean_distance(sentence1) 
    distance2 = calc_sentence_euclidean_distance(sentence2) 
    
    print(sentence1) 
    print(str(distance1)) 
    
    print(sentence2) 
    print(str(distance2)) 
    

    Konsolenausgabe

    a great game 
    101.764433866 
    A great game 
    91.8477000256 
    
  • +0

    ich bin verwirrt ... können Sie versuchen, eine Berechnung mit dem Beispiel, das ich habe, zu setzen? zum Beispiel wie dieser Link: https://stackoverflow.com/questions/17053459/how-to-transforme-a-text-to-vector – xx4xx4

    +0

    Ich habe Beispielcode hinzugefügt. Sie können damit spielen und versuchen, eine gute Funktionsqualität zu erreichen. Weil, wie Sie sehen, diese Funktion für kleine Änderungen wie Char-Register schnell empfindlich ist. – slesh

    +0

    mir den Code gelesen habe, aber ich denke, seine andere von dem, was ich zu tun werde versuchen ... nehmen an, dass: Training Satz: "A Great Game" unbeschriftet Satz: "A Very Close Game" I möchte den euklidischen Abstand zwischen den beiden Sätzen berechnen. von dem, was ich gelesen habe, soll ich jeden Satz in binäre konvertieren, genau wie der Link in meinem vorherigen Kommentar ... – xx4xx4

    Verwandte Themen