機器學習筆記——皮爾遜相關係數

來源:互聯網
上載者:User

標籤:

在學到相關性度量的時候,有一個係數用來度量相似性(距離),這個係數叫做皮爾遜係數,事實上在統計學的時候就已經學過了,僅僅是當時不知道還能用到機器學習中來,這更加讓我認為機器學習離不開統計學了。

皮爾遜相關係數——Pearson correlation coefficient,用於度量兩個變數之間的相關性,其值介於-1與1之間,值越大則說明相關性越強。

兩個變數之間的皮爾遜相關係數定義為兩個變數之間的共變數和標準差的商:

因為μX = E(X), σX2 = E[(X ? E(X))2] = E(X2) ? E2(X),Y也類似, 而且

故相關係數也能夠表示成

對於樣本皮爾遜相關係數:

當中E是數學期望,cov表示共變數。

(公式摘自:http://zh.wikipedia.org/wiki/%E7%9A%AE%E5%B0%94%E9%80%8A%E7%A7%AF%E7%9F%A9%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0)

比方,依據上面的公式計算兩個使用者的Pearson 相關性:

/**
 * 皮爾遜Pearson Correlation 
 * 對使用者X,Y sum^2X:X的全部評分項之平方和sum^2Y:Y的全部評分項之平方和
 * sumXY:sumX 、sumY的交集之和,即X、Y都評價了的項之和 
 * 相關性:sumXY / sqrt(sumX^2 * sumY^2)
 * 兩個變數之間的皮爾遜相關係數定義為兩個變數之間的共變數和標準差的商: 
 * p(X,Y) = (xi - avg(x))(yi - avg(y)) / sqrt((xi - avg(x))^2) * sqrt((yi - avg(y))^2) 
 *皮爾遜距離度量的是兩個變數X和Y之間的距離:
 * d(X,Y) =1 -p(X,Y)/(n -1) * sum((Xi - avg(X))/p(X) * (Yi-avg(Y)))/p(Y)
 * 
 * 
 */

public double userSimilarity(int userid1, int userid2) throws MyException {//        if(userid1 == userid2)//            throw new MyException("同一使用者不能比較類似度。");        List<Rating> list1 = null;        List<Rating> list2 = null;        double avgX = 0.0;        double avgY = 0.0;        try {            list1 = st.getRatings(userid1);            list2 = st.getRatings(userid2);            avgX = st.getAvgRatings(userid1);            avgY = st.getAvgRatings(userid2);        } catch (SQLException e) {            e.printStackTrace();        }        double sumXY = 0, sumX = 0, sumY = 0;        for (int i = 0; i < list1.size(); i++) {            double rating1 = list1.get(i).getRating();            sumX += (rating1 - avgX) * (rating1 - avgX);        }        for (int j = 0; j < list2.size(); j++) {            double rating2 = list2.get(j).getRating();            sumY += (rating2 - avgY) * (rating2 - avgY);        }        for (int i = 0; i < list1.size(); i++) {            double rating1 = list1.get(i).getRating();            for (int j = 0; j < list2.size(); j++) {                double rating2 = list2.get(j).getRating();                if (list1.get(i).getItemid() == list2.get(j).getItemid()) {                    sumXY += (rating1 - avgX) * (rating2 - avgY);                }            }        }        return sumXY / (Math.sqrt(sumX * sumY));    }

機器學習筆記——皮爾遜相關係數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.