• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

MuPADが有料になっていたので、Maximaを試してみました。 Maximaは、MathematicaやMaple, MuPAD等のような数式処理を行うソフトウェアです。 MacOS環境ではportを使えば以下の1行でインストールできます (ちょっと時間がかかりますが)

   1  % sudo port install maxima

readlineが恋しいので、maximaを起動するには以下のようにrlwrapを使います。

   1  % rlwrap maxima

基本的な使い方は以下の通り。

微分

   1  (%i) diff(f(x), x);

積分

   1  (%i) integrate(f(x), x);

因数分解

   1  (%i) factor( ..式.. );

多項式に展開

   1  (%i) expand( ..式.. );

単純化

   1  (%i) ratsimp( ..式.. );

求根

   1  (%i) solve(f(x), x);
   2  (%i) solve(f(x) = a, x);

終了

   1  (%i) quit();

posted by Png genki on Tue 1 Sep 2009 at 08:52

ポジティブ/ネガティブ投票による正しいランキング方法が以下の記事で紹介されています。

How Not To Sort By Average Rating

この計算方法では、投票数が少ない場合には分散が大きく不正確な評価で、 投票数が多くなるにつれて分散が小さく正確な評価が得られているという事を考慮しています。以下数式


\frac{\hat{p}+\frac{z^2_{\alpha/2}}{2N}\pm{}z_{\alpha/2}\sqrt{
\frac{\hat{p}(1-\hat{p})+\frac{z^2_{\alpha/2}}{4N}}{N}
}}{1+\frac{z^2_{\alpha/2}}{N}}

これはScoreの{}_{1-\alpha/2}信頼区間を表しています。 この信頼区間の下界をランキングのスコアにすれば良い事になります。 ここで、{}_{\hat{p}}は、

です。全体に占めるポジティブ投票数の割合ですね。

{}_{z_{\alpha/2}}は標準正規分布上の {}_{1-\alpha/2}信頼区間の有意確率です。

さて、五段階評価によるRatingに同様のテクニックを適用する場合はどうしたらいいでしょうか。 単純に、1回の投票を4度のpositive/negative投票行為だと考えると (例えば星1つは[-,-,-,-], 星3つは[+,+,-,-])、以下のような {}_{\hat{p}'}を使えば良さそうです。


\hat{p}'=\frac{\sum_{i\in{[1,5]}}(i-1)N_{i}}{4N}

従って、最終的にこんな感じになります。


\frac{\hat{p}'+\frac{z^2_{\alpha/2}}{2N}\pm{}z_{\alpha/2}\sqrt{
\frac{\hat{p}'(1-\hat{p}')+\frac{z^2_{\alpha/2}}{4N}}{N}
}}{1+\frac{z^2_{\alpha/2}}{N}}

Rubyコードで表すとこんな感じですね。

   1  require 'statistics2'
   2  
   3  def score(ni, alpha)
   4    n = ni.inject(&:+)
   5    return 0 if n == 0
   6    m = ni.size
   7    z = Statistics2.pnormaldist(1-alpha/2)
   8    phat = m.times.zip(ni).inject(0){|s,(i,j)| s + i*j}/((m - 1.0)*n)
   9    (phat + z*z/(2*n) - z*Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
  10  end

posted by Png genki on Sun 10 May 2009 at 04:46

時々忘れるのでメモ。

引数の数英語(A)英語(B)
0constant function
1unary functionmonadic function
2binary functiondyadic function
3ternary(trinary) functiontriadic function
4quaternary functiontetoradic function
不定/可変multinary functionvariadic function

5つ以上の場合は、 quinary, senary, septenary, octonary, nonary, denary, undenary, duodenaryなどと続きます。

posted by Png genki on Fri 10 Oct 2008 at 04:10

Control Variateは モンテカルロ求積法などでVariance reduction の為に利用されるテクニックです。

統計量{}_{m}が与えられた時、期待値は以下のように表します。


\mu=E[m]

この時、期待値が{}_{E[t]=\tau}であり、 相関係数(correlation coefficient)が {}_{\rho_{mt}=Corr[m,t]}であるような統計量 {}_{t}があるとすると、以下の式で表される


m^\star=m-C(t-\tau)

は、{}_{\mu}に対して不偏(unbiased)です。Cは任意の定数です。

ここで、 {}_{\sigma_m}, {}_{\sigma_t}をそれぞれ、 {}_{m}, {}_{t}の標準偏差(standard deviation) とした時、定数Cを以下


C = \frac{\sigma_m}{\sigma_t}\rho_{mt}

のように選ぶと、 {}_{m^\star}の分散は最小化され、以下のようになります。


V[m^\star]=(1-\rho_{mt}^2)V[m]

元の統計量{}_{m}の分散に対して、 {}_{\rho_{mt}^2}の分だけ相対的に小さくなります。

すなわち、{}_{m}と高い相関関係 (正の相関でも負の相関でも良い)にある {}_{t}が既知であるときに、{}_{t}を使って {}_{m^\star}の期待値の推定量を求めることで、 {}_{m}の期待値の推定量を効率よく推定することができます。

See Also

posted by Png genki on Sat 19 Jul 2008 at 02:08

D言語やPythonのように、複素数リテラルが欲しかったのですが、 無かったのでそれっぽい動きをさせるようにNumeric#iを定義してみました。

numeric_i.rb

   1  require 'complex'
   2  
   3  class Numeric
   4    def i
   5      self * Complex::I
   6    end
   7  end

これだけです。あとは以下のようにして使います。

   1  require 'numeric_i'
   2  
   3  1 + 1.i                        #=> Complex(1, 1)
   4  (Math::E ** (Math::PI.i)).real #=> -1.0

(自分が)簡単に使えるように、GitHubでGemを作っておきました。 利用する場合は以下の手順で導入できます。

   1  gem sources -a http://gems.github.com
   2  sudo gem install genki-numeric_i

名前空間のお陰で、シンプルなGemも気軽に公開できて良い時代ですね。

See Also

posted by Png genki on Thu 10 Jul 2008 at 22:21
Contents
maximaの使い方のメモ
統計的に正しいランキングを行う方法
引数の数ごとの関数の呼び名(英語)のメモ
Control Variateに関するメモ
Numeric#iで虚数を簡単に使う
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