最近、 「Collective Intelligent Programming」を読んでいます。他の機械学習書と比較して、この本には多くのケースがあり、現実に近いものであり、私たちにも非常に適しています。
この本の欠点は、アルゴリズムの式を説明していないのではなく、コードで直接実装するため、アルゴリズムを詳細に理解するのが不便をもたらすので、詳細に説明するためにいくつかの記事を書きたいと思います。以下は最初の記事で、ピアソンの相関係数を説明し、私がよく知っているJava言語を使用しています。
ピアソンの数学的な公式は、ウィキペディアからの次のとおりです。
ここで、Eは数学的な期待であり、COVは共分散を表し、 /sigma_xおよび /sigma_yは標準偏差です。
単純化の後、あなたは取得します:
ピアソンの類似性計算のアルゴリズムは依然として非常に単純であり、実装が難しくありません。変数x、y、積xy、xの正方形、yの正方形の合計のみが必要です。私のコードで使用されているデータテストセットは、本「Collective Intelligenceプログラミング」からのものです。コードは次のとおりです。
パッケージpearlsoncorrelationscore; Import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import java.util.map; import java.util.map.entry;著書「Collective Intelligent Programming」*/Public Class PearsonCorrelationScore {private Map <String、Map <String、Double >> DataSet = null; public PearsonCorrelationscore(){initdataset();}/***データセットの初期化*/private void initaset(){データセット=ダブル< Lisa Rose Dataset Map <String、double>(); rosemap.put( "Lady in the Water"、2.5); Rosemap.put( "Snakes on a飛行機"、3.5); Rosemap.put( "Just My Luck"、3.0); Rosemap.put( "Superman Returns"、3.5); rosemap.put( "you、me and dupree" anリスナー "、3.0); dataset.put(" lisa rose "、rosemap); //初期化Jack Matthews Dataset Map <String、Double> Jackmap = new Hashmap <string、double>(); jackmap.put(" Lady in the Water "、3.0); 5.0); Jackmap.put( "you、me and dupree"、3.5); jack.put( "The Night Riender"、3.0); dataset.put( "Jack Matthews"、jackmap); 3.0); genemap.put( "平面上のヘビ"、3.5); genemap.put( "Just My Luck"、1.5); genemap.put( "Superman Returns"、5.0); genemap.put( "you、me and dupree"、3.5); genemap.put( "the nightリスナー"); Map <string、double >> getDataset(){return dataset;}/*** @param person1* name* @return pearson correlation value*/public double sim_pearson(string person1、string person2){//両方のパーティーがコメントしている映画を見つける(// pearson's algorithm <string <string <spring <> for <spring <) (entry <string、double> p1:dataset.get(person1).entryset()){if(dataset.get(person2).containskey(p1.getkey())){list.add(p1.getKey()) = list.size(); for(string name:list){map <string、double> p1map = dataset.get(person1); map <string、double> p2map = dataset.get(person2); sumx += p1map.get(name += p2map.get(name); sumx += math.pow(p1map.get(name); += math.pow(p2map.get(name)、2); sumxy += p1map.get(name) * p2map.get(name)(name);} double算値= sumxy -sumx * sumy / n; double deminator = math.sqrt((sumx_sq -sumx * sumx / n) *(sumy_sq -sumq -sum * sum // be 0if(denominator == 0){return 0;} return hurerator / denominator;} public static void main(string [] args){pearsoncorrelationscore pearlsoncorrelationscore = new PearsonCorrelationscore(); System.out.Println(PearsonCore.core.sim_pearson( "jack -pearson(" '' '' '' 'lisa)マシューズ "));}}次のように、各テストセットから2次元座標面に設定されたデータを反映します。
上記のプログラムで得られた値は、実際には行の勾配です。その勾配の間隔は[-1,1]の間にあり、その絶対値の大きさは2つの類似性を反映しています。勾配が大きいほど、類似性が大きくなります。類似性が1の場合、直線は対角線です。
要約します
上記は、この記事のピアソンの相関係数に基づいたJavaの類似性のすべての詳細な説明です。私はそれが誰にでも役立つことを願っています。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!