カレンダーが空いていたので,以前から思っていたポエミーなことを書いてみようと思います.
提案
提案:総和の記号の要素の範囲を書くときは集合で書こう
例えば、 $A=\{a_1, a_2, ..., a_n\}$ の総和を書くとき......
連番で表記
$$\sum_{i=1}^n a_i$$
集合で表記
$$\sum_{a\in A} a$$
理由① リーダブルなプログラムの観点から
Qiita ということで,まずはプログラム的な観点から理由を述べます.
(集合ではなくなってしまいますが) values = [32, 18, ..., 49]
という配列があるとき,
for (const i=1; i<n; i++) {
sum += values[i]
}
よりも
for (let value of values) {
sum += value
}
の方がわかりやすいと思います.
この感覚を数式でも適用してほしいという気持ちです.
理由② 並び順から開放される
これが一番の理由なのですが, 集合では要素間の並び順は存在しない ことが明示できます.
$\sum_{i=1}^{n} f(a_i)$ と表すと, $f(a_1)$ から $f(a_n)$ と順に足し合わせる と読み取ってしまいます.これでは,和の計算に不要な 並び順 という概念が式に現れてしまいます.
対して, $\sum_{a \in A}f(a)$ と表すと,集合に対しての操作であることがはっきりと読み取れます.こうすることで,読み取るときに一種の写像として捉えることができます.
以下に例を示します.
例: テストデータと学習データ
適当な文章を両方の方式で記述して比較してみます.
連番で表記した例
10000個のデータ $d_1,d_2,...,d_{10000}$ について,$d_1$〜$d_{6000}$番目を学習データ,$d_{6001}$〜$d_{10000}$をテストデータと分割して実験を行いました.その結果,以下が得られました.
$$\frac{1}{6000}\sum_{i=1}^{6000} f(d_i) \approx \frac{1}{4000}\sum_{i=6001}^{10000} f(d_i)$$
集合で表記した例
10000個のデータ $D=\{d_1,d_2,...,d_{10000}\}$ について, 学習データを $D_L=\{d_1,...,d_{6000}\}$ ,テストデータを $D_T=\{d_{6001},...,d_{10000}\}$ と分割して実験を行いました.その結果,以下が得られました.
$$\frac{1}{\# D_L}\sum_{d_l\in D_L} f(d_l) \approx \frac{1}{\# D_T}\sum_{d_t\in D_T} f(d_t)$$
集合で表記することで,式の主張が読み取りやすくなるのではないでしょうか.
(特に時系列のデータなどの順序が印象付けられやすいものでは,集合で表すことで新しい視点を得られたりすることが多い気がします.)
おわりに
集合と写像の考え方っていいよね というポエムでした.
お付き合いいただきありがとうございました
変更履歴
2020/04/08 例を追加して,文章も少し修正しました