ファジィ集合のはなし(10)
だいぶ長くなりましたね、このシリーズ。
今回もファジィ数の
計算を掘っていこうと思います。
己の墓は己で掘れ、裃白沙です。
前回出した例を今回も使います。
「だいたいA」というファジィ数のメンバーシップ関数を以下で定めます。
$$
\mu_A(x)=e^{-(x-A)^2}
$$
前回は演算後のメンバーシップ関数を逆関数から絞っていきました。
今回も例として割り算をつかいますので、前回の結果をそのまま使います。
今回は、前回の記事のためのグラフを作るうちに気になったことです。
ファジィ数の演算において、「だいたい1割るだいたい1」と「だいたい10割るだいたい10」が異なるメンバーシップ関数を持つということを見ていきます。
「だいたいA」割る「だいたいB」の計算において、$${\mu_A(x)=\mu_B(y),z=f(x,y)}$$となる$${y}$$を$${z}$$から求めると、
$$
y=\dfrac{A\mp B}{z\mp 1}
$$
ここで$${A}$$と$${B}$$がとても近い場合を考えます。
たとえば$${B=A+\delta}$$にしましょう。
すると、
$$
y=\dfrac{\delta}{1-z},\dfrac{2A+\delta}{1+z}
$$
コレを$${\mu_B(y)}$$に代入すると、$${\mu_{A\circ B}(z)}$$の値の"候補"が出てきます。
候補というのは、上の通り$${y}$$が二つあるためです。最後はsupで取捨選択する必要があります。
$$
\exp\left[-\left(\dfrac{-(1-z)A+z\delta}{1-z}\right)^2\right],\exp\left[-\left(\dfrac{(1-z)A-z\delta}{1+z}\right)^2\right]
$$
この時に、$${z=1+\epsilon}$$とします。
$$
\exp\left[-\left(\dfrac{\epsilon A+\delta+\delta\epsilon}{-\epsilon}\right)^2\right],\exp\left[-\left(\dfrac{-\epsilon A-\delta-\delta\epsilon}{2+\epsilon}\right)^2\right]
$$
この状態で、$${\delta}$$を0にします。
つまり、$${A=B}$$にするので、正しい結果は$${A\div A=1}$$です。
(言わずもがな$${A\neq 0}$$です)
ファジィ数としては$${z=1}$$を核にもつファジィ集合ですから、$${\mu_{z}(1)=1}$$を満たすはずです。
$$
\exp\left[-A^2\right],\exp\left[-\dfrac{\epsilon^2 A^2}{(2+\epsilon)^2}\right]
$$
この二つの値、どっちが勝つかを確認しようとおもいます。
$$
\begin{array}{}\exp\left[-A^2\right]&>&\exp\left[-\dfrac{\epsilon^2 A^2}{(2+\epsilon)^2}\right]\\\\\left[1-\dfrac{\epsilon^2}{(2+\epsilon)^2}\right]A^2&<&0\\\\(2+\epsilon)^2-\epsilon^2&<&0\\\\\epsilon&<&-2\end{array}
$$
コレはつまり、$${z<-1}$$ということに相当しますので、ひとまずそこは避けて議論をしましょう。
$${\epsilon >-2,z>-1}$$では、つまり
$$
\exp\left[-\dfrac{\epsilon^2 A^2}{(2+\epsilon)^2}\right]
$$
の方が大きく、supを取った結果採用されます。
つまり、例えば$${z=1}$$近傍ではコレがメンバーシップ関数の値になるということです。
$${\epsilon}$$は1からのズレを表すよう定義しましたから、この式で$${\epsilon=0}$$は$${z=1}$$の結果のはずです。
実際$${\epsilon=0}$$では、
$$
\exp\left[0\right]=1
$$
ですね。ちゃんといかなる$${A}$$でも$${A\div A=1}$$が一番確かなわけです。
ただコレが、若干$${z=1}$$からズレると面白い。
結果が$${A}$$によって変化します。
つまり、「10ぐらい割る10ぐらい」と「1ぐらい割る1ぐらい」は違うメンバーシップ関数を生み出します。
試しに$${\epsilon=1,z=2}$$では、
$$
\exp\left[-\dfrac{ A^2}{9}\right]
$$
$${A=0.1,1,10}$$ではそれぞれ、
$$
\begin{matrix}A&\mu_z(3)\\0.1&0.9989…\\1&0.8948…\\10&1.495\times10^{-5}\end{matrix}
$$
です。コレはつまり、「0.1ぐらい割る0.1ぐらい」よりも、「10ぐらい割る10ぐらい」の方がシャープなメンバーシップ関数であることを意味します。
実際書いてみましょう。
このように、ちゃんと予想された性質が再現されています。よかった。
以上のように、「だいたいA割るだいたいA」のメンバーシップ関数はAの値によってピークの鋭さが変わります。
ただ、これ、もっと根本的なところで「あたりまえ」な出来事だったりします。
といいますのも、「だいたい10」と「だいたい0.1」のメンバーシップ関数を同じ関数、$${e^{-(x-A)^2}$$で考えているのですが、これ、現実的には怪しい出来事です。
たとえば10に近い数と言った時の11と、0.1に近い数と言った時の1.1は同じ程度の近さと言えるでしょうか? 同様に、100に対する101も同じくらいの近さですか?
普通こういう時、ベースになる数、10に比してどのくらいの割合で近いかをみるはずです。つまり、こんなことをしたいんじゃないかと思います。
$$
\begin{array}{}0.1に対する1.1&:&\dfrac{(1.1-0.1)}{0.1}&=&10\\10に対する11&:&\dfrac{(11-10)}{10}&=&0.1\\100に対する101&:&\dfrac{(101-100)}{100}&=&0.01\\\end{array}
$$
この辺りは実験の観測、誤差論なんかも近い話ですが、ふつうこんなふうに真の値と測定値の差を真の値で割ることで誤差がどのくらいのサイズが見積もります。誤差率と名前がついているくらいです。
あれですよ、家から学校までの距離が1メートル測定値とずれててもたいして気にならないでしょ。
でも、あなたの身長が1メートルずれてたらどうよ?
とすると、今まで使ってきたメンバーシップ関数は現実の測定に対してはあまり良くないメンバーシップ関数ということになります。
どんなものが良いかというと、「10に対する8」と「1に対する0.8」でメンバーシップ関数が同じ値をもてば良いわけです。
つまり$${\mu_{10}(8)=\mu_1(0.8)}$$ですね。
10に対する8は$${\dfrac{8-10}{10}=0.2}$$の誤差を持ちます。1に対する0.8は$${\dfrac{0.8-1}{1}=0.2}$$の誤差を持ちますから、(近いと思うかは個人差があれど)同じくらいのズレのはずですからね。
手っ取り早いのは、
$$
\exp\left[-\left(\dfrac{x-A}{A}\right)^2\right]
$$
にしてしまうことです。
コレなら確かに、
$$
\exp\left[-\left(\dfrac{8-10}{10}\right)^2\right],\;\exp\left[-\left(\dfrac{0.8-1}{1}\right)^2\right]
$$
これはいずれも$${e^{-0.04}=0.9608…}$$になります。
上の結果を見てもわかるように、つまり指数が誤差率の二乗になっているわけです。
さて、四則演算までやりますと、野望として冪乗をやりたくなるのが人情です。
拡張原理の立場からいけば、$${z=x^y}$$なのですから、「だいたいAのだいたいB乗」をやりたかったら、
$$
z=x^y=(A\pm\sqrt{-\log{\alpha}})^{B\pm\sqrt{-\log{\alpha}}}
$$
をすればいいはずです……いいはずです……。
おえっ。なんだこれ。
$${だいたい2^{だいたい3}}$$をグラフにするとこんな感じです。
$${z=1}$$を境にグラフが変わるようですが、これは$${x^y}$$において$${y< 0}$$ということでしょう。
実際$${y}$$軸の対数をとると、
こんな感じで、積の分布に近くなります。
しかしこれ、当然と言えば当然なのですが、メンバーシップ関数の広がりがひどいですね。
さて、以上のようにメンバーシップ関数の演算を色々作ってきましたが、次回はいよいよメンバーシップ関数もファジィにしてみようと思います。