こうですか?わかりません><
double kernel(Map<String, Double> x1, Map<String, Double> x2){ double n = 0; List<String> strs = new ArrayList<String>(); for(Map.Entry<String, Double> ent : x1.entrySet()){ if(!x2.containsKey(ent.getKey())) continue; strs.add(ent.getKey()); } for(String s1 : strs){ for(String s2 : strs){ n += x1.get(s1) * x2.get(s2); } } return n; }
前のエントリで、しましまさんに教えてもらったので、2次の多項式カーネルでやってみようと思ったんだけど、これでいいんだろか?
共通する2文字について、文書1と文書2での頻度をすべての組み合わせで掛け合わせたものを足してみました。
でやってみたけど、やっぱり「おは」には反応しまくりでした。
ということで、せっかくしましまさんに文字列カーネルの参考文献教えてもらったので、次はまじめに文字列カーネルを作ってみます。