anlak.com
Showing posts with label matematik. Show all posts
Showing posts with label matematik. Show all posts

Kısıtları türevlenebilirleştirmece(!) numarası

, Friday, 6 June 2014
Diyelim ki eşitsizlik biçiminde ifade edebildiğiniz bazı kısıtlarınız var ve bu eşitsizlikleri sağlayacak bir çözüm arayışındasınız. Bu yazıda bunu elde etmeyi sağlayacak bir numara göstereceğim.

Problemimizi daha iyi tanımlayalım: öyle bir $x$ arıyoruz ki $g(x) \le 0$ olsun. $g(x)$ sürekli ve türevlenebilir olsun bir de. Genelde elimizdeki eşitsizlikleri biraz cebirsel oynamayla $g(x) \le 0$ şeklinde yazabiliriz.

Şimdi, $t \le 0$ eşitsizliğini sağlayan bütün $t$ değerlerinin $\max(0, t) = 0$ eşitliğini de sağladığını farkedelim. Bu demek oluyor ki  $t \le 0$ gördüğümüz her şeyi $\max(0, t) = 0$ gibi değerlendirebiliriz.

Yalnız $\max(0, t)$ ifadesi pek yumuşak değil, o yüzden karesini alıp yumuşatalım. Gene $t \le 0$ eşitsizliğini sağlayan $t$ değerleri $\max(0, t)^2 = 0$ eşitliğini sağlar.

Geldik son adıma, yukarıda bahsettiğimiz ifadelerde $t$ yerine $g(x)$ koyup şu problemi çözelim:
$$
\text{minimize } \max(0,g(x))^2
$$
Yukarıdaki problemde hedef fonksiyonun değeri 0 olduğunda istedğimiz bir çözüm bulunmuş olur. Bunu bulmak için de en basitinden gradient descent gibi bir yöntem kullanabiliriz, ne de olsa hedef fonksiyonumuz mis gibi türevlenebilir. Elbette yerel minimalara takılma şansınız var, hatta çözüme hiç bir zaman ulaşamayabilirsiniz.

Özetle, elinizdeki eşitsizlikleri gösterdiğim numara ile türevlenebilir bir fonksiyon halinde yazabilirsiniz.

Örnek Uygulama

Tarif ettiğim numarayı oyuncak bir problem üzerinde göstereyim, biraz balyozla sinek avlamaya benzeyecek ama daha anlasilir olacak. Verilen bir alana, belli bir boyuttaki dikdörtgeni nasıl sığdırabileceğimize bakalım. Dikdörtgeni döndürmek serbest. Aşağıdaki çizimde problemi tarif etmeye çalıştım.



Diyelim ki elinizde $\Omega=\{x\in \mathbb{R}^2 \mid f_j(x)\le 0, j=1,\dots,m \}$ tanımlanmış bir alan olsun. Elimizde de $(c, w, h, \theta)$ ile parametrize ettiğimiz bir dikdörtgen olsun. $c$, dikdörtgenin merkezinin konumu, $w$ ve $h$ genişliği ve yüksekliği, $\theta$ da döndürme açısı olsun, ayrıca kolaylık olsun diye $w$ ve $h$ bize önceden verilmiş olsun. Problemi ben uydurduğum için buna hakkım olsun :)

Dikdörtgeni verilen alanın içine sığdıracak $(c, \theta)$ arıyoruz. Dikdörtgenin alanın içinde olabilmesi için, 4 köşesinin de alanın içinde olması lazım, yani:
$$
f_j(p^i) \le 0 \text{ for all } j=1,\dots\,m \text{ and } \\ i=\{\text{SOLÜST, SAĞÜST, SOLALT, SAĞALT}\}
$$
Dikdörtgenin bir köşesinin ifadesini yazalım, diğer köşeler de benzer şekilde yazılabilir:
$$
p^{\text{SOLÜST}}=c+R(\theta) \begin{bmatrix} -0.5 w \\ -0.5 h \end{bmatrix}
$$
Yukarıdaki ifadede $R(\theta)$ döndürme matrisi, yani $R(\theta) = \left[\begin{smallmatrix}
cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta)
\end{smallmatrix} \right]$.

