在 Python 中根据系数和常数计算预测值

calculate the predicted value based on coefficient and constant in python

提问人:Mostafa Bouzari 提问时间:9/15/2023 最后编辑:Mostafa Bouzari 更新时间:9/15/2023 访问量:58

问:

我有系数和常数(alpha)。我想像这个例子一样将值相乘和相加。(必须完成 300000 行)

预测 = 常量 + (valOfRow1 * col1) + (-valOfRow1 * col2) + (-valOfRow1 * col3) + (valOfRow1 * col4) + (valOfRow1 * col5)

预测 = 222 + (555-07 * col1) + (-555-07 * col2) + (-66* col3) + (55* col4) + (777* col5)

我有一个单行数据帧,其中包含这样的系数和常数

col1 col2 col3 col4 (英语) col5 不断
编号:2.447697E-07 -5.214072E-07 -0.000003 0.000006 555 222

以及另一个名称完全相同但具有每月值的数据帧。

col1 col2 col3 col4 (英语) col5
16711 17961 0 20 55

我已经尝试对列进行排序,然后取它们的乘积.df.dot

selected_columns = selected_columns.sort_index(axis=1)
#mean_coefficients dataframe 21th (starting from 0) is constant so i use the other columns
selected_columns['predicted_Mcap']=selected_columns.dot(mean_coefficients.iloc[:,0:20])+mean_coefficients['const'] 

我之所以使用,是因为我不想在乘法中得出结论,只需要在最后添加它。mean_coefficients.iloc[:,0:20]const

所以我计算了预测值,但是当我在Excel中检查它时,该值并不相同。

我计算正确吗?

Python pandas 回归 预测 系数

评论

0赞 Ben.T 9/15/2023
操作有效,但值错误或出现错误?
0赞 Mostafa Bouzari 9/15/2023
@ben.t 当我只尝试 10 行时,我得到selected_columns.iloc[0:10,:].dot(mean_coefficients.iloc[:,0:20])+mean_coefficients['const'] ValueError: matrices are not aligned
0赞 Ben.T 9/15/2023
好的,那就试试这个selected_columns.dot(mean_coefficients.iloc[0,0:5])+mean_coefficients.loc[0,'constant']

答:

0赞 Rodrigo Lucchesi 9/15/2023 #1

检查此方法是否可以解决您的任务:

import pandas as pd

# Load the coefficients and variables data frames
df_coefficients = pd.read_clipboard()
df_variables = pd.read_clipboard()


def predict(df_coefficients: pd.DataFrame, df_variables: pd.DataFrame) -> pd.Series:
    """
    Predicts the value of the dependent variable based on the values of the independent variables.
    :param df_coefficients: DataFrame with the coefficients of the independent variables.
    :param df_variables: DataFrame with the values of the independent variables.
    :return: Series with the predicted values of the dependent variable.
    """
    result = []
    # Convert the constants to a pandas Series and remove them from the coefficients DataFrame
    constants = df_coefficients.iloc[:]['constant']
    df_coefficients.drop(['constant'], inplace=True, axis=1)

    # Iterate over the rows of the coefficients DataFrame and calculate the prediction
    for idx, val in constants.items():
        prediction: float = val + (df_coefficients.iloc[idx][:] * df_variables.iloc[idx][:]).sum()
        print(f'prediction {idx}: {prediction}')
        result.append(prediction)
    return pd.DataFrame({'prediction': result})


result = predict(
    df_coefficients=df_coefficients, 
    df_variables=df_variables
)
result

预测:30746.99484535174

最好!

评论

0赞 Mostafa Bouzari 9/15/2023
这是错误的值,该值不应超过 14 或 15。这些值以 ln(列)为基础,在 oreder 中获取值,您必须应用以下公式: 如果我取你的值并使用它,它将返回重复的数字,这是代码的难点部分。y = e^ln(selected_columns['predicted_MCAP'])
0赞 Mostafa Bouzari 9/15/2023 #2

正如文档中提到的,DataFrame 的列名和其他的索引必须包含相同的值,因为它们将在乘法之前对齐。否则你会得到df.dot()

ValueError:矩阵未对齐

所以你有 2 个选项:

将 WITH OR 转置 DataFrame 一起使用。您的列名将作为索引,并准备以矩阵方式相乘。请记住,两个数据帧中的列名称必须相同。即使多一列也会返回错误。df.dot().T

selected_columns['predicted_MCAP']=selected_columns.dot(mean_coefficients.iloc[:,1:21].T) + mean_coefficients['const']

为了解决这个问题,我通过使用numpy数组

result = df1.dot(df2.values)