提问人:Mostafa Bouzari 提问时间:9/15/2023 最后编辑:Mostafa Bouzari 更新时间:9/15/2023 访问量:58
在 Python 中根据系数和常数计算预测值
calculate the predicted value based on coefficient and constant in python
问:
我有系数和常数(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中检查它时,该值并不相同。
我计算正确吗?
答:
检查此方法是否可以解决您的任务:
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
最好!
评论
y = e^ln(selected_columns['predicted_MCAP'])
正如文档中提到的,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)
上一个:多重测试调整,用于逐步选型
下一个:使用 esttab 时的变异系数
评论
selected_columns.iloc[0:10,:].dot(mean_coefficients.iloc[:,0:20])+mean_coefficients['const']
ValueError: matrices are not aligned
selected_columns.dot(mean_coefficients.iloc[0,0:5])+mean_coefficients.loc[0,'constant']