非負値行列因子分解(NMF)
オライリー「集合知プログラミング」で特徴抽出の解説があり面白そうなので試してみた。
Pythonはご遠慮したいので.NETかJavaかなのだけど、最近はやりの言語なのに行列演算を扱えるライブラリは標準装備されてないのねぇ。。
Java+JAMAを使ってみた。
名前 | 国語 | 数学 | 理科 | 社会 |
---|---|---|---|---|
A | 50 | 50 | 50 | 50 |
B | 100 | 20 | 30 | 90 |
C | 100 | 30 | 40 | 100 |
D | 90 | 10 | 10 | 80 |
E | 10 | 100 | 90 | 20 |
上記のA〜E君5人のそれぞれ4教科のテストの点数の表を行列に変換してNMFを行う。
特徴数は2、繰り返し数は5000回で実行。
特徴の行列の計算結果は、
特徴 | 国語 | 数学 | 理科 | 社会 |
---|---|---|---|---|
特徴1 | 7.7 | 78.2 | 71.5 | 15.9 |
特徴2 | 98.7 | 1.5 | 10.4 | 89.7 |
次に重み行列の計算結果は、
名前 | 特徴1 | 特徴2 |
---|---|---|
A | 0.6 | 0.5 |
B | 0.3 | 1.0 |
C | 0.4 | 1.0 |
D | 0.1 | 0.9 |
E | 1.3 | 0.0 |
特徴の行列から、特徴1が理系型、特徴2が文系型と読める。
重みの行列から、
A君は特徴1と特徴2を同じくらいもっているので平均型。
B君は特徴2に偏っているので文系型。
C君、D君も同じく文系型。
E君は特徴1に偏っているので理系型。
と、いう分析でいいんじゃろか。。
もっと面白い例ないかなぁ。
- 作者: Toby Segaran,當山仁健,鴨澤眞夫
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/07/25
- メディア: 大型本
- 購入: 91人 クリック: 2,220回
- この商品を含むブログ (277件) を見る