相加相乗平均
今日も数学の時間がやってきました。
まず相加平均と相乗平均の関係で定義をおさらい。
reduceがあると便利なので作る。
Core JavaScript 1.5 Reference:Objects:Array:reduce - MDC
Array.prototype.reduce = function (fn, initialValue) { return ( this.length == 0 ) ? initialValue : this.slice(1).reduce(fn, fn(this[0], initialValue)); }; [1,2,3,4].reduce( function (a,b) { return a+b}, 0)
で10になる。
配列の相乗平均は
Array.prototype.geom_mean = function () { var geom = this.reduce( function ( a, b) { return a*b}, 1 ); return Math.pow( geom, 1 / this.length ); } [1,2,3,4].geom_mean();
こんなで2.133とか。
比較のためただの相加平均も。
Array.prototype.avg= function () { return this.reduce( function ( a, b) { return a+b}, 0 ) / this.length; } [1,2,3,4].avg();
で2.5というわけ。
Array.prototype.reduce = function (fn, initialValue) { return ( this.length == 0 ) ? initialValue : this.slice(1).reduce(fn, fn(this[0], initialValue)); }; Array.prototype.geom_mean = function () { var geom = this.reduce( function ( a, b) { return a*b}, 1 ); return Math.pow( geom, 1 / this.length ); } Array.prototype.avg= function () { return this.reduce( function ( a, b) { return a+b}, 0 ) / this.length; } var sets = [ [100, 100, 100], // 0.9999999999999997 [0, 0, 300], // 0 [100, 100, 300, 1500], // 0.518 [500, 500, 500, 500], // 1 [400, 500, 400, 700], // 0.9729 [1, 500, 200, 1300], // 0.21345 [240, 230, 230, 1300], // 0.71685 [100, 100, 100, 100, 100, 100, 100, 100, 100, 1100], // 0.6354 [170, 90, 230, 130, 190, 160, 300, 140, 200, 390], // 0.9222 ]; sets.map( function (a) { console.log( a.geom_mean() / a.avg() ); } );
相乗平均を相加平均で割ると値域が0-1になる(常に 相乗平均 < 相加平均だから)。全部の値が同じだと1で、ひとつでも0のやつがいると0になる。感覚的にはばらつきがでかいと値が小さくなると思ったんだけど....
全体の半分を占めるようなやつがいても、集合のサイズが多いとそんなに値は小さくならない。
0.9くらいになるやつだと、まあばらつきもあるけど大雑把に言っちゃえばだいたい同じくらいに思える。
集合セットと値とが変わる場合、どうやったら視覚化できるんだ。集合セットの値がどれくらい偏ってるとどれくらいの値になるかを感覚的に知りたいんだけど...
相加相乗平均の関係、受験でやったけど、ほんとはこの関係をなんに使うとべんりなんだろう。
ちなみにexcelだと作らなくてもあります....excelちょーべんり。
幾何平均・調和平均−GEOMEAN関数・HARMEAN関数:Excel エクセルの使い方-関数/計算式-数学・統計