Python 3.x python能否优化一个变量以获得max Pearson';s相关系数?
如果我的数据框架包含3列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
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,所以我们尽量减少它的负面影响。我们不想得到绝对值