亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

給定 N 個元素的列表,如何確定按比例遞減的權重?

給定 N 個元素的列表,如何確定按比例遞減的權重?

胡說叔叔 2022-05-24 09:23:27
我有一個由 N 個元素組成的列表。就上下文而言,我正在進行時間序列預測,并且 - 一旦做出預測 - 希望對開始時所做的預測進行加權,使其比后來的預測更重要。這很有用,因為當我計算性能錯誤分數 ( MAPE ) 時,該分數將代表每個項目的預測,以及基于我想要識別好模型和壞模型的方式。我應該如何更新我現有的函數以獲取任何元素列表 (N) 以生成這些穩步下降的權重?這是我自己提出的功能。它適用于類似的例子compute_equal_perc(5),但不適用于其他組合......def compute_equal_perc(rng):    perc_allocation = []    equal_perc = 1 / rng    half_rng = rng / 2    step_val = equal_perc / (rng - 1)    print(step_val)    for x in [v for v in range(0, rng)]:        if x == int(half_rng):            perc_allocation.append(equal_perc)        elif x < int(half_rng):            diff_plus = ((abs(int(half_rng) - x) * step_val)) + equal_perc            perc_allocation.append(round(float(diff_plus), 3))        elif x >= int(half_rng):            diff_minus = equal_perc - ((abs(int(half_rng) - x) * step_val))            perc_allocation.append(round(float(diff_minus), 3))    return perc_allocation對于compute_equal_perc(5),我得到的輸出是:[0.3, 0.25, 0.2, 0.15, 0.1]此sum序列的 應始終等于 1,并且值之間的增量應始終相等。
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

這可以通過應用基本代數來解決。算術序列定義為

A[i] = a + b*i, for i = 0, 1, 2, 3, ... where a is the initial term

元素序列 0 到 n 的總和是

S = (A[0] + A[n]) * (n+1) / 2

換句話說,第一個和列表項的總和乘以一半的項數。

既然你知道Sn,你只需要再決定一個“傳播”因子來生成你的序列。平均元素必須是1/n- 這是您的算法錯誤的地方,因為它會為偶數的n.


您的代碼在這組語句中失敗:

half_rng = rng / 2
step_val = equal_perc / (rng - 1)
# comparing x to int(half_rng)

如果rng是偶數,則將平均值分配給 position rng/2,從而為您提供諸如 4 個元素的列表:

[0.417, 0.333, 0.25, 0.167]

這意味著您有兩個大于所需平均值的元素,只有一個小于所需的平均值,這迫使總和超過 1.0。相反,當你有偶數個元素時,你必須讓均值成為一個“幻影”中間元素,并在它周圍采取半步。讓我們用分數來看看:你已經有了

[5/12, 4/12, 3/12, 2/12]

您的差異是 1/12 ... 1 / (n * (n-1))...您需要將這些值降低半步。相反,您選擇的散布 (1/12) 的解決方案將開始半步:從每個元素中減去 1/24。

[9/24, 7/24, 5/24, 3/24]

你也可以用一個簡單的線性因子來改變你的步數。用簡單的整數決定你想要的元素的比率,例如5:4:3:2,然后從 5+4+3+2 的明顯總和生成你的權重:

[5/14, 4/14, 3/14, 2/14]

請注意,這適用于任何整數的算術序列,這是選擇“傳播”的另一種方式。如果你使用4:3:2:1你會得到

[4/10, 3/10, 2/10, 1/10]

或者您可以將它們更緊密地聚集在一起,例如,13:12:11:10

[13/46, 12/46, 11/46, 10/46]

所以......選擇你想要的傳播并簡化你的代碼以利用它。


查看完整回答
反對 回復 2022-05-24
  • 1 回答
  • 0 關注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號