スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

評判の科学

2013年10月15日 00:25

人間や他の生物が「評判(=他の個体による評価)」からの影響をどのように受けるかについての研究結果をまとめた本。いくつかのエピソードをメモ:

・名声バイアスの活用
 - 一つの専門分野で秀でている人物は他の分野でも秀でていると思われる。(タイガーウッズの不倫問題で、アクセンチュアはタイアップ契約を打ち切ったが、ナイキは打ち切らなかった。)
・Webは気前の良さを示す絶好の場所
 - MP3や動画ファイルなど違法コンテンツの譲り合い
・「私たちが自慢する者を拒むのは、彼が自分のプライドのために、いつか誰かを殺すからだ」
・人は匿名で、落とし物を届ける。
・赤ちゃんにストーリーを見せて「妨害者」と「協力者」を選ばせると協力者を選ぶ。また妨害者に罰を与える者にも好意的である
・大人の会話の60%はそこに居ない人の事
・社内での評判は来年も再来年も変わらない
・他人が見ているときの方がけんかが増える(けんかの原因は恥や屈辱が多い)
・シジュウカラは観客の他のオスを意識して戦う事がある。
・人の顔のような図形が視野の中に入ってくるだけで、気前が良くなる
・2010年イギリスの国会議員の経費内容の情報公開によって多くの議員が落選した
・2008年サブプライムローン破綻時、銀行家や評価会社は誰も恥じていなかった。むしろ自分達は生き残った者、とすら考えていた。
・アマゾンレビューのレビューアのスコア算定方法はたまに切り替えて、同じ人がずっと頂点に居ないようにしている。ただし殿堂は用意されている。
・ランクを利用した評判システムは、ランクを上げる方法が明らかになってはいけないため、ランク算出システムは非公開にしている事が多い。
・Ihollaback.org, Dontdatehimgirl.com, iparklikeidiot.com などのサイト



スポンサーサイト

ワークシフト

2013年10月14日 23:16

ワークシフト


未来(2025年)の働き方を予想する本、未来を形作る5つの要因を組み合わせて「漫然と迎えた暗い未来」や「積極的に幸せに生きるための未来」のストーリーを提示している。以下メモ:

○未来を形作る5つの要因
1.テクノロジーの進化
・世界の50億人がインターネットに接続する
・地球上のどこでもクラウドに接続可能になる
・生産性が向上し続ける
・ソーシャルな参加、群衆の知恵が可能になる
・知識がデジタル化する
・バーチャル空間でのアバターの利用が普通になる
・人工知能アシスタント
2.グローバル化
・24時間休まない世界
・中国とインドの経済が成長
・発展途上国での倹約型イノベーション
・世界中で都市化が進行
・先進国を含めた世界中に貧困層が出現
3.人口構成の変化
・Y世代の影響が拡大
・寿命が長くなる
・貧しい老後を迎える世代がある
4.社会の変化
・家族のあり方が変わる
・自分の人生を見つめ直す人が飢える
・女性の力が強くなる
・大企業や政府に対する不信感が強まる
5.エネルギー環境問題
・エネルギー価格上昇

●暗い未来
・時間が細切れになる。(1990年代、仕事は家でできなかった。)
・家族と離ればなれになる。(都市化、飛行機燃料価格の上昇により)
・仕事から遊びの要素がなくなる。
・先進国に貧困層が増える
・ブランドは自分がどういう人間か印象づけるための世界共通通貨

○明るい未来
・クラウドを利用して多様性のあるメンバーとアイデアを出し合い、co-creationする。
・積極的に社会と関わる未来
・ミニ起業家が増える(高齢の労働人口が増える)
・新興国でのイノベーションが増える

○3つのシフト
・ゼネラリストから連続的専門家へ、セルフブランディング
・「頼りになる同志」、「ビッグアイデアクラウド」、「自己再生コミュニティ」の三つの人的ネットワーク
・消費より経験に価値をおく社会へ


偶然の科学

2012年05月04日 04:03

社会学の領域において予測がいかに難しいか、またいかに後知恵説明がまかり通ってしまうかについて、実例をあげて解説している本。10章の望遠鏡の話が良い。

1.常識という神話
地下鉄で知らないひとに席を譲るように頼む事は激しい抵抗感がある(見えないルールがある)。非公式のルールの方が重要な場合がある。
 
物事の説明には、実際に起きた事に基づいて説明しがち。 
 
