python可以优化变量以获得最大皮尔逊相关系数吗?

时间:2019-04-26 13:22:41

标签: python-3.x scipy scipy-optimize

如果我的熊猫数据帧包含3列Col1Col2Col3,则我需要获取Col2Col3之间的最大皮尔逊相关系数考虑Col1中的值,其中Col2的修改值由下一个公式获得:

df['Col1']=np.power((df['Col1']),B)
df['Col2']=df['Col2']*df['Col1']

其中B是不断变化的变量,用于获取Col3Col2的新值之间的最大皮尔逊相关系数

有没有一种Python方法可以做到这一点并返回B.是否有一种方法可以使用Python进行此操作并返回B值,我想在其他列重复此过程。

1 个答案:

答案 0 :(得分:1)

这应该有效

import pandas as pd
import numpy as np
from scipy.optimize import minimize

# dataframe with 20 rows
df = pd.DataFrame(data=np.random.randn(20,3), 
                  columns=['Col1', 'Col2', 'Col3'])

# cost function
def cost_fun(B_array, df):
    B = B_array[0]
    new_col1 = np.power((df['Col1']), B)
    new_col2 = np.array(df['Col2']) * new_col1
    col3 = np.array(df['Col3'])
    pearson = np.corrcoef(new_col2, col3)[1,0]
    return -1*pearson # multiply by -1 to get max

# initial value
B_0 = 1.1

# run minimizer
res = minimize(cost_fun, [B_0], args=(df), 
               options={"maxiter": 100,
                        "disp": True})
# results
print(res)