<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>ismailari.com</title>
	
	<link>http://ismailari.com</link>
	<description>İsmail Arı'nın anasayfası</description>
	<lastBuildDate>Thu, 23 May 2013 10:06:48 +0000</lastBuildDate>
	<language>tr-TR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ismailari" /><feedburner:info uri="ismailari" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Gauss hata modeli, en küçük kareler yöntemi ve Moore-Penrose tersi</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/Ae5pDNISUQQ/</link>
		<comments>http://ismailari.com/blog/gauss-hata-modeli-en-kucuk-kareler-yontemi-ve-moore-penrose-tersi/#comments</comments>
		<pubDate>Thu, 23 May 2013 00:58:09 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Teori]]></category>
		<category><![CDATA[en küçük kareler]]></category>
		<category><![CDATA[moore-penrose tersi]]></category>
		<category><![CDATA[yapay öğrenme]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=4218</guid>
		<description><![CDATA[Hatanın Gauss dağıldığını varsaymak ile en küçük kareler yöntemini kullanmanın aslında aynı kapıya vardığını hep duyarız. Bu yazıda bu ilişkiyi gösteriyor ve Moore-Penrose tersinin çıkarımını yapıyoruz.]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-4236" alt="ls" src="http://ismailari.com/wp-content/uploads/2013/05/ls-300x225.png" width="300" height="225" />Hatanın Gauss dağıldığını varsaymak ile en küçük kareler yöntemini kullanmanın aslında aynı kapıya vardığını hep duyarız. Deniz konuyu <a href="http://cliquepotential.blogspot.com/2013/05/gaussianity-least-squares-pseudoinverse.html">çok güzel özetlemiş</a>. Ben de burada yeniden ele alıyorum.</p>
<h3>Gauss hatalı gözlem modeli</h3>
<p>$A$ bir matris, $y$ ve $x$ de uygun boyutlarda birer vektör olsun. $y$'yi ekteki gibi saklı $x$ bileşenlerinin doğrusal dönüşümüne Gauss hata eklenmiş şekilde gözlemlediğimizi varsayalım:<br />
\begin{align}<br />
y = Ax + \eta<br />
\end{align}</p>
<p>$\eta$ için Gauss dağılsın demiştik. Hatanın neden genellikle Gauss dağıldığını varsaydığımızı merak ediyorsanız <a href="http://ismailari.com/blog/cizimlerle-merkezi-limit-teoremi/">merkezi limit teoremi</a> yazısının sondan üçüncü paragrafını okuyabilirsiniz. $I$ birim matrisi göstermek üzere $\eta \sim \mathcal{N}(0,I)$ olsun. Yani hata ortalaması $0$, kovaryansı birim matris olan bir Gauss dağılımından geliyor. $A$ ve $x$'i bildiğimiz taktirde $y$'nin olabilirliği nedir?</p>
<p>\begin{align*}<br />
p(y|x) = \mathcal{N}(y;Ax,I)<br />
\end{align*}</p>
<p>Fakat biz $x$'i bilmiyoruz, bulmak istediğimiz zaten o. O halde $y$'nin, yani gözlemlenen verinin olabilirliği en yüksek yapan $x$'i arıyoruz. Aradığımız $x$ yıldızlı $x$ olsun, $x^*$ ile gösterelim:<br />
\begin{align*}<br />
x^* = \argmax_x p(y|x)<br />
\end{align*}</p>
<p>Bir değeri en büyüklerken kendisi yerine logunu kullanabiliriz:<br />
\begin{align}<br />
x^* &amp;= \argmax_x p(y|x) \nonumber \\<br />
&amp;= \argmax_x \log p(y|x) \nonumber \\<br />
&amp;= \argmax_x \log \mathcal{N}(y;Ax,I) \label{loglik}<br />
\end{align}</p>
<p>Biliyoruz ki,<br />
\begin{align*}<br />
\mathcal{N}(y;Ax,I) = \frac{1}{\sqrt{(2\pi)^d}} \exp\left(-\frac{1}{2} (y-Ax)^T (y-Ax) \right)<br />
\end{align*}<br />
$\log \mathcal{N}(y;Ax,I)$ değerini en büyükleyen $x$'i aradığımızı hatırlayalım. Denklem \eqref{loglik}'yi yeniden yazalım:<br />
\begin{align*}<br />
x^* &amp;= \argmin_x \frac{1}{2} \|y - Ax\|_2^2<br />
\end{align*}</p>
<p>Bu sonuca nasıl vardık? Tanım gereği, $\|y - Ax\|_2 = \sqrt{(y-Ax)^T (y-Ax)}$. Öyleyse, $(y-Ax)^T (y-Ax)$ ile $\|y - Ax\|_2^2$ aynı. Denklemdeki diğer terimler $x$'den bağımsız. Bu sebeple optimizasyon sonucunu etkilemiyorlar.</p>
<h3>En küçük karelerden Moore-Penrose tersine</h3>
<p>Hatayı Gauss kabul edip olabilirliği en büyüklemek ile en küçük kareler yaklaşımının aynı şey olduğunu gördük. Burada bırakmayalım, çözüme devam edelim:</p>
<p>\begin{align*}<br />
x^* &amp;= \argmin_x \frac{1}{2} \|y - Ax\|_2^2 \\<br />
&amp;= \argmin_x (y-Ax)^T (y-Ax) \\<br />
&amp;= \argmin_x y^T y - y^T A x - x^T A^T y + x^T A^T A x \\<br />
&amp;= \argmin_x - y^T A x - x^T A^T y + x^T A^T A x<br />
\end{align*}</p>
<p>Görülüyor ki aslında en küçük değerini bulmaya çalıştığımız basit bir masraf fonksiyonu var:</p>
<p>\begin{align*}<br />
J(x) = - y^T A x - x^T A^T y + x^T A^T A x<br />
\end{align*}</p>
<p>Tam bu noktada matematiğin sihirli değneğini kullanalım. $J(x)$'daki tüm terimler skaler. Dolayısıyla bu terimlerin izleri (<em>trace</em>) de skaler olacak. Unuttuysak hatırlayalım; $\operatorname{Tr}(B)$ işlevi herhangi kare bir $B$ matrisinin köşegenlerinin toplamına eşit. İz işlevinin sihirli değneğinin dokunduğu masraf fonksiyonuna dönelim:</p>
<p>\begin{align*}<br />
J(x) = \operatorname{Tr}(x^T A^T A x) - \operatorname{Tr}(y^T A x) - \operatorname{Tr}(x^T A^T y)<br />
\end{align*}</p>
<p>İz işlevinin şahane özellikleri var, birkaçını kullanacağız<br />
\begin{align*}<br />
\operatorname{Tr}(A) &amp;= \operatorname{Tr}(A^T) \\<br />
\operatorname{Tr}(AB) &amp;= \operatorname{Tr}(BA)<br />
\end{align*}</p>
<p>Son özelliğin tüm dairesel permütasyonlar için genellenebilir olduğunu görün. Örneğin $\operatorname{Tr}(ABC) = \operatorname{Tr}(BCA) = \operatorname{Tr}(CAB)$.</p>
<p>$J(x)$'in en küçük değerini bulmak için türevini almalıyız. İz işlevinin türevine ihtiyaç duyacağız. Doğrusal cebirden hatırlayalım:</p>
<p>\begin{align*}<br />
\frac{\partial \operatorname{Tr}(Ax)}{\partial x} &amp;= A^T \\<br />
\frac{\partial \operatorname{Tr}(Ax^T)}{\partial x} &amp;= A \\<br />
\frac{\partial \operatorname{Tr}(A x x^T)}{\partial x} &amp;= Ax + A^T x<br />
\end{align*}</p>
<p>Bu kuralları uygulayarak $x$'e göre masraf fonksiyonunun kısmi türevini alalım<br />
\begin{align*}<br />
\frac{\partial J(x)}{\partial x} &amp;= \frac{\partial (-\operatorname{Tr}(y^T A x) - \operatorname{Tr}(x^T A^T y) + \operatorname{Tr}(x^T A^T A x))}{\partial x} \\<br />
&amp;= 2A^T A x - 2 A^T y<br />
\end{align*}<br />
ve türevi sıfıra eşitleyelim,<br />
\begin{align*}<br />
2A^T A x = 2 A^T y<br />
\end{align*}</p>
<p>Dolayısıyla,<br />
\begin{align*}<br />
x^* = (A^T A)^{-1} A^T y<br />
\end{align*}</p>
<p>Bulduğumuz $(A^T A)^{-1} A^T$ terimine $A$'nın Moore-Penrose tersi (<em>pseudoinverse</em>) diyoruz.</p>
<p>Ve yazıyı sonlandırırken Deniz'e bu paylaşım için teşekkür ediyoruz.</p>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/Ae5pDNISUQQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/gauss-hata-modeli-en-kucuk-kareler-yontemi-ve-moore-penrose-tersi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/gauss-hata-modeli-en-kucuk-kareler-yontemi-ve-moore-penrose-tersi/</feedburner:origLink></item>
		<item>
		<title>PCA ile ilgili iki soru, iki cevap</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/fjpN0jzRLGQ/</link>
		<comments>http://ismailari.com/blog/pca-ile-ilgili-iki-soru-iki-cevap/#comments</comments>
		<pubDate>Sun, 19 May 2013 21:29:44 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Teori]]></category>
		<category><![CDATA[alıştırma]]></category>
		<category><![CDATA[matlab]]></category>
		<category><![CDATA[pca]]></category>
		<category><![CDATA[soru-cevap]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=4202</guid>
		<description><![CDATA[Bu yazıda PCA ile ilgili değerli okurumuz F. Gökçimen'den gelen iki soruya cevap arıyoruz:

1 - PCA'de kullandığınız matlab kodlarına, princomp komutu alternatif olabilir mi? Farkı nedir?
2 - PCA ile örüntü analizi nasıl yapılıyor? Yani elimizde bir veri seti var diyelim ki. Örüntü analizi için kullanılacak. Verinin bir kısmını PCA, bir kısmını da test için mi kullanmak gerekiyor. Test ve sınıflandırma işlemi nasıl gerçekleştiriliyor?]]></description>
				<content:encoded><![CDATA[<p>Sitede ödevlere cevap vermiyorum. Fakat site içeriği ile ilgili anlaşılamayan konuları aydınlatmayı seviyorum. Değerli okurumuz F. Gökçimen'in sorduğu iki soruya ilişkin cevapları altta bulabilirsiniz. İsterseniz siz de yorum kısmından düşüncelerinizi ekleyebilirsiniz.</p>
<p><em><strong>Soru 1</strong>: PCA'de kullandığınız matlab kodlarına, princomp komutu alternatif olabilir mi? Farkı nedir?</em></p>
<p><strong><em>Cevap</em>:</strong> Sonuç olarak aralarında pozitif/negatif işareti dışında bir fark yok. <code>princomp</code> fonksiyonu daha okunabilir, anlaşılabilir bir fonksiyon. Eğer MATLAB'ınızda yoksa <code>svd</code> ile aynısını kolaylıkla yapabilirsiniz. Örnek üstünden bakalım:</p>
<pre class="prettyprint lang-matlab">load hald;
X = ingredients; % Veri X olsun. Her satırda bir örnek var.
X</pre>
<pre>X =
     7    26     6    60
     1    29    15    52
    11    56     8    20
    11    31     8    47
     7    52     6    33
    11    55     9    22
     3    71    17     6
     1    31    22    44
     2    54    18    22
    21    47     4    26
     1    40    23    34
    11    66     9    12
    10    68     8    12</pre>
<p>Öncelikle halihazırdaki fonksiyonu kullanalım:</p>
<pre class="prettyprint lang-matlab">[pc1,score1] = princomp(X)</pre>
<pre>pc1 =
   -0.0678   -0.6460    0.5673    0.5062
   -0.6785   -0.0200   -0.5440    0.4933
    0.0290    0.7553    0.4036    0.5156
    0.7309   -0.1085   -0.4684    0.4844
score1 =
   36.8218   -6.8709   -4.5909    0.3967
   29.6073    4.6109   -2.2476   -0.3958
  -12.9818   -4.2049    0.9022   -1.1261
   23.7147   -6.6341    1.8547   -0.3786
   -0.5532   -4.4617   -6.0874    0.1424
  -10.8125   -3.6466    0.9130   -0.1350
  -32.5882    8.9798   -1.6063    0.0818
   22.6064   10.7259    3.2365    0.3243
   -9.2626    8.9854   -0.0169   -0.5437
   -3.2840  -14.1573    7.0465    0.3405
    9.2200   12.3861    3.4283    0.4352
  -25.5849   -2.7817   -0.3867    0.4468
  -26.9032   -2.9310   -2.4455    0.4116</pre>
<p>Şimdi kendimiz yazalım. Önce her satırdan ortalamayı çıkaralım. Ardından <code>svd</code> yapalım. Dikkat, burada <code>pc2</code> değişkeni aslında <code>V</code>'ye denk gelen yerde, çünkü örnekler satırlarda. Eğer örnekler sütunlarda olsaydı, <code>[pc2, ~, ~]</code> biçiminde olacaktı.</p>
<pre class="prettyprint lang-matlab">X = X - repmat(mean(X,1), size(X,1), 1);
[~, ~, pc2] = svd(X, 'econ');
score2 = X * pc2</pre>
<pre>pc2 =
    0.0678    0.6460   -0.5673    0.5062
    0.6785    0.0200    0.5440    0.4933
   -0.0290   -0.7553   -0.4036    0.5156
   -0.7309    0.1085    0.4684    0.4844
score2 =
  -36.8218    6.8709    4.5909    0.3967
  -29.6073   -4.6109    2.2476   -0.3958
   12.9818    4.2049   -0.9022   -1.1261
  -23.7147    6.6341   -1.8547   -0.3786
    0.5532    4.4617    6.0874    0.1424
   10.8125    3.6466   -0.9130   -0.1350
   32.5882   -8.9798    1.6063    0.0818
  -22.6064  -10.7259   -3.2365    0.3243
    9.2626   -8.9854    0.0169   -0.5437
    3.2840   14.1573   -7.0465    0.3405
   -9.2200  -12.3861   -3.4283    0.4352
   25.5849    2.7817    0.3867    0.4468
   26.9032    2.9310    2.4455    0.4116</pre>
<p>Dikkat ederseniz işaretler dışında sonuçlar aynı. Bu durum uygulamanız için sorun teşkil etmez.</p>
<p><em><strong>Soru 2:</strong> PCA ile örüntü analizi nasıl yapılıyor? Yani elimizde bir veri seti var diyelim ki. Örüntü analizi için kullanılacak. Verinin bir kısmını PCA, bir kısmını da test için mi kullanmak gerekiyor. Test ve sınıflandırma işlemi nasıl gerçekleştiriliyor?</em></p>
<p><strong><em>Cevap:</em> </strong>PCA boyut indirgemeye yarar. Bu bağlamda, diğer uygulamalar için genellikle önişlem olarak kullanılıyor. Örneğin bağlanım (<em>regression</em>) yapacaksanız çok fazla boyutla uğraşmak yerine öncelikle PCA uygulayıp verinin boyutunu düşürüyorsunuz. Aynı durum sınıflama için de geçerli. Yukarıdaki örnek üstünden bakacak olursak <code>X</code>'teki her örnek normalde 4 boyutlu. <code>score1</code>'in ilk iki sütununu alır, gerisini atarsak her örneğin yeni uzaydaki boyutu 2'ye düşer. Yarı yarıya kâr! Yani sizin yeni örnekleriniz <code>score1</code> ile ifade edilen koordinatlara sahip örnekler. Peki yeni boyut sayısı kaç olmalı. Literatürde genel olarak özdeğerlerin birikimsel olarak %95'ini alacak şekilde boyut sayısı seçiliyor:</p>
<pre class="prettyprint lang-matlab">[pc1,score1, eigvalues] = princomp(X);
cumsum(eigvalues)./sum(eigvalues)</pre>
<pre>ans =
    0.8660
    0.9789
    0.9996
    1.0000</pre>
<p>Görüldüğü üzere, 2 tane koordinatı seçtiğimizde verinin %97.89'unu ifade edebiliyoruz. Bunun yeterli olacağını, gerisinin gürültü olduğunu varsayabiliriz. İllâ ki böyle yapacaksınız diye bir şart yok, isterseniz limiti %98 seçebilirsiniz.</p>
<p>Şimdi eğitim ve test aşamalarında ne yapacağımıza bakalım. PCA'i ifade etmek için temel bileşenlere ve ortalama vektöre ihtiyaç var. Bunları eğitim kümesini kullanarak elde edeceksiniz. Ardından test kümesindeki her örnekten bu ortalama değeri çıkarıp temel bileşenler ile çarpacak ve bu örneklerin indirgenmiş uzaydaki hallerini bulacaksınız. Sonra bağlanım mı yaparsınız, sınıflandırma mı, kullanacağınız hep bu yeni değerler olacak.</p>
<h3><img class="alignright size-full wp-image-4207" alt="alistirma" src="http://ismailari.com/wp-content/uploads/2013/05/alistirma.png" width="195" height="168" />Alıştırma:</h3>
<p>Burada okura bir sınıflandırma alıştırması vereyim. PCA ile temel bir uygulama alıştırması:</p>
<ol>
<li><span style="line-height: 13px;"><a href="http://yann.lecun.com/exdb/mnist/">MNIST</a> elle yazılmış rakam veritabanını indirin.</span></li>
<li>Normalde eğitim kümesinde 50000, test kümesinde ise 10000 adet örnek var. Her örneği düzleştirin ve yeni örnekler 20x20 boyutlu yerine 400x1 boyutlu olsun.</li>
<li>50000 örnek ek teknik kullanmadan işlem yapabilmek için çok fazla. Her bir rakam için 500 adet rastgele örneği alın ve böylece 5000 elemanlık bir eğitim kümesi oluşturun.</li>
<li>PCA uygulayın ve temel bileşenler ile ortalama vektörleri bulun. Sadece %95 birikimsel özdeğeri saklayacak kadar temel bileşeni tutun, gerisini atın.</li>
<li>Eğitim kümesindeki her örneğin indirgenmiş boyutlarını hesaplayın ve saklayın.</li>
<li>10000 test örneğinden her biri için
<ol>
<li>Eğitim kümesindeki örneklere yaptığınız gibi ortalamayı çıkarın ve temel bileşenler ile çarparak boyut indirgeyin.</li>
<li>Eğitim kümesindeki her örneğe olan Öklit uzaklığını hesaplayın. Vektörler 400x1 boyuttan daha az olacağı için işlemler hızlı olacak.</li>
<li>En yakın vektörü tespit edin ve bu test örneğinin etiketini o vektörün etiketine atayın. Yani en yakın vektör 5 rakamına ait  ise sizin gözlemlediğiniz vektör de 5 rakamı olacak.</li>
</ol>
</li>
<li>10000 vektörün kaç tanesinin doğru hesaplandığını bulun.</li>
<li>Aynı işlemi PCA uygulamadan deneyin, farkı görün.</li>
</ol>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/fjpN0jzRLGQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/pca-ile-ilgili-iki-soru-iki-cevap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/pca-ile-ilgili-iki-soru-iki-cevap/</feedburner:origLink></item>
		<item>
		<title>Her ay, kullandığınız özgür bir projeye destek verin</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/b6NUZTNj6hE/</link>
		<comments>http://ismailari.com/blog/her-ay-kullandiginiz-ozgur-bir-projeye-destek-verin/#comments</comments>
		<pubDate>Tue, 14 May 2013 16:14:07 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[destek]]></category>
		<category><![CDATA[özgür yazılım]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=4195</guid>
		<description><![CDATA[Genellikle özgür/ücretsiz yazılımların yaratıcıları bizim desteklerimizle ayakta duruyorlar ve projeyi devam ettiriyorlar. Ben de bundan böyle her ay kullandığım bir özgür kaynağa destek vermeye niyetliyim. Üç-beş lira da olsa destek destektir. Bugün siz de kullandığınız, hayatınıza değer kattığını düşündüğünüz özgür/ücretsiz bir yazılıma destek verin.]]></description>
				<content:encoded><![CDATA[<p>Genellikle özgür/ücretsiz yazılımların yaratıcıları bizim desteklerimizle ayakta duruyorlar ve projeyi devam ettiriyorlar. Ben de bundan böyle her ay kullandığım bir özgür kaynağa destek vermeye niyetliyim. Üç-beş lira da olsa destek destektir. Bugün siz de kullandığınız, hayatınıza değer kattığını düşündüğünüz özgür/ücretsiz bir yazılıma destek verin.</p>

<table id="tablepress-1" class="tablepress tablepress-id-1">
<thead>
<tr class="row-1 odd">
	<th class="column-1"><div>Ay</div></th><th class="column-2"><div>Kullandığım ürün</div></th><th class="column-3"><div>Satınaldığım ürün</div></th><th class="column-4"><div>Destek tutarı</div></th>
</tr>
</thead>
<tbody class="row-hover">
<tr class="row-2 even">
	<td class="column-1">2013-05</td><td class="column-2"><a href="http://musescore.org/">Musescore</a></td><td class="column-3"><a href="https://play.google.com/store/apps/details?id=com.musescore.player&amp;hl=tr">Musescore Player</a></td><td class="column-4">$ 5.18</td>
</tr>
</tbody>
</table>
<!-- #tablepress-1 from cache -->
<img src="http://feeds.feedburner.com/~r/ismailari/~4/b6NUZTNj6hE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/her-ay-kullandiginiz-ozgur-bir-projeye-destek-verin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/her-ay-kullandiginiz-ozgur-bir-projeye-destek-verin/</feedburner:origLink></item>
		<item>
		<title>"Underflow" ve "log-sum-exp" hilesi</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/KhsXjUh1CIg/</link>
		<comments>http://ismailari.com/blog/underflow-ve-log-sum-exp-hilesi/#comments</comments>
		<pubDate>Tue, 14 May 2013 12:25:36 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Teori]]></category>
		<category><![CDATA[log-sum-exp]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=4185</guid>
		<description><![CDATA[Saklı Markov modelleri ile çalışırken "underflow", yani değerlerin bilgisayarda saklanamayacak derecede küçülüp pratikte sıfır olması temel bir uygulama sorunu olarak karşımıza çıkar. Çünkü hesaplamalarda alttakine benzer bir işlem yapmamız gerekir: $$\log\sum\limits_k e^{x_k}$$ $e^{x_k}$ değerlerinin -1000lerde seyrettiğini düşünün. $e^{1000}$ gibi bir sayıyı açıkça hesaplamaya çalışırsak sıfır elde ederiz. Probleme tane tane değil, tümden bakalım. Elimizde 3 [...]]]></description>
				<content:encoded><![CDATA[<p>Saklı Markov modelleri ile çalışırken "underflow", yani değerlerin bilgisayarda saklanamayacak derecede küçülüp pratikte sıfır olması temel bir uygulama sorunu olarak karşımıza çıkar. Çünkü hesaplamalarda alttakine benzer bir işlem yapmamız gerekir:</p>
<p>$$\log\sum\limits_k e^{x_k}$$</p>
<p>$e^{x_k}$ değerlerinin -1000lerde seyrettiğini düşünün. $e^{1000}$ gibi bir sayıyı açıkça hesaplamaya çalışırsak sıfır elde ederiz.</p>
<p>Probleme tane tane değil, tümden bakalım. Elimizde 3 tane değer olsun: -1000, -1005 ve -1010. Bunları işleyelim. $e^{1005}$,  $e^{1000}$'e göre oldukça küçük.  $e^{1010}$ ise daha da küçük. Burada baskın olan  $e^{1000}$ değeri. Yani, en büyük değer baskın görünüyor. En büyük değere $y$ diyelim ve bunu hesaba katarak sihirli değneğimizi kullanalım:</p>
<p>\begin{align}<br />
\log\sum\limits_k e^{x_k}<br />
&amp; = \log\left[\left(\sum\limits_k e^{x_k}\right)e^{-y} e^y \right] \\<br />
&amp; = \log\left[\left(\sum\limits_k e^{x_k}\right)e^{-y}\right] + y \\<br />
&amp; = \log\left[\sum\limits_k e^{x_k - y}\right] + y<br />
\end{align}</p>
<p>Yani öncelikle tüm değerlerden en büyüğünü çıkartacağız (yeni dizilimin en büyük değeri 0 olacak) ve işlemi yaptıktan sonra bu değeri geri ekleyeceğiz.</p>
<p>Fonksiyonumuz çok  basit:</p>
<pre class="prettyprint lang-py">
import numpy as np

def logSumExp(x):
    maxX = np.max(x)
    r = maxX + np.log(np.sum(np.exp(x-maxX)))
    return r
</pre>
<p>Deneyelim:</p>
<pre class="prettyprint lang-py">
r = logSumExp(np.array([-1213, -1214]))  # sonuç: -1212.6867383124818
r2 =  np.log(np.sum(np.exp(np.array([-1213, -1214]))))  # sonuç: -Inf
</pre>
<p>Yöntemimiz sonucu başarıyla hesapladı. Açıkça yaptığımızda ise <em>underflow</em> oldu ve <code>log(0)</code>  hesabı yüzünden -sonsuz sonucu döndü.</p>
<p>Not: Kaynak olarak <a href="http://www.youtube.com/watch?v=-RVM21Voo7Q">şu videoya</a> bakabilirsiniz.</p>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/KhsXjUh1CIg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/underflow-ve-log-sum-exp-hilesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/underflow-ve-log-sum-exp-hilesi/</feedburner:origLink></item>
		<item>
		<title>Haluk Levent - Anlasana</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/ns378Emc0wA/</link>
		<comments>http://ismailari.com/blog/haluk-levent-anlasana/#comments</comments>
		<pubDate>Tue, 07 May 2013 18:26:12 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Müzik]]></category>
		<category><![CDATA[anlasana]]></category>
		<category><![CDATA[haluk levent]]></category>
		<category><![CDATA[nota]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=4151</guid>
		<description><![CDATA[Bugün nota yazmak için çok güzel bir yazılım öğrendim, sizlerle de paylaşayım istedim: Adı MuseScore. Önceden Lilypond'u öğrendiğimde düşüncelerimi aktarmıştım. Hatta Oynaya Oynaya Gelin Çocuklar'ı eklemiştim. Musescore, Lilypond'a göre çocuk oyuncağı. Üstelik notaları dinlemek de çok eğlenceli. Bu işi yapan Sibelius, Finale gibi ücretli programlar olduğunu biliyorum. Musescore özgür ve ücretsiz bir yazılım. Üstelik musescore.com [...]]]></description>
				<content:encoded><![CDATA[<p>Bugün nota yazmak için çok güzel bir yazılım öğrendim, sizlerle de paylaşayım istedim: Adı <a href="http://musescore.org/">MuseScore</a>. </p>
<p>Önceden Lilypond'u öğrendiğimde düşüncelerimi <a href="http://ismailari.com/blog/lilypond-ile-nota-yazimi/">aktarmıştım</a>. Hatta <a href="http://ismailari.com/blog/bir-dunya-birakin-oynaya-oynaya-gelin-cocuklar/">Oynaya Oynaya Gelin Çocuklar</a>'ı eklemiştim. Musescore, Lilypond'a göre çocuk oyuncağı. Üstelik notaları dinlemek de çok eğlenceli. Bu işi yapan Sibelius, Finale gibi ücretli programlar olduğunu biliyorum. Musescore özgür ve ücretsiz bir yazılım. Üstelik <a href="http://musescore.com/dashboard">musescore.com</a> adresinde kullanıcıların paylaştığı tonla hazır eser mevcut. Ben de bugün can sıkıntısına oturdum, Haluk Levent'in en sevdiğim şarkılarından biri olan Beni Biraz Anlasana'nın notalarını ve akorlarını ekledim. Alttaki pencerede hem notaları görebilir hem de dinleyebilirsiniz. Eğer düzgün görünmezse şarkı <a href="http://musescore.com/user/89917/scores/105140">bu adreste</a>. İsterseniz indirebilir, sesinize/zevkinize göre transpose edebilir veya dilediğinizce değiştirebilirsiniz.</p>
<p><iframe src="http://musescore.com/user/89917/scores/105140/embed" height="400" width="100%" frameborder="0"></iframe></p>
<p>Bir de akordeon ile çalıp Youtube'a ekledim. Eğer düzgün görüntülenmezse o da <a href="http://youtu.be/40EyAUQekL0">bu adreste</a>.</p>
<p><iframe src="http://www.youtube.com/embed/40EyAUQekL0" height="300" width="100%" allowfullscreen="" frameborder="0"></iframe></p>
<p><em>Not: Akor düzenlemesi, N. Gül'e aittir. Ezgiyi kulaktan yazdım. Hatalar olabilir.</em></p>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/ns378Emc0wA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/haluk-levent-anlasana/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/haluk-levent-anlasana/</feedburner:origLink></item>
	</channel>
</rss>
