vanishing component analysisの試作(補足)
TRANSCRIPT
2 0 1 3 / 0 7 / 2 9
VANISHING COMPONENT ANALYSISの試作 (補足 )
PRESENTED BY:(株)デンソーアイティーラボラトリ
塚原裕史
VCAの試作コード
以下に公開した資料の補足ですVanishing Component Analysis を試作してみましたトイデータ(その1)、(その2)の結果については、そちらを
参照して下さい。今回の補足で使用したソースコードを以下に公開します:
免責事項なお上記の資料やコード及び本資料の内容はバグによる問題がを
含んでいる可能性がありますので、自己責任で参考にして下さい。
https://github.com/htsukahara/vca/tree/master/sources/vca-1.0.1
トイデータでの実験(その3)
VCA がどういうものであるかを見るために、以下のようなノイズのない綺麗に線形に分布した点に対して VCA を適用してみた。
トイデータでの実験(その1)
tolerance ε を 0.1 くらいに設定して得られた Vanishing Components:
次のページに、これらの各コンポーネントを tolerance ε の幅を持って、データと重ね合わせて行く。
V[1]: 38053687296305.52 + -829922279491183.4*x1^1 + -516912080021296.4*x2^1V[2]: 0.047684 + 1.1163*x1^1 + 1.0876*x1^2 + 0.71315*x2^1 + 1.7471*x1^1*x2^1 + 1.1187*x1^2*x2^1 + 0.59754*x2^2 + 0.67789*x1^1*x2^2
トイデータでの実験(その3)
第1成分のみ綺麗に、線形状の構造にフィットしている。
トイデータでの実験(その3)
第2成分 線形のデータ分布を内側に大体含んでいる。
トイデータでの実験(その4)
次に2つの線形分布がある場合に適用してみた。
トイデータでの実験(その4) 先と同様に、 tolerance ε を 0.1 くらいに設定して得られた Vanishing
Components
第一成分は、一次の多項式ではなくなり、楕円の式1つで近似しようとしているように見える。 複数のコンポーネントがあると、上手く分離できないのか? しかし、ある意味、効率の良い近似とも言える。
以下に、これらの各コンポーネントを tolerance ε の幅を持って、データと重ね合わせて行く。
V[1]: 0.58849 + -1.7797*x1^1 + 1.2293*x1^2 + -0.5591*x2^1 + 0.6041*x1^1*x2^1 + 0.14276*x2^2V[2]: 0.007188 + -0.013315*x1^1 + 0.022226*x1^2 + -0.034851*x2^1 + -0.022748*x1^1*x2^1 + -0.039353*x2^2V[3]: 0.94799 + -2.3044*x1^1 + 1.32*x1^2 + -0.82189*x2^1 + 0.41406*x1^1*x2^1 + 0.092448*x1^2*x2^1 + -0.12985*x2^2 + 0.82079*x1^1*x2^2V[4]: -1.4685 + 2.9729*x1^1 + -1.8447*x1^2 + 1.824*x2^1 + 0.059947*x1^1*x2^1 + -0.14744*x1^2*x2^1 + -0.24381*x2^2 + -1.5582*x1^1*x2^2V[5]: -0.035858 + 0.29118*x1^1 + -0.14274*x1^2 + 0.083953*x2^1 + -0.050147*x1^1*x2^1 + -0.016616*x1^2*x2^1 + -0.048695*x2^2 + -0.14637*x1^1*x2^2V[6]: 0.95693 + -2.2892*x1^1 + 1.3156*x1^2 + -0.82012*x2^1 + 0.41166*x1^1*x2^1 + 0.09093*x1^2*x2^1 + -0.14078*x2^2 + 0.80767*x1^1*x2^2V[7]: -1.481 + 2.9968*x1^1 + -1.8563*x1^2 + 1.8402*x2^1 + 0.047269*x1^1*x2^1 + -0.1412*x1^2*x2^1 + -0.24298*x2^2 + -1.5712*x1^1*x2^2V[8]: -0.086541 + 0.043571*x1^1 + 0.11731*x1^2 + -0.084123*x2^1 + 0.033424*x1^1*x2^1 + 0.12075*x1^2*x2^1 + -0.0021733*x2^2 + -0.0048348*x1^1*x2^2V[9]: 0.065121 + 0.058518*x1^1 + -0.017451*x1^2 + 0.0065153*x2^1 + -0.010736*x1^1*x2^1 + -0.014539*x1^2*x2^1 + -0.062498*x2^2 + -0.064753*x1^1*x2^2
トイデータでの実験(その4)
第1成分:線形の構造が2つあることは反映されない。しかし、楕円に依って近似されているように見える。
トイデータでの実験(その4)
第2成分 この成分は必要なのかとも思えるが、確かに、第1成分と第2成分とで、
少しデータの範囲が絞り込まれたようにも見える。
トイデータでの実験(その4)
第 3 成分 この成分はなるほど、と思える。
トイデータでの実験(その4)
第4成分を以下に示して行く
トイデータでの実験(その4)
トイデータでの実験(その4)
トイデータでの実験(その4)
トイデータでの実験(その4)
トイデータでの実験(その4)
トイデータでの実験(その5)
2つの円が交差している場合。
トイデータでの実験(その5)
tolerance ε を 0.05 くらいに設定して得られた Vanishing Components:
次のページに、これらの各コンポーネントを tolerance ε の幅を持って、データと重ね合わせて行く。
V[1]: 0.011893 + 0.20778*x1^1 + -0.17498*x1^2 + -0.20997*x2^1 + 0.0045794*x1^1*x2^1 + 0.17498*x2^2V[2]: 0.096907 + -0.13218*x1^1 + 0.023591*x1^2 + -0.12877*x2^1 + 0.0298*x1^1*x2^1 + 0.021212*x1^2*x2^1 + 0.016207*x2^2 + 0.018753*x1^1*x2^2V[3]: 0.035958 + -0.081459*x1^1 + -0.081221*x1^2 + -0.047892*x2^1 + 0.54914*x1^1*x2^1 + -0.093519*x1^2*x2^1 + -0.10343*x2^2 + -0.090264*x1^1*x2^2V[4]: -0.0015812 + 0.0040294*x1^1 + 0.0093657*x1^2 + 0.0065342*x2^1 + 0.013504*x1^1*x2^1 + 0.007841*x1^2*x2^1 + 0.0049006*x2^2 + 0.0066431*x1^1*x2^2V[5]: -0.0027385 + 0.24152*x1^1 + -0.16681*x1^2 + -0.26302*x2^1 + 0.0025333*x1^1*x2^1 + 0.020966*x1^2*x2^1 + 0.18022*x2^2 + -0.020735*x1^1*x2^2V[6]: 0.074541 + -0.07109*x1^1 + 0.028587*x1^2 + -0.12012*x2^1 + -0.18874*x1^1*x2^1 + 0.097144*x1^2*x2^1 + 0.084137*x2^2 + 0.01077*x1^1*x2^2V[7]: -0.039159 + -0.11574*x1^1 + 0.30824*x1^2 + 0.27533*x2^1 + -0.33464*x1^1*x2^1 + -0.38068*x1^2*x2^1 + -0.24354*x2^2 + 0.4937*x1^1*x2^2V[8]: -0.059991 + 0.25859*x1^1 + -0.16758*x1^2 + -0.1027*x2^1 + -0.3935*x1^1*x2^1 + 0.41144*x1^2*x2^1 + 0.31364*x2^2 + -0.306*x1^1*x2^2V[9]: 0.062868 + 0.033014*x1^1 + -0.015785*x1^2 + 0.050497*x2^1 + 0.019917*x1^1*x2^1 + -0.022209*x1^2*x2^1 + -0.027432*x2^2 + -0.020557*x1^1*x2^2V[10]: 0.0067857 + 0.2492*x1^1 + -0.17104*x1^2 + -0.25838*x2^1 + 0.005516*x1^1*x2^1 + 0.017791*x1^2*x2^1 + 0.17809*x2^2 + -0.02399*x1^1*x2^2V[11]: -0.013363 + 0.049945*x1^1 + 0.084215*x1^2 + 0.017695*x2^1 + -0.52854*x1^1*x2^1 + 0.096325*x1^2*x2^1 + 0.10469*x2^2 + 0.091733*x1^1*x2^2V[12]: -2.0674e-06 + 0.045396*x1^1 + 0.045398*x1^2 + -0.045618*x2^1 + -0.00021949*x1^1*x2^1 + 0.045399*x1^2*x2^1 + -0.045616*x2^2 + -0.045616*x1^1*x2^2V[13]: 0.062997 + 0.034454*x1^1 + -0.018945*x1^2 + 0.048839*x2^1 + 0.020841*x1^1*x2^1 + -0.023417*x1^2*x2^1 + -0.024503*x2^2 + -0.019717*x1^1*x2^2
トイデータでの実験(その5)
第1成分のみ二つの円が重なっている構造は捉えられていない。
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その5)
トイデータでの実験(その6)
放物線の場合。
トイデータでの実験(その6)
tolerance ε を 0.1 に設定して得られた Vanishing Components:
次のページに、これらの各コンポーネントを tolerance ε の幅を持って、データと重ね合わせて行く。
V[1]: 0.09858 + 0.00025809*x1^1 + 0.00099825*x1^2 + -0.069001*x2^1 + -0.00048082*x1^1*x2^1 + -0.00039556*x2^2V[2]: 0.05399 + -0.021489*x1^1 + -0.00098304*x1^2 + -0.042765*x2^1 + 0.006893*x1^1*x2^1 + 0.028636*x2^2V[3]: -0.054816 + 0.0011886*x1^1 + -0.00022477*x1^2 + 0.035161*x2^1 + -0.0033228*x1^1*x2^1 + -0.0046006*x2^2V[4]: -0.14298 + 0.011012*x1^1 + -3.5356e-05*x1^2 + 0.10346*x2^1 + -0.001183*x1^1*x2^1 + -3.3602e-05*x1^2*x2^1 + -0.012779*x2^2 + -0.00063592*x1^1*x2^2V[5]: -0.018235 + 0.034968*x1^1 + -0.00051362*x1^2 + 0.15331*x2^1 + -0.03245*x1^1*x2^1 + -0.00051309*x1^2*x2^1 + 0.0025757*x2^2 + 0.0062103*x1^1*x2^2V[6]: -0.14357 + 0.011011*x1^1 + -3.7382e-05*x1^2 + 0.10389*x2^1 + -0.0012578*x1^1*x2^1 + -3.5621e-05*x1^2*x2^1 + -0.012803*x2^2 + -0.00061403*x1^1*x2^2V[7]: -0.053026 + -0.037454*x1^1 + -0.00025938*x1^2 + 0.12686*x2^1 + 0.032888*x1^1*x2^1 + -0.00025914*x1^2*x2^1 + -0.0077212*x2^2 + -0.0060523*x1^1*x2^2V[8]: -0.069533 + -0.0042614*x1^1 + 7.2624e-05*x1^2 + 0.03735*x2^1 + -0.0069025*x1^1*x2^1 + 7.3366e-05*x1^2*x2^1 + -0.002866*x2^2 + 0.0022738*x1^1*x2^2V[9]: -0.14573 + 0.010889*x1^1 + -3.5215e-05*x1^2 + 0.10507*x2^1 + -0.0014654*x1^1*x2^1 + -3.3431e-05*x1^2*x2^1 + -0.012895*x2^2 + -0.00054514*x1^1*x2^2V[10]: -0.00042151 + 0.038915*x1^1 + -0.0002805*x1^2 + 0.086212*x2^1 + -0.035609*x1^1*x2^1 + -0.00027941*x1^2*x2^1 + -0.00081365*x2^2 + 0.0067493*x1^1*x2^2V[11]: 0.00018166 + 2.0866e-06*x1^1 + -0.00016932*x1^2 + 0.00027578*x2^1 + 0.00011344*x1^1*x2^1 + -0.00016932*x1^2*x2^1 + 0.00011139*x2^2 + 0.00011058*x1^1*x2^2V[12]: -0.0097071 + -0.0094751*x1^1 + -8.27e-06*x1^2 + -0.0065553*x2^1 + -0.0067272*x1^1*x2^1 + -8.2672e-06*x1^2*x2^1 + 0.0027469*x2^2 + 0.0027659*x1^1*x2^2
トイデータでの実験(その6)
第1成分のみ一応、辛うじて放物線の構造が捉えられている。
トイデータでの実験(その6)
第2成分以降データのエリアが絞り込まれて行く。
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その6)
トイデータでの実験(その7)
2つの放物線が交差している場合。
トイデータでの実験(その7)
tolerance ε を 0.1 くらいに設定して得られた Vanishing Components:
次のページに、これらの各コンポーネントを tolerance ε の幅を持って、データと重ね合わせて行く。
V[1]: 0.0044872 + -0.0011397*x1^1 + -0.006037*x1^2 + 0.0089716*x2^1 + 0.0031607*x1^1*x2^1 + 0.00050708*x2^2V[2]: -0.0090147 + -0.0080433*x1^1 + -4.0582e-05*x1^2 + -3.0095e-05*x2^1 + 0.00048989*x1^1*x2^1 + -0.00059094*x2^2V[3]: 0.023147 + 0.024378*x1^1 + 0.0031677*x1^2 + 0.0060285*x2^1 + 0.0081257*x1^1*x2^1 + 0.0020685*x1^2*x2^1 + 0.0016769*x2^2 + 0.00053574*x1^1*x2^2V[4]: -0.017079 + -0.020037*x1^1 + -0.0031857*x1^2 + -0.01507*x2^1 + -0.018129*x1^1*x2^1 + -0.0030566*x1^2*x2^1 + -0.00019903*x2^2 + -6.4967e-05*x1^1*x2^2V[5]: 0.033946 + 0.0060635*x1^1 + -0.00055789*x1^2 + 0.023066*x2^1 + 0.0058583*x1^1*x2^1 + 2.315e-05*x1^2*x2^1 + -0.00082323*x2^2 + -0.00022003*x1^1*x2^2V[6]: -0.0016073 + -0.00037973*x1^1 + 0.00097623*x1^2 + 0.00097094*x2^1 + 0.002086*x1^1*x2^1 + 0.0011188*x1^2*x2^1 + 0.00013983*x2^2 + 0.00028788*x1^1*x2^2V[7]: 0.011015 + 0.013773*x1^1 + 0.0024883*x1^2 + 0.013444*x2^1 + 0.016081*x1^1*x2^1 + 0.0026412*x1^2*x2^1 + -0.00018662*x2^2 + -2.7806e-05*x1^1*x2^2
トイデータでの実験(その7)
第1成分のみ二つの放物線が重なっている構造は捉えられていない。
トイデータでの実験(その7)
トイデータでの実験(その7)
トイデータでの実験(その7)
トイデータでの実験(その7)
トイデータでの実験(その7)
トイデータでの実験(その7)
トイデータでの実験(その7)
トイデータでの実験(その 8)
双曲線の場合座標 x1, x2 について、対称な点の配置
トイデータでの実験(その8)
tolerance ε を 0.1 くらいに設定して得られた Vanishing Components:
次のページに、これらの各コンポーネントを tolerance ε の幅を持って、データと重ね合わせて行く。
V[1]: 0.00068251 + 0.0024465*x1^1 + 0.0007573*x1^2 + 0.00024513*x2^1 + 1.2887e-05*x1^1*x2^1 + -0.0024713*x2^2V[2]: -0.00014162 + -3.4893e-06*x1^1 + -9.8202e-06*x1^2 + -5.3869e-05*x2^1 + -0.00023221*x1^1*x2^1 + -0.00024333*x2^2V[3]: 5.0863e-05 + 0.0002833*x1^1 + 5.1819e-05*x1^2 + 0.00039001*x2^1 + 0.00026429*x1^1*x2^1 + -3.6087e-08*x1^2*x2^1 + -2.577e-05*x2^2 + -2.4835e-06*x1^1*x2^2V[4]: -0.016982 + -0.0076418*x1^1 + 1.6159e-05*x1^2 + -0.0077197*x2^1 + 1.9328e-05*x1^1*x2^1 + 4.3409e-06*x1^2*x2^1 + 9.0817e-06*x2^2 + 1.4389e-05*x1^1*x2^2V[5]: -5.2758e-06 + -3.919e-06*x1^1 + 2.5766e-07*x1^2 + -1.5297e-05*x2^1 + -1.612e-05*x1^1*x2^1 + -5.7931e-08*x1^2*x2^1 + -1.2242e-05*x2^2 + -1.2101e-05*x1^1*x2^2V[6]: 0.00034292 + -0.00023669*x1^1 + -0.00012927*x1^2 + -0.00050772*x2^1 + -0.00019432*x1^1*x2^1 + 2.6898e-08*x1^2*x2^1 + 5.9234e-05*x2^2 + 1.1711e-06*x1^1*x2^2V[7]: 0.00072948 + 0.00016101*x1^1 + -0.00012682*x1^2 + -0.00010652*x2^1 + 0.0002008*x1^1*x2^1 + -1.4696e-08*x1^2*x2^1 + 5.6325e-05*x2^2 + -6.1854e-07*x1^1*x2^2V[8]: 0.00051248 + 0.0073864*x1^1 + 7.5685e-06*x1^2 + -0.010252*x2^1 + 1.3796e-06*x1^1*x2^1 + 5.6953e-06*x1^2*x2^1 + -1.4577e-05*x2^2 + -1.3736e-05*x1^1*x2^2
トイデータでの実験(その8)
第1成分のみ綺麗に双曲線の構造にフィットされている。
トイデータでの実験(その8)
第2成分までこれまでもそうであったが、第1成分で無限に伸びている部分を
第2成分が有限に切る傾向がある。
トイデータでの実験(その8)
第3成分以降他の成分についても同様であるが、今回、データの分布の対称性
を反映して、座標の入れ替えで対称な成分が出て来る。
トイデータでの実験(その8)
トイデータでの実験(その8)
トイデータでの実験(その8)
トイデータでの実験(その8)
トイデータでの実験(その8)
簡単な所感 今回のトイデータから分かった事
直線、放物線、双曲線の分布に関しては、綺麗にフィットする成分が第1に出て来る。 但し、放物線では、 tolerance の値を小さくすると、第一成分に放物線が出て来ない。
一般に tolerance の値を小さくすると、複数の成分に分離する傾向がある。 データの配置の間隔よりも tolerance の値が小さくなってしまうからか?
双曲線は、非連結であるが、正しくフィットされていた。 また、座標の入れ替えに対称な配置にしたところ、成分にも対称性が反映されてい
た。 複数のコンポーネントを持つ分布に対しては、それぞれのコンポーネントに
フィットする多項式は出て来ないで、全てのコンポーネントを包含する成分1つに纏められる傾向がある。 例外値の時もどうであるが、基本的に全てのデータを含むように1つの成分が含む領
域が膨張される。
簡単な所感
その他、浮かんで来た考え Tolerance の値は、小さければ良いというものではなく、データの広がり
に合わせた方が低次の多項式でフィットさせることが出来るようである。 トイデータのように、単純な分布では高次の成分まで計算しても、あま
り意味がないかもしれない。 VCA の中で計算している特異値の最大値があまり変化(減少)しなくなったら、
終了するようにしてみたが、大体良い感じ。 あるいは、イテレーションまたは成分数を指定して終了する。
複数のコンポーネントがある場合に、それぞれにフィットするように出来ないだろうか?
簡単な所感
VCA の中で計算している特異値の最大値があまり変化(減少)しなくなったら、終了するようにすると、放物線の例では、次のようになる: 第3成分までで止まる:
これは、先に示したように、第4成分以降は不要に思えたので、比較的自然な次数で止まっているように思える。
V[1]: 0.09858 + 0.00025809*x1^1 + 0.00099825*x1^2 + -0.069001*x2^1 + -0.00048082*x1^1*x2^1 + -0.00039556*x2^2V[2]: 0.05399 + -0.021489*x1^1 + -0.00098304*x1^2 + -0.042765*x2^1 + 0.006893*x1^1*x2^1 + 0.028636*x2^2V[3]: -0.054816 + 0.0011886*x1^1 + -0.00022477*x1^2 + 0.035161*x2^1 + -0.0033228*x1^1*x2^1 + -0.0046006*x2^2
(a)第3成分まで (b) 第4成分まで
双曲線の場合、上の停止ルールを使うと第2成分までで止まる。 第3成分は、第2成分の座標を入れ変えた成分になっていて、冗長な成分に
成っているという意味で、このような止め方も妥当と言える。
(a)第2成分まで (b) 第3成分まで
THANK YOU!