Может ли python оптимизировать переменную, чтобы получить максимальный коэффициент корреляции Пирсона?
Если у меня есть панды датафрейм включает в себя 3 столбца Col1
& Col2
& Col3
и мне нужно, чтобы получить максимальный коэффициент корреляции Пирсона между Col2
а также Col3
Учитывая значения в Col1
где измененные значения для Col2
получается по следующей формуле:
df['Col1']=np.power((df['Col1']),B)
df['Col2']=df['Col2']*df['Col1']
где B - переменная переменная, чтобы получить максимальный коэффициент корреляции Пирсона между Col3
и новые значения Col2
Так есть метод Python, который может сделать это и вернуть B. Есть ли способ сделать эту операцию, используя Python и вернуть значение B, где я хочу повторить этот процесс для других столбцов.
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)