博客
关于我
Python 余弦相似度与皮尔逊相关系数 计算
阅读量:795 次
发布时间: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 C 程序子进程在“for line in iter“处挂起
    查看>>
    Python Celery:自动化测试平台定时任务必备的三方库
    查看>>
    python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令
    查看>>
    Python CONNECT 4 CHECK WIN函数
    查看>>
    python ctypes库中动态链接库加载方式
    查看>>
    python cv2 图像( np array )转 HObject
    查看>>
    python cv2截取不规则区域图片
    查看>>
    python CV2裁剪图片并保存
    查看>>
    python cv2读取rtsp实时码流按时生成连续视频文件
    查看>>
    Python Dataframe Groupby Mean和Std
    查看>>
    python datetime
    查看>>
    python datetime笔记
    查看>>
    python day01
    查看>>
    python day10
    查看>>
    Python Day17 Django 03
    查看>>
    python day21
    查看>>
    python decode和encode
    查看>>
    Python del 语句
    查看>>
    Python Dict 理解创建和更新字典
    查看>>
    Python Discord Bot - python clear_reaction() 清除所有反应而不是特定反应
    查看>>