Şimdi, en başta bahsettiğim dönüşüm numarasını uygularsak problemimiz şu biçime dönüşür:
$$
\text{minimize} \sum_j \sum_i \max(0,f_j(p^i))^2
$$
Ben örneğimiz için döndürülmüş bir elips olan tek bir $f(\cdot)$ seçtim ve gradient descent ile çözdüm:
$$
f(x, y) = \frac{((x-2)\cos(\alpha) + (y-4)\sin(\alpha))^2}{4} + \frac{((x-2)\sin(\alpha) - (y-4)\cos(\alpha))^2}{16} - 1;
$$

Türevleri almak için MATLAB'ın sembolik kütüphanesini kullandım, bu işi ilk defa yaptığım için çok iğrenç bir kod oldu. Kötü kodlarımı paylaşmaya utandığımdan buraya koymadım. Aşağıda gradient descent algoritmasının bazı adımlarını görebilirsiniz:


Yazdığım yazılarda gittikçe anlaşılma derdimi yitirdiğimi görüyorum. Umarım oralarda hala beni anlayan birileri vardır :)

Bir başka hileli para sorusu

, Friday, 2 November 2012
Geçenlerde bir arkadaşım ilginç bir soru sordu, Bayesçi çıkarımın nasıl işlediğine dair güzel ve sade bir örnek olduğu için hoşuma gitti. Soru basit görünmesine rağmen çözümü karmaşık işlemler gerektiriyor. Soru şu:
Hileli bir para $N$ kere atılmış ve 4 kere tura gelmiş. Tura gelme olasılığı $q$ ise $N$'in alabileceği en olası değer nedir?
Benim cevabım da şu şekilde. $q^4(1-q)^{N-4}$ ilk 4 atışta tura gelme olasılığıdır, ve 4 adet tura gelen kombinasyonların sayısı da ${N \choose 4}$. Yani $N$ atışta 4 kere tura gelme olasılığı: $$ {N \choose 4} q^4(1-q)^{N-4} $$ Bu ifadeyi (hedef fonksiyonumuzu) maksimize edecek $N$ değerini arıyoruz. Usulüne uygun yazarsak: $$ \newcommand{\argmax}[1]{\arg\,\max\limits_#1\,} N^* = \argmax{N}{N \choose 4} q^4(1-q)^{N-4} $$ Normalde en büyük/küçük değeri aldığı yeri bulmak için $N$ye göre türev alıp sıfıra eşitleriz. Fakat bu ifadenin türevini alması zor. Bu yüzden ifadenin ilkin $\log$unu alıp ardından türevini alacağız. $\log$ monoton artan bir fonksiyon olduğundan maksimumun nerede olduğu değişmeyecektir. Ayrıca toplamdaki $N$ içermeyen terimlerden de kurtulabiliriz. Böylece aşağıdaki ifadeyi elde ederiz: $$ \begin{align*} N^* &= \argmax{N} \log{N \choose 4} + 4\log(q) + (N-4)\log(1-q) \\ N^* &= \argmax{N} \log(N) + \log(N-1) + \log(N-2) + \log(N-3) +\\ &\qquad{} (N-4)\log(1-q) \end{align*} $$ Şimdi $N$ye göre türev alıp sıfıra eşitlersek: $$ \frac1{N} + \frac1{N-1} + \frac1{N-2} + \frac1{N-3} + \log(1-q) = 0 $$ Bu çok daha güzel görünüyor. $N$ için kapalı yapıdaki çözüm oldukça korkunç ve çirkin, buradan görebilirsiniz. Aslında nümerik bir yöntem ile çözüm kolay, bu türde denklemleri çözmek için Newton yöntemi gibi birsürü nümerik yöntem bulunmakta. $N$in 4 kökü var, paranın en az 4 kere atılmış olması gerektiğini bildiğimizden 3'ten büyük kökü seçeriz.

Son olarak, $N$ ayrık (discrete) olmasına rağmen sürekliymiş gibi işlemleri yaptık. Bu yüzden denklemin çözümü olarak örneğin 9.4127 gibi küsüratlı bir rakam elde edeceğiz. Aşağıya ve yukarıya yuvarlayıp, hangi değerin -9 ya da 10un- bizim hedef fonksiyonumuzu maksimize ettiğini kontrol etmeliyiz.

Örneğin adil bir para için, yani $q=0.5$ için çözersek $N\approx 7.48449$ elde ederiz. 7 ve 8i ayrı ayrı hedef fonksiyonumuzda yerine koyarsak iki değerin de eşit olduğunu görürüz. Yani 7 de 8 de eşit derece olası.

There is also English version of this post.

Temel Bileşenler Analizi (PCA) çıkarımı

, Sunday, 5 February 2012
Sevgili dostum İsmail Arı şuradaki yazısında PCA hakkında kapsamlı ve güzel bilgiler veriyor. İsmail yazısında kovaryans matrisini diyagonal hale getirecek dönüşüm üzerinden çıkarımı yapıyor. Ben problemi farklı bir açıdan ele alıp, PCA yapmak için neden özvektörleri bulmamız gerektiğini varyansın maksimizasyonu ile göstereceğim. Elimden geldiğince basit anlatmaya çalışacağım, mümkün olduğunca az süslü hatta Yunan alfabesinden olmayan harfler kullanacağım, buna rağmen anlamak için konu hakkında birazcık altyapıya sahip olmanız gerekebilir. Yine de yazının uzunluğu gözünüzü korkutmasın, yeterince anlaşılır olmak adına bilerek fazla açıklama yaptığımdan uzadı, içeriğin yeterince basit olduğunu umuyorum.

İlkin problemimizi tanımlayalım. Elimizde bir kısım veri var ve öyle bir dönüşüm yapmak istiyoruz ki, bu dönüşümün sonunda elimizdeki örnekler birbirinden mümkün olduğunca ayrılmış, dağılmış, saçılmış olsun.

Problemi matematiksel olarak ifade edelim. Elimizde $n$ adet veri örneği olsun. Her sütun bir veri örneğine denk gelecek şekilde $X$ matrisini oluşturalım. Dönüşüm matrisimiz $w$ olsun. Bu dönüşümün ($w^TX$) sonunda saçılımın en fazla olmasını istiyoruz.


İlkin tek boyuta indirecek dönüşümü $w_1$ ele alalım. Bu dönüşümün sonucunda elde ettiğimiz yeni değişkenlere de $z_1$ diyelim. Öyle bir dönüşüm arıyoruz ki, $z_1$ için saçılımın en fazla olmasını istiyoruz:
$$
\arg\max\limits_{w_1} \; \text{Var}(z_1)
$$
Başka bir deyişle:
$$
\arg\max\limits_{w_1} \; \text{Var}(w_1^TX)
$$
$$
\newcommand{\E}{\mathop{\mathbb E}}
\renewcommand{\< }{\left<}
\renewcommand{\>}{\right>}
\newcommand{\Var}{\text{Var}}
\newcommand{\CovSym}{\mathbf{\Sigma}}
$$
Varyansın tanımını hatırlayalım, $\< \cdot\>$ beklenen değer operatörü olmak üzere:
$$
\Var(x) = \< (x-\mu)^2\>
$$
İzdüşümden sonraki varyansı yerine koyalım, ortalamanın da aynı dönüşüme tabi olduğuna dikkatinizi çekerim:
$$
\begin{align*}
\Var(w^TX) &= \< (w^TX-w^T\mu)^2\> \\
&= \< w^T(X-\mu)(X-\mu)^Tw \> \\
&= w^T \< (X-\mu)(X-\mu)^T \> w\\
\end{align*}
$$
$\< (X-\mu)(X-\mu)^T\>$ ifadesinin kovaryansa, $\CovSym$, karşılık geldiğini biliyoruz (bilmiyorsak bakıp öğreniyoruz), o halde:
$$
\Var(w^TX) = w^T\CovSym w
$$
Bu bulduğumuzu yerine koyduğumuz zaman, esas problemimiz şu hale gelmiş oldu:
$$
\arg\max\limits_{w_1} \; w_1^T\CovSym w_1
$$
Sözle ifade edecek olursak, $w_1$ yerine hangi değeri koyarsak $w_1^T\CovSym w_1$ ifadesi en büyük değerine ulaşır?

İfademize bakacak olursak, $w_1$ yerine sonsuz büyük/uzun bir değer koyarsak $w_1^T\CovSym w_1$ ifadesi en yüksek değerini alır. Bu sonuç pek işimize yaramıyor maalesef, elimize hiçbir şey geçmemiş oldu, o yüzden işimize yarayabilecek bir sonuç üretecek şekilde yeniden ifade etmeye çalışalım problemimizi.

$w_1$in uzunluğu değil, yönü önemli bizim için, çünkü onun üzerine sadece izdüşüm alıyoruz. 1 birim ya da 99 birim uzunluğunda olması bizi ilgilendirmiyor. O yüzden problemimizin düzgün bir çözümü olması için $w_1$in uzunluğunu 1 alalım:
$$
||w_1|| = 1
$$
Bu kısıtımızı esas ifademize yedirmemiz lazım. Bunu yapmanın yolu Lagrange Çarpanı yöntemini kullanmak, şuradaki yazımda bundan bahsetmiştim.
$$
\arg\max\limits_{w_1} \; w_1^T\CovSym w_1 - \lambda (||w_1|| - 1)
$$
Başka bir deyişle:
$$
\arg\max\limits_{w_1} \; w_1^T\CovSym w_1 - \lambda (w_1^T w_1 - 1)
$$
İfadeyi en yüksek ya da düşük yapan $w_1$ değerini bulmak için, $w_1$e göre türev alıp sıfıra eşitleriz (kalkülüsten hatırlarsınız):
$$
(\CovSym + \CovSym ^T) w_1 - 2 \lambda w_1 = 0
$$
Kovaryans matrislerinin özelliğinden $\CovSym = \CovSym^T$ olduğunu biliyoruz. Bunu kullanıp ifadeyi düzenlersek:
$$
\begin{align*}
2 \CovSym w_1 - 2 \lambda w_1 = 0\\
\CovSym w_1 = \lambda w_1
\end{align*}
$$
elde ederiz ki, bu da tam olarak $w_1$in $\CovSym$'in özvektörü olduğunun ifadesidir. Kabaca hatırlatayım, $A$ bir matris, $\lambda$ bir skaler ve $x$ bir vektör ve $x$, $Ax = \lambda x$ sağlıyor ise $x$'e $A$'nın özvektörü denir.

Peki acaba $w_1$, $\CovSym$'in hangi özvektörü? Bunu bulmak için bulduğumuz sonucu esas problemimiz olan $w_1^T \CovSym w_1$ ifadesinde yerine koyalım, neticede bu ifadeyi maksimize etmeye çalışıyorduk en başından:
$$
\begin{align*}
w_1^T \CovSym w_1 &= w_1^T \lambda w_1 \\
&= \lambda w_1^T w_1\\
&= \lambda ||w_1||\\
&= \lambda
\end{align*}
$$
buluruz. $||w_1||$ uzunluğunun 1'e eşit olduğu bilgisini kullandık son adımda. Elde ettiğimiz sonuç ne demek? Şu demek: Esas ifademizi maksimize etmek istiyorsak $\lambda$'yı maksimize etmeliyiz. $\lambda$'nın da en büyük olması, en büyük özdeğer olduğu durumdur.

Sonuç olarak, ilk izdüşüm alacağımız yön, verinin kovaryans matrisinin en büyük özdeğerine denk düşen özvektör olarak seçilmelidir.

İkinci ve daha sonraki izdüşümler de benzer bir yolla bulunursa bunların da sırasıyla ikinci ve daha sonraki özdeğerlere denk düşen özvektörler olması gerektiği bulunabilir. Çıkarımı yaparken dikkat edilmesi gereken nokta, bir sonraki izdüşümleri yaparken bir önceki bulduğunuz yöne dik olmaları gerektiğidir, yani $w_1 \cdot w_2 = 0$. Bunu da Lagrange çarpanı olarak ifadenize eklemeniz gerekir.

Dikkat edilmesi gereken önemli noktalardan biri de, tüm bunları yaparken, verinizin ortalamasının $0$ olması gerekir, PCA öncesinde ve sonrasında bu gerekli dönüşümü yapmanız lazım.

Lagrange Çarpanı - Değişik bir bakış

, Wednesday, 19 October 2011
Lagrange Çarpanı yöntemi genelde 2 fonksiyonun gradyanlarının birbirine paralel olmasıyla açıklanır. Bu yazıda maksimizasyon/minimizasyon problemlerinde Lagrange Çarpanları kullanımının biraz daha garip fakat daha kolay bir çıkarımından bahsedeceğim.

Diyelim ki elimizde bir $f(x, y)$ fonksiyonu var ve bu fonksiyonun aldığı en büyük değeri bulmaya çalışıyoruz. Matematiksel olarak ifade edecek olursak:
$$
\max\limits_{x,y} f(x,y)
$$
Ve diyelim ki çözümün $g(x, y)=c$ gibi bir koşulu da sağlaması gereksin. Eğer böyle bir kısıtımız olmasaydı $f()$in kısmi türevlerini alıp sıfıra eşitlerdik ve çözüme ulaşırdık (fonksiyon limitlerde sonsuza büyümüyorsa tabi).


Şimdi bu kısıtımızı denkleme yedirelim. Maximize edeceğimiz fonksiyona $0$ değerini eklemek ya da çıkartmak ifadeyi maximize eden değerleri değiştirmeyecektir. Yani:
$$
\max\limits_{x,y} f(x,y) = \max\limits_{x,y}  \left[ f(x,y) + 0 \right]
$$
Aynı şekilde sıfırın herhangi bir katını da ekleyip çıkarmam sonucu değiştirmeyecektir:
$$
\max\limits_{x,y} f(x,y) = \max\limits_{x,y}  \left[ f(x,y) + k\cdot 0 \right]
$$
$g(x, y)=c$ olan kısıtımızı da düzenlersek  $0=g(x, y)-c$ elde ederiz. Sıfırı yerine koyarsak üstteki denklemde:
$$
\max\limits_{x,y} f(x,y) = \max\limits_{x,y}  \left[ f(x,y) + k(g(x, y)-c) \right]
$$
Elde ettiğimiz ifade Lagrange Çarpanları ifadesi; $k$lar da Lagrange Çarpanı denilen şeyler. Kısıtmızı esas başladığımız maksimizasyon problemine Lagrange Çarpanlarını kullanarak yedirmiş olduk. Şimdi bu elde ettiğimiz yeni denklemin x'e ve y'ye göre kısmı türevini alıp sıfıra eşitleyip kısıtımıza göre en büyük aldığı değeri bulabiliriz.

Garip bir fenomen: Benford Kanunu

, Sunday, 27 July 2008
Gerçek hayattan alınmış sayısal verilerin ilk basamaklarının dağılımının beklenenin aksine düzenli olmadığını söylesem ne yapardınız? Ne yapacaksınız, "hmmm" diyip konuyu daha detaylı anlatmamı beklersiniz en fazla.

Örneğin Tanzanya'daki şehirlerin nüfuslarını listelediğimizi düşünün. Benford kanununa göre bu listedeki sayıların ilk basamağının 1 olma olasılığı, diğer rakamlardan bi' tanesi olma olasılığından daha büyüktür. Hatta gerçek hayattan alınmış verilerin ilk basamağındaki rakamların dağılımı şu şekildedir der:
dp
130.1%
217.6%
312.5%
49.7%
57.9%
66.7%
75.8%
85.1%
94.6%

Başka bir şekilde gösterecek olursak, doğal bir veride ilk basamakta rakamların görülme sıklığı şu şekildedir:
Böylesine enteresan bir olayın geçerliliğini bir örnekle inceleyelim. Vikipedi'deki Türkiye'deki göller başlığındaki göllerin yüzölçümlerinin ilk basamaklarının görülme sıklığını yukarıda çizdiğimiz grafik gösterelim (mavi: Benford beklenen değeri, kırmızı: Türkiye'deki göller verisi ):
Bir de göllerin yüzölçümüyle ilgili verinin logaritmik trend çizgisini* çizelim ki ilişkiyi daha iyi anlayalım:
Ne acayip di mi? Şimdi aynı işlemi Türkiye'deki illerin nufusu için yapalım:
Hahah çok eğlenceli. Peki hayatta bunun pratik uygulaması neler olabilir? Basitçe bir veri setinin insan üretimi olup olmadığını anlayabiliriz bu sayede. Vergi kaçıranları saptamak için muhasebe kayıtlarına basit bir analiz yapılıp şüpheli adaylar çıkartılabilir[1] ya da tam tersi vergi kaçırırken daha gerçekçi olsun diye sayıları Benford kanuna uyacak şekilde seçebiliriz. Hatta bir fotoğrafa sonradan müdahele edilip edilmedigini de benzer bir yolla anlayabiliriz.

Ek: Memin'in orjinal fikri olarak, aynı işlemi bilgisayarımda çalışan işlemlerin bellek kullanım değerlerine uyguladım. Sonuç gene şaşmadı. Her zamanki gibi mavi çizgi beklenen değer, kırmızı çizgi gerçek hayattan elde ettiğim veri.

* trend/eğilim çizgisi: Veriye en iyi şekilde uyan çizgi. elle de çizebileceğiniz gibi, Excel benzeri modern hesaplama araçları hatayı en aza indirecek biçimde bu işi sizin için yapar. Sadece bu terim başlı başına bir yazı konusu olabilir, meraklısına anahtar kelime: Linear Regression
  1. Mark J. Nigrini (May). "I've Got Your Number". Journal of Accountancy.