2.考えるということを考える
ドイツとオーストリアでは臓器提供への同意率が12%と99.9% である。学生たちは隣国同士でなぜこのような違いが生じるのか真剣に議論したが、正解はオーストリアでは臓器提供に関する選択肢において同意する方がデフォルトになっているだけだった。
 
クラウドソーシングで依頼した同じ内容の作業の質(正答率)は、報酬額によって全く変わらなかった。また、各被験者に「この作業の適正な報酬額はいくらか?」と聞くと、1セントで働いた者は5セント、5セントで働いたものは8セント、10セントで働いたものは13セントと答えた。 
   
3.群集の知恵(と狂気) 
モナリザは盗難事件で有名にならなかったら今の価値があったかどうかわからない 。
 
グラノヴェッターの暴動モデル:「集団の中でn人が暴動に参加したら自分も参加する」という閾値nを持った人の集団。各人のnが0から1,2,3...と一つも飛ばさずに分布している場合のみ全員が参加する暴動が成立する。
 
「よく売れたのはたくさんの人々が買ってくれたからです」 
 
4.特別な人々
ソーシャルネットワークにおいて、情報の拡散にはインフルエンサーの影響力はそれ程大きくない、それよりも影響されやすい人々の存在が重要。(山火事が広がるために、燃料となる木が必要なのと同じ) 
 
5.気まぐれな教師としての歴史
後知恵バイアス、サンプリングバイアス:事故が起きた場合にだけ当時の条件について注目される(同じ条件で今まで事故が起きて来なかったにも関わらず) 。
 
7.よく練られた計画
「予測市場」 は群集の知恵を取り入れた予測が可能だが、市場操作に対しては無力である。
 
8.万物の尺度
予測しない方法:ZARAはまず多数の商品を店舗に配置する。実際に売れた商品だけを追加生産する。
 
広告の効果は今までわからなかった。webサイトのバナー広告で計測した結果、40代以上には効果があった。
 
ブライトスポットアプローチ、ブートストラップ: 現場で一部の人が実際に実行している改善を全体に共有するだけで、問題解決
 
9.公正と正義
飲酒運転した場合と、飲酒運転で人身事故を起こした場合、同じ刑が適用されるべきか?それとも後者が重い刑になるべきか。
 
10.人間の正しい研究課題
社会科学にはこれまでニュートンはおろか、ケプラーすらいなかった。社会学はSNSという望遠鏡を手に入れたので今後研究が進むだろう。



LIBSVM java版を使う

2012年02月20日 02:44

LIBSVM java版を使う

kinectを使ったアプリケーションで、決まった動きを検出するための一つの方法としてSVMを使う事を考えた。
現在は、OpenNI + java で kinect を使っているので、java言語で使えるsvmライブラリを探した。

以下が割と有名なようだったので使ってみた。

LIBSVM -- A Library for Support Vector Machines
http://www.csie.ntu.edu.tw/~cjlin/libsvm/


このページで、java実装は二つ紹介されている
・LIBSVMのjava実装(C++のコードをそのままjavaに変換した感じ)
 ・http://www.csie.ntu.edu.tw/~cjlin/libsvm/#download
・jlibsvm: LIBSVMをパフォーマンス、拡張性の観点からリファクタリングしたコード
 ・http://dev.davidsoergel.com/trac/jlibsvm/

このふたつのうち、説明だけ読むとjlibsvmの方がよく見えるが、実際使ってみると未実装部分が大杉だったので、上のLIBSVMのjava実装を使った。

・使い方

1.モデルの作成

1-1.元ネタファイルの作成

以下のような形式の元ネタファイルを作る


1 1:-0.0013786764705882354 2:0.0057157628676470585 3:4.5955882352941165E-4 4:0.00112655739379085 5:38.0 6:-83.0 7:236.0
1 1:-4.468958652830196E-4 2:0.001708883828216933 3:-0.0029316591163263133 4:-0.0029494415206854367 5:49.0 6:21.0 7:900.0
2 1:-8.053472566307697E-4 2:0.015825596141435506 3:6.725430580246377E-4 4:0.019385799543923065 5:196.0 6:-40.0 7:506.0
2 1:-1.7673336983657553E-4 2:0.021002586194578676 3:0.005701880761361455 4:0.00407827378102308 5:216.0 6:34.0 7:399.0
3 1:-8.170953867899441E-4 2:-0.0023765650581102004 3:0.0016513781990655056 4:0.011545796818632416 5:169.0 6:-149.0 7:1603.0
3 1:-0.011345886334911794 2:-0.004779992024791061 3:0.010344040288070138 4:0.015262516965389552 5:38.0 6:-84.0 7:700.0
4 1:-8.15206561207011E-4 2:-0.012176408105470035 3:-5.230214125755292E-4 4:0.014526629528803993 5:196.0 6:-118.0 7:533.0
4 1:-0.005219037617901608 2:-0.010753445963518873 3:0.005010016891373788 4:0.011383035605288017 5:100.0 6:-71.0 7:567.0
...



