2016年11月5日土曜日

[読了]習慣の力

「習慣の力」を読みました.

Charles Duhigg: 習慣の力, 講談社, 2013-04 [アマゾン, 楽天]

本書についてのメモを以下に記しておきます.

とある研究成果によると,毎日の人の行動の,実に40%以上が,「その場の決定」ではなく「習慣」だそうだ.習慣には良いものもあるし,悪いものもある.行動に占める習慣の領域がそれほど広いのであれば,どちらの習慣がそこに収まるかによって,人生の過ごし方が変わってくるはずだ.ただ,習慣のコントロールは難しい.気づいたときには身についているもので,やめようと思ってもやめられないし,良かれと思って始めてみても,なかなか続けられない.習慣というのは本当にやっかいなものだ.

しかし,近年の研究成果によると,そうでもないらしい.習慣とは何とかコントールできる対象のようだ.本書は,様々な個人,組織,社会と様々なレベルの事例を挙げながら,その方法を解き明かしている.

習慣とそれをコントロールするためのポイントは以下のとおりである.

  • 習慣は,欲求により作動された,きっかけ,ルーチン,報酬からなるループである.
  • 欲求,きっかけ,報酬を変えるのは難しいが,ルーチン(毎朝ジョギングするとか,タバコを吸うとかに当たる)は変えられる.
  • きっかけと報酬を見える化する.そして,そのきっかけのときに,その報酬が得られるような行動を行う.その行動が両者に結びつけば,ルーチンとなる.
  • つくりかえた習慣のループを永遠のものに変える要素は,「信じる」ことである.
  • 連鎖反応を起こして他の習慣を変えていくような習慣のことをキーストーン・ハビットと呼ぶ.
  • キーストーン・ハビットが与えれてくれるのは,「小さな勝利」(大きな勝利にもう少しで手が届くと思わせるもの)と呼ばれるものである.
  • キーストーン・ハビットの一つに意志力(無意識に自分を制御する習慣)があり,個人の成功にはこれが求められる.
  • 「ものごとを自分でコントロールしている感覚」は,意志力の保持に役立つ.
  • 新しい習慣を売り込むには,新規のものを古い習慣に見せるようにする.

2015年8月2日日曜日

共有するGitリポジトリを作成する方法

共有するGitリポジトリを設定する方法をメモしておきます.

$ groupadd group
$ usermod -G group user
$ mkdir /path/to/repository.git
$ git init --bare --shared /path/to/repository.git
$ chown -R user:group /path/to/repository.git

2015年6月13日土曜日

GEAのDataNucleus Enhancerが異常終了する問題

GEAのDataNucleus Enhancerが「java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal」という例外で異常終了する問題に出くわしました.この問題の解決方法をメモしておきます.

  • 「/WEB-INF/lib」(別のフォルダでもいいかもしれない)に「xml-apis-X.X.X.jar」と「xercesImpl-X.X.X.jar」を配置する(Xは適当な数字).
  • それら二つのJARファイルを「Java Build Path」の「Libraries」に追加する.

今回は,[1]の質問に対する回答を参考にしました.

[1] AppEngine Error [ java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal ], http://stackoverflow.com/questions/10234201/appengine-error-java-lang-noclassdeffounderror-org-w3c-dom-elementtraversal

2015年4月22日水曜日

CSSではみ出した部分を「…」にする方法

CSSではみ出した部分を「…」にする方法をメモしておきます.

.hogehoge {
    width: 4em;
    white-space: nowrap; 
    overflow: hidden;
    text-overflow: ellipsis;
}
<div class="hogehoge">どうしてプログラムのサンプルに使うテキストは「ほげほげ」なんだろう?</div>

「text-overflow: ellipsis;」と記せば,「…」にならなかったので,何でだろうとずっと悩んでいたのですが, このプロパティは,先の例のように他の3つのプロパティといっしょに使わないと効果が発揮されないんですね. ようやく謎が解けた.\(^O^)/

2015年4月19日日曜日

ロジスティック回帰をJavaで実装

文献[1]で紹介されているロジスティック回帰をJavaで実装してみました.

ロジスティック回帰は,分類問題に適用できる機械学習手法の1つです(確率化したパーセプトロンという理解でいいのかな). 文献で紹介されているとおりあらかじめ用意したデータを分類する関数を求めてみました. グラフにした結果は次の図のとおりです. 青の点が正解,赤の点が不正解,黄色の直線がそれらを分類するために推定された関数,オレンジが正解になる確率が0の領域で,緑が1の領域です. 直線付近は,正解と不正解の境界になっているので,正解になる確率がどんと落ちてます.

ちなみに,これまでグラフはExcelで描いてきたのですが,今回は難しかったので,d3.jsを使ってみました(かなりゴリ押しですけど). 使ってみて思いましたが,大本の文献で使っているPythonがやっぱり一番簡単そうですね.

[1] 中谷 秀洋: ロジスティック回帰を実装してみよう, 機械学習はじめよう 第20回, http://gihyo.jp/dev/serial/01/machine-learning/0020

2015年4月16日木曜日

パーセプトロンをJavaで実装

文献[1]で紹介されているパーセプトロンをJavaで実装してみました.

パーセプトロンは,分類問題に適用できる機械学習手法の1つです. 文献で紹介されているとおりあらかじめ用意したデータを正解(1)と不正解(-1)に分類する関数を求めてみました. グラフにした結果は次の図のとおりです. そうなるようにデータを作ってあるので,当たり前なのですが, 正解と不正解をうまく仕分ける関数を求めることができました.

[1] 中谷 秀洋: パーセプトロンを実装してみよう, 機械学習はじめよう 第17回, http://gihyo.jp/dev/serial/01/machine-learning/0017

2015年4月11日土曜日

ベイズ線形回帰をJavaで実装

文献[1]で紹介されているベイズ線形回帰を記事[2]で作成したプログラムを元にしてJavaで実装してみました.

ベイズ線形回帰は,線形回帰を確率化してベイジアンで関数を求める手法です. 文献で紹介されているとおり基底関数をベイズ基底にして関数を求めてみました. 結果は次の図のとおりです. ベイズ線形回帰なので,関数だけでなく,確率密度も求めることができます.

[1] 中谷 秀洋: ベイズ線形回帰を実装してみよう, 機械学習はじめよう 第14回, http://gihyo.jp/dev/serial/01/machine-learning/0014
[2] mizo0409: 線形回帰をJavaで実装, http://mizo0409.blogspot.jp/2014/01/java.html