python:二次相关

时间:2018-03-08 17:51:56

标签: python numpy scipy

我的问题如下。假设我有这两个数组:

import numpy as np
x1 = np.array([1,2,3,4,5,6,5,5,4,3,2,1])
y1 = np.array([1,2,3,4,5,6,7,8,9,10,11,12])

有没有办法计算某种"四角相关系数" (二次回归:y = A + Bx + Cx2)它们之间?这样的事情就完成了:http://keisan.casio.com/exec/system/14059932254941

此外,如果可能的话,是否也可以计算与其他多项式/指数函数的相关系数?

祝你好运!

1 个答案:

答案 0 :(得分:3)

所以你有一些数据(我要更改值,因为你重复了不同Y的X值):

import numpy as np
x1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
y1 = np.array([1, 3, 4, 6, 7, 4, 6, 5, 2])

您可以使用np.polyfit找到不同的多项式拟合:

fit1 = np.polyfit(x1, y1, 1)  # linear
fit2 = np.polyfit(x1, y1, 2)  # quadratic
fit3 = np.polyfit(x1, y1, 3)  # cubic

您可以通过使用np.polyval评估结果多项式来检查每个项的好坏程度:

v1 = np.polyval(fit1, x1)
v2 = np.polyval(fit2, x1)
v3 = np.polyval(fit3, x1)

这些看起来像这样:

Polynomial fits

您可以用数字方式检查每种方法的合适程度,例如计算mean squared error

mse1 = np.mean(np.square(y1 - v1))  # 3.240
mse2 = np.mean(np.square(y1 - v2))  # 0.734
mse3 = np.mean(np.square(y1 - v3))  # 0.727

现在,除此之外,您还可以查看相关性。实际上有几种correlation coefficients。 NumPy在Pearson correlation coefficient中实现np.corrcoef

np.corrcoef(x1, y1)
# [[ 1.        ,  0.27578314],
#  [ 0.27578314,  1.        ]]

该系数测量线性相关性,因此不适用于非线性关系。然而,非线性相关通常是一个更复杂的主题(和still under research)。您可以查看其他一些相关系数或调查其他技术,但请注意,这只会告诉您是否存在某些相关性,它不会告诉您是否能够构建模型利用相关性。