【问题标题】:Find correlation between 17k+ vectors with two features each and print the pairs with correlation > .70查找 17k+ 个向量之间的相关性,每个向量具有两个特征,并打印相关性 > .70 的对
【发布时间】:2022-11-20 07:58:12
【问题描述】:

我有 17k+ 行数据,我把每一行都变成了一个向量。

数据的前 5 行看起来像这样...... 5 rows of the data

第一列是 17k+ 不同的电影标题,另外两列是我创建的特征向量“AveRating”和“CountRating”

我想比较每部电影并列出相关性 > .70 的电影

这是我将每一行转换为向量后数据的样子——每一行都是不同的电影。

Vectors

现在我需要确定每对电影之间的相关性是否 > .7

我不确定如何进行

# Merge the datasets by Title so I'll have 3 columns Title, AveRating and CountRating
Hw_2 = pd.read_csv('/Volumes/USDA HD/Final Semester Fall 2022/CYBI 6378/archive/HW3_2.csv', encoding='latin-1')
Hw_3 = pd.read_csv('/Volumes/USDA HD/Final Semester Fall 2022/CYBI 6378/archive/HW3_3.csv', encoding='latin-1')
MergedDF = pd.merge(Hw_2, Hw_3)
print(MergedDF.head(5))

# Vectorize each row leaving out column 1 "Title" by converting the dataset into an array
Hw3_array = MergedDF[["AveRating", "CountRating"]].to_numpy()
print(Hw3_array)

# THAN FIND THE CORRELATION AMONG ALL THE PAIRS OF VECTORS AND PRINT ALL CORRELATIONS > .70


【问题讨论】:

  • 嘿,正如你所说,关联是在特征之间完成的,而不是在数据(电影)之间完成的。如果您正在构建推荐模型,我认为您最好使用距离。计算所有电影之间的距离,将它们按降序排序并选择前 N 部电影。
  • 你想要的可能是最大互相关,你可以使用 correlate 函数。如果您只关心最大互相关,请查看 lag=0。当然,也许可以通过某种方式对其进行归一化,通过除以两个向量的自相关或两个向量的简单范数来减少。

标签: python arrays dataframe matrix correlation


【解决方案1】:

向量之间 0.7 的相关性与两个向量之间夹角的余弦为 0.7 相同。也就是说,您正在寻找角度小于 45.5° 的矢量。因为您使用的是二维向量,所以这很简单。

  1. 通过对所有对(math.atan(v1,v2),其中v1v2是向量分量)使用倒切线将所有向量对转换为角度
  2. 将角度放在新列中
  3. 按此列排序
  4. 使用宽度为math.cos(.7) (=.795) 的滑动窗口来获取所有相关度超过 .7 的电影。

    因此,您不必计算成对相关性,只需按相似性对它们进行排序即可。

    (编辑:您可能必须在执行此操作之前对您的分数进行归一化,因为您的变量的比例彼此之间存在很大差异。如果您使用原始值,您的相关性将全部接近 1.0)

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2011-07-31
    • 2023-01-14
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多