Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python能否优化一个变量以获得max Pearson';s相关系数?_Python 3.x_Scipy_Scipy Optimize - Fatal编程技术网

Python 3.x python能否优化一个变量以获得max Pearson';s相关系数?

Python 3.x python能否优化一个变量以获得max Pearson';s相关系数?,python-3.x,scipy,scipy-optimize,Python 3.x,Scipy,Scipy Optimize,如果我的数据框架包含3列Col1&Col2&Col3,我需要通过考虑Col1中的值来获得Col2和Col3之间的最大皮尔逊相关系数,其中Col2的修改值通过下一个公式获得: df['Col1']=np.power((df['Col1']),B) df['Col2']=df['Col2']*df['Col1'] 其中,B是用于获得Col3和Col2 有没有一种Python方法可以这样做并返回B。有没有一种方法可以使用Python执行此操作并返回B值,我想在其他列中重复此过程。这应该可以 impo

如果我的数据框架包含3列
Col1
&
Col2
&
Col3
,我需要通过考虑
Col1
中的值来获得
Col2
Col3
之间的最大皮尔逊相关系数,其中
Col2
的修改值通过下一个公式获得:

df['Col1']=np.power((df['Col1']),B)
df['Col2']=df['Col2']*df['Col1']
其中,B是用于获得
Col3
Col2

有没有一种Python方法可以这样做并返回B。有没有一种方法可以使用Python执行此操作并返回B值,我想在其他列中重复此过程。

这应该可以

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)

B
的界限是什么?不是B值的界限,只是给它一个初始值,
col3
在哪里被修改?(因为您提到了“col2”和“col3”的新值),col3没有修改基于初始值B首先修改的col2。很抱歉造成误解。为什么使用这行返回值
-1*pearson乘以-1得到max
,最好使用abs(np.corrcof(new\u col2,col3)[1,0])?
最小化
尝试获得尽可能低的目标函数值。因为我们的目标是最大化pearson,所以我们尽量减少它的负面影响。我们不想得到绝对值