我有一個資料框示例,如下所示,
Months Price Predicted Loss Actual Loss Diff
1/11/2019 4.00 3.43 4.00 0.57
1/11/2019 10.00 8.58 9.00 0.42
1/11/2019 20.00 17.16 16.00 -1.16
1/12/2019 44.00 37.74 35.00 -2.74
1/12/2019 66.00 56.61 56.00 -0.61
1/12/2019 7.00 6.00 5.00 -1.00
1/12/2019 9.00 7.72 8.00 0.28
...
Total 137.25 133.00
我使用這個方程計算Predicted Price = (0.92*(EXP(-0.07)*Price))作為價格函式的預測損失的方式,即正如你在下面看到的,我高估了損失,所以我想要做的是我想校準上面的方程,以最小化整體差異介于預測損失和實際損失之間。
目前,我在做什么是我手動更改指數比方說(0.92*(EXP(-0.07)*Price)),以(0.92*(EXP(-0.072)*Price))和檢查我是否可以得到接近總體的實際損失。我只想改變指數部分并運行我的回圈,直到我得到一個最佳解決方案,即我的預測損失更接近我的實際損失。目前,我正在使用系數串列撰寫代碼并運行回圈。請讓我知道實作這一目標的最佳方法是什么。
uj5u.com熱心網友回復:
您擁有的是線性回歸模型,因此它具有封閉形式的解決方案,您可以在計量經濟學教科書中閱讀。但是對于最小化實際損失和預測損失之間差異的具體問題,您可以使用 while 回圈迭代地找到它。基本上,我們想要的是迭代地降低 的功率,eps直到損失之間的差異變得非常非常小。下面是一種實作:
actual_loss_sum = df['Actual Loss'].sum()
predicted_loss = df['Predicted Loss']
exponential = -0.07
while predicted_loss.sum() - actual_loss_sum > 0.001:
exponential -= 0.0001
predicted_loss = 0.92 * np.exp(exponential) * df['Price']
df['Predicted Loss'] = predicted_loss
df['Diff'] = df['Actual Loss'] - df['Predicted Loss']
輸出:
Months Price Predicted Loss Actual Loss Diff
0 1/11/2019 4.0 3.324811 4.0 0.675189
1 1/11/2019 10.0 8.312027 9.0 0.687973
2 1/11/2019 20.0 16.624054 16.0 -0.624054
3 1/12/2019 44.0 36.572918 35.0 -1.572918
4 1/12/2019 66.0 54.859377 56.0 1.140623
5 1/12/2019 7.0 5.818419 5.0 -0.818419
6 1/12/2019 9.0 7.480824 8.0 0.519176
在這種情況下,df['Predicted Loss'].sum() = 132.99242959917476損失總和之間的差為0.0075704008252444055。
uj5u.com熱心網友回復:
您正在將損失函式建模為價格的線性函式:Loss = a*Price。系數a涉及某個數字的指數這一事實似乎無關緊要。您可以嘗試找到 的值的一種方法a是使用線性回歸:
import numpy as np
from sklearn.linear_model import LinearRegression
price = np.array([4.00, 10.00, 20.00, 44.00, 66.00, 7.00, 9.00])
loss = np.array([4.00, 9.00, 16.00, 35.00, 56.00, 5.00, 8.00])
reg = LinearRegression(fit_intercept=False).fit(price.reshape(-1, 1), loss)
print(reg.coef_)
這給出:
[0.83150764]
因此,根據您應該使用的線性回歸模型a = 0.83150764。您手動選擇的值是0.92*np.exp(-0.07) = 0.8578023,因此它會給出略高的預測損失。使用來自線性回歸的系數,給定價格的預測損失為
[ 3.32603056 8.31507639 16.63015278 36.58633612 54.87950418 5.82055347
7.48356875]
這些預測的總和是 133.04,非常接近實際的總損失。但是,這些預測使用的資料與用于訓練模型的資料相同,因此這不能很好地衡量其準確性。您需要在其他資料上測驗此模型以查看其性能。
最后,如果您真的想以某個值a的形式表示系數,那么只需計算。為此給.0.92*exp(b)bb = np.log(a/0.92)a = 0.83150764b = -0.101133183
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388178.html
上一篇:只想要新檔案中的前100個條目
