博客
关于我
Python 余弦相似度与皮尔逊相关系数 计算
阅读量:797 次
发布时间:2023-03-06

本文共 1415 字,大约阅读时间需要 4 分钟。

夹角余弦与皮尔逊相关系数

夹角余弦(Cosine)是一种衡量向量方向相似性的方法,其核心思想是两个向量之间的夹角越小,余弦值越接近1,向量越相似。夹角余弦的取值范围为[-1,1],其中-1表示两个向量方向完全相反,0表示垂直,1表示方向完全一致。

在二维空间中,向量A(x1,y1)与向量B(x2,y2)的夹角余弦可以通过以下公式计算:

$$\cos\theta = \frac{x_1x_2 + y_1y_2}{\sqrt{x_1^2 + y_1^2} \cdot \sqrt{x_2^2 + y_2^2}}$$

对于高维空间中的两个n维样本点a(x₁,x₂,…,xₙ)和b(x₁',x₂',…,xₙ'),夹角余弦可以通过类似的公式计算,衡量它们之间的相似程度。夹角余弦只与向量的方向相关,与向量的幅值无关。

在实际应用中,计算夹角余弦可以通过以下两种方法实现:

  • 基于公式的实现:
  • import numpy as npx = np.random.random(10)y = np.random.random(10)d1 = np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
    1. 利用SciPy库:
    2. from scipy.spatial.distance import pdistX = np.vstack([x, y])d2 = 1 - pdist(X, 'cosine')

      需要注意的是,当两个向量完全相同时,夹角余弦值为1,计算结果d=1。


      皮尔逊相关系数(Pearson correlation)是一种更为鲁棒的相关度量方法,它能够克服夹角余弦易受向量平移和尺度影响的问题。皮尔逊相关系数的计算方法如下:

      首先,将向量x和y分别减去它们的均值,得到标准化后的向量x'和y':

      $$x' = x - \bar{x}, \quad y' = y - \bar{y}$$

      然后,计算它们的相关系数:

      $$r = \frac{\text{Cov}(x', y')}{\sigma_x \cdot \sigma_y}$$

      其中,Cov(x', y')是标准化向量的协方差,σ_x和σ_y分别是标准化向量的标准差。

      皮尔逊相关系数具有以下优点:

    3. 平移不变性:标准化向量后,相关系数不受向量的位置影响。2.尺度不变性:相关系数不受向量的尺度影响。
    4. 在Python中,皮尔逊相关系数可以通过以下代码实现:

      import numpy as npx = np.random.random(10)y = np.random.random(10)x_mean = np.mean(x)y_mean = np.mean(y)x_centered = x - x_meany_centered = y - y_meancov = np.cov(x_centered, y_centered)std_x = np.std(x_centered)std_y = np.std(y_centered)r = cov / (std_x * std_y)

      或者利用numpy库:

      X = np.vstack([x, y])r = np.corrcoef(X)[0, 1]

      皮尔逊相关系数的取值范围为[-1,1],绝对值越大,相关性越强。当相关系数为1时,表示完全正线性相关;为-1时,表示完全负线性相关。

    转载地址:http://jdofk.baihongyu.com/

    你可能感兴趣的文章
    python glob的安装和使用
    查看>>
    Python google drive API 下载,文件在哪里?
    查看>>
    Python GPS 模块:读取最新的 GPS 数据
    查看>>
    python grpc入门
    查看>>
    python gRPC测试helloworld
    查看>>
    python list,str的拼接与转换
    查看>>
    python matplotlib简单使用
    查看>>
    python os.system
    查看>>
    Python os.system执行多条语句,os.system的返回值以及与os.popen的区别
    查看>>
    Python os和sys模块
    查看>>
    python os文件/目录
    查看>>
    Python Package 之 Faker(随机姓名、电话)
    查看>>
    python pandas TimeStamps到夏令时的本地时间字符串
    查看>>
    Python Pandas 用顶行替换标题
    查看>>
    Python Pandas-从DataFrame按类别绘制多个条形图
    查看>>
    Python PyQt5 将不再显示此消息复选框添加到 QMessageBox
    查看>>
    Python PyQt5:如何使用 PyQt5 显示错误消息
    查看>>
    Python pytest 面试题!
    查看>>
    Python pytz 时区函数返回一个相差 9 分钟的时区
    查看>>
    python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
    查看>>