机器学习笔记——皮尔逊相关系数

在学到相关性度量的时候,有一个系数用来度量相似性(距离),这个系数叫做皮尔逊系数,事实上在统计学的时候就已经学过了,仅仅是当时不知道还能用到机器学习中来,这更加让我认为机器学习离不开统计学了。

皮尔逊相关系数——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));
    }
时间: 2024-10-12 11:47:08

机器学习笔记——皮尔逊相关系数的相关文章

[机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用

本文先从几何意义上对奇异值分解SVD进行简单介绍,然后分析了特征值分解与奇异值分解的区别与联系,最后用python实现将SVD应用于推荐系统. 1.SVD详解 SVD(singular value decomposition),翻译成中文就是奇异值分解.SVD的用处有很多,比如:LSA(隐性语义分析).推荐系统.特征压缩(或称数据降维).SVD可以理解为:将一个比较复杂的矩阵用更小更简单的3个子矩阵的相乘来表示,这3个小矩阵描述了大矩阵重要的特性. 1.1奇异值分解的几何意义(因公式输入比较麻烦

皮尔逊相关系数和余弦相似性的关系

有两篇回答,我觉得都是正确的,从不同的方向来看的. 作者:陈小龙链接:https://www.zhihu.com/question/19734616/answer/174098489来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说结论: 皮尔逊相关系数是余弦相似度在维度值缺失情况下的一种改进, 皮尔逊相关系数是余弦相似度在维度值缺失情况下的一种改进, 皮尔逊相关系数是余弦相似度在维度值缺失情况下的一种改进. 楼主如果高中正常毕业, 参加过高考, 那么肯定会这么

《集体智慧编程》学习记录:欧几里得距离&amp;皮尔逊相关系数

1 critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0}, 2 'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'J

机器学习笔记

下载链接:斯坦福机器学习笔记 这一系列笔记整理于2013年11月至2014年7月.所有内容均是个人理解,做笔记的原因是为了以后回顾相应方法时能快速记起,理解错误在所难免,不合适的地方敬请指正. 笔记按照斯坦福机器学习公开课的notes整理,其中online学习部分没有整理,reinforcement learning还没接触,有时间补上. 这份笔记主要记录自己学习过程中理解上的难点,所以对于初学者来说可能不容易理解,更详细和全面的说明可以参照JerryLead等的机器学习博文. 水哥@howde

机器学习笔记(1)

今天按照<机器学习实战>学习 k-邻近算法,输入KNN.classify0([0,0],group,labels,3)的时候总是报如下的错误: Traceback (most recent call last): File "<pyshell#75>", line 1, in <module> KNN.classify0([0,0],group,labels,3) File "KNN.py", line 16, in classi

机器学习笔记——K-means

K-means是一种聚类算法,其要求用户设定聚类个数k作为输入参数,因此,在运行此算法前,需要估计需要的簇的个数. 假设有n个点,需要聚到k个簇中.K-means算法首先从包含k个中心点的初始集合开始,即随机初始化簇的中心.随后,算法进行多次迭代处理并调整中心位置,知道达到最大迭代次数或中性收敛于固定点. k-means聚类实例.选择三个随机点用作聚类中心(左上),map阶段(右上)将每个点赋给离其最近的簇.在reduce阶段(左下),取相互关联的点的均值,作为新的簇的中心位置,得到本轮迭代的最

机器学习笔记 贝叶斯学习(上)

机器学习笔记(一) 今天正式开始机器学习的学习了,为了激励自己学习,也为了分享心得,决定把自己的学习的经验发到网上来让大家一起分享. 贝叶斯学习 先说一个在著名的MLPP上看到的例子,来自于Josh Tenenbaum 的博士论文,名字叫做数字游戏. 用我自己的话叙述就是:为了决定谁洗碗,小明和老婆决定玩一个游戏.小明老婆首先确定一种数的性质C,比如说质数或者尾数为3:然后给出一系列此类数在1至100中的实例D= {x1,...,xN} :最后给出任意一个数x请小明来预测x是否在D中.如果小明猜

机器学习笔记——人工神经网络

人工神经网络(Artificial Neural Networks,ANN)提供了一种普遍而实用的方法从样例中学习值为实数.离散值或向量的函数. 人工神经网络由一系列简单的单元相互密集连接构成,其中每一个单元有一定数量的实值输入(可能是其他单元的输出),并产生单一的实数值输出(可能成为其他单元的输入). 适合神经网络学习的问题: 实例是很多"属性-值"对表示的 目标函数的输出可能是离散值.实数值或者由若干实数或离散属性组成的向量 训练数据可能包含错误 可容忍长时间的训练 可能需要快速求

皮尔逊相关系数(Pearson Collelation coefficient)与余弦相似性的关系

皮尔逊相关系数 维基百科定义:两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商 余弦相似性 皮尔逊相关系数与余弦相似性的关系 皮尔逊相关系数就是减去平均值(中心化)后做余弦相似性