関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - |
StatsComponent の標準偏差について
Solr の StatsComponent では標準偏差(stddev)が表示されるが、それは同じくStatsComponentで計算されるsumOfSquares を使った、次の近似式で計算されている:

  /**
   * Calculates the standard deviation statistic
   * 
   * @return Standard deviation statistic
   */
  private double getStandardDeviation() {
    if (count <= 1.0D) {
      return 0.0D;
    }

    return Math.sqrt(((count * sumOfSquares) - (sum * sum)) / (count * (count - 1.0D)));
  }


なぜ近似式を使っているかというと、forループを一度回すだけで計算したいためだ。分散や標準偏差を定義通りに計算しようとすると、最初に平均を求め(これでforループを一回回す必要がある)、その平均を使って各値との差の2乗を足していく必要がある(これでforループがもう一度必要)。StatsComponentではforループを一度しか回したくないので、その一回だけでsum(合計)、sumOfSquares(各値の2乗の合計)、min(最小)、max(最大)およびcount(件数)を計算または取得する。そして最後にmean(平均)と標準偏差を近似式で計算している。

そしてその近似式であるが、こちらの方のブログによると、あまりよろしくない結果を出してしまうようである。

これよりも良い近似式で同じく1パスで計算する方法がこちらに紹介されているが、特に私は今のところ急いで正確な標準偏差が必要になるわけでもないので、備忘録を残しておくだけにとどめておこう。
| 関口宏司 | Luceneクラス解説 | 16:54 | comments(0) | trackbacks(0) |
+ Solrによるブログ内検索
+ PROFILE
1234567
891011121314
15161718192021
22232425262728
2930     
<< September 2013 >>
+ LINKS
検索エンジン製品 - 比較のポイント
商用検索エンジンを購入した企業担当者は読まないでください。ショックを受けますから・・・
>>製品比較 10のポイント
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
Apache Solr入門 ―オープンソース全文検索エンジン
Apache Solr入門 ―オープンソース全文検索エンジン (JUGEMレビュー »)
関口 宏司,三部 靖夫,武田 光平,中野 猛,大谷 純
+ RECOMMEND
Lucene in Action
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless
FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
qrcode
+ SPONSORED LINKS