私はKNNのユークリッド距離を計算する例をたくさん見てきましたが、KNNの評価では分類できませんでした。例えばKNNのユークリッド距離を計算する
私は「非常に近いゲームを」文を持っている
どのように私は、文のために、「素晴らしいゲームを」ユークリッド距離を計算するのですか?
私はKNNのユークリッド距離を計算する例をたくさん見てきましたが、KNNの評価では分類できませんでした。例えばKNNのユークリッド距離を計算する
私は「非常に近いゲームを」文を持っている
どのように私は、文のために、「素晴らしいゲームを」ユークリッド距離を計算するのですか?
ユークリッド距離を計算することができる座標系を定義した後でなければ、多次元空間の一点について文章を考えてみてください。例えば。あなたは
O2 - アルファベット順の中心を(私はそれを考えました)。それは、文中の各作業のアルファベットの中心の算術平均として計算することができる。したがって
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;
、ユークリッド距離は、次のように無計算することができない。
EuclidianSentenceDistance = (WordsCount^2 + Length^2 + AlphaSentenceCoordinate^2)^1/2
なしすべての文は、P [長さのように、三次元空間内の点に変換することができます、言葉、アルファコーディネート]。距離を持つことで、文章を比較して分類することができます。
これは理想的なアプローチではありませんが、私はあなたにアイデアを示したかったのです。
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))
コンソール出力
a great game
101.764433866
A great game
91.8477000256
私は混乱しています...あなたは私が持っている例を使用して計算を入れようとすることができますか? このリンクの例:https://stackoverflow.com/questions/17053459/how-to-transform-a-text-to-vector – xx4xx4
コードのサンプルを追加しました。あなたはそれで遊んで、良い品質の機能を達成しようとすることができます。今のところ、あなたが見るように、関数はcharレジスタのようなマイナーな変更に素早く敏感です。 – slesh
があるとし...私は、コードを読んだが、私は何をしようとしているから、その異なると思う:私は「非常に近いゲーム」 : トレーニング文:「グレートゲーム」 ラベルなし文を2つの文の間のユークリッド距離を計算したい。私の前のコメントのリンクのように、各文をバイナリに変換するはずです... – xx4xx4
それはあなたの文章のための「ユークリッド距離」によって何を意味するかは不明です。任意の距離を取得するには、いくつかのエンコーディングを修正する必要があります。たとえば、カウントのベクトル、バイナリバージョン、またはtfidfベクトルを使用できます。 –
トレーニングデータが[link](https://i.stack.imgur.com/PrqAF.png)で、KNNを使って「非常に近いゲーム」という文を分類する必要があるとします – xx4xx4
このデータは文章です。前に述べたように、それらをベクトル化するには多くの方法があります。 –