形式は

クラス名 パラメータ番号:値 パラメータ番号:値 パラメータ番号:値 ...

である必要がある。


1-2.svm_trainの実行


元ネタを例えばinput.txtという名前で保存した場合、

java svm_train -t 0 input.txt



を実行すると、input.txt.model というファイルが作成される。
なお、 -t でカーネル関数を選ぶ事ができる。0にすると線形カーネル,2にするとガウシアンカーネルになる。
(デフォルトはガウシアンカーネル)その他のパラメータなど詳しくは→http://www.csie.ntu.edu.tw/~cjlin/libsvm/

1-2.モデルの検証


モデルの検証を行うコマンドがある。とくに別途検証データがないので、入力データを食わせてみる。

java svm_predict input.txt input.txt.model output.txt



このコマンドの結果は以下のように出力される。

Accuracy = 70.1219512195122% (115/164) (classification)



Accuracyは、input.txtのデータ行に書かれたクラス名と生成されたモデルで判別されたクラス名が正しかった割合である。

(元ネタデータを使っているのに100%でないのは、モデルを作るときに外れ値が捨てられたのだろう、と今の所解釈している。)

output.txtは以下のように出力されている。

1.0
1.0
2.0
2.0
...


これは、モデルを使って判別された行ごとに出力されている。

2.判別


javaコードの中で、モデルのロード、判別対象にしたいデータの作成、判別を実行する。


// モデルのロード
svm_model model = svm.svm_load_model("input.txt.model");
...
// 判別対象にしたいデータ
svm_node[] input = new svm_node[7];
input[0] = new svm_node();
...
// ラベルをセット
input[0].index = 1;
input[1].index = 2;
...
// 値をセット
input[0].value = "ラベル1のデータ";
input[1].value = "ラベル2のデータ";
...
//判別の実行
double v = svm.svm_predict(model,input);



の様に実行する。

以上。

・感想


ツールとしては、簡単に使える。

しかし当然ながら入力データとして何を選ぶかが重要。現在あまり認識率をあげられてないので、別の入力データを選ぼうと考えている。

あと、ガウシアンカーネルで、gammaをデフォルトで使うと元ネタデータを再度svm_predictした際にAccuracy 100%となるモデルができたが、このモデルを実際に使って別の入力データを判別させるとある一つのクラスにしか分別しない分別器になってしまった。gammaの値を小さくするとこの現象はなくなった。この辺り、現在カーネル関数やカーネルパラメータの選定よりもまず入力データを再考する事が有効と考えて、まだあまり深追いはしていない。

OpenNI Java を試す (2)

2012年01月09日 03:39

今日はHandsGeneratorというクラスを触ってみた。目標は、手の動きを追う方法を調べる事。

他の○○Generatorと同様にcontextを与えて生成。

handsGen = HandsGenerator.create(context);

それぞれのイベントのオブザーバーの実装クラスを渡しておく。

handsGen.getHandCreateEvent().addObserver(...)
handsGen.getHandDestroyEvent().addObserver(...)
handsGen.getHandUpdateEvent().addObserver(...)

これだけでは何も起こらない。どっかでhandsGen.startTracking(Point3D)しないとトラッキングが始まらない。

(ここはサンプルのUserTrackerのままだが)まず、UserGeneratorを生成し、userGeneratorからskeltonCapabikityを取得する。skeltonCapabilityのCalibrationCompleteイベントのオブザーバを登録し、

userGen = UserGenerator.create(context);
skeletonCap = userGen.getSkeletonCapability();
skeletonCap.getCalibrationCompleteEvent().addObserver(...);


そのオブザーバーの中は次のような処理にする。キャリブレーションがOKだったら、SkeltonCapabilityのトラッキングを開始し、その後に右手のトラッキングを開始する。

if (args.getStatus() == CalibrationProgressStatus.OK)
{
skeletonCap.startTracking(args.getUser());
handsGen.StartTracking(skeletonCap.getSkeletonJointPosition(
args.getUser(), SkeletonJoint.RIGHT_HAND).getPosition());
}

以上で、何となく手の動きが追えるようになった。ただし、「RIGHT_HAND」と書いてあるのにどうしても左手をトラッキングしているように見える・・。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。