<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Sevity Blog</title>
    <link>https://sevity.tistory.com/</link>
    <description>sevity@ymail.com
github: https://github.com/sevity
youtube: https://www.youtube.com/user/linowmik</description>
    <language>ko</language>
    <pubDate>Thu, 9 Jul 2026 07:01:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sevity</managingEditor>
    <image>
      <title>Sevity Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/2835757/attach/0a44fcf8f43849958f46dd61e32551d5</url>
      <link>https://sevity.tistory.com</link>
    </image>
    <item>
      <title>확률론 기초: 기대값, 분산, 표준편차, 공분산, 상관계수</title>
      <link>https://sevity.tistory.com/452</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;기대값&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;E라는 기호가 보이면 기대값이란 의미이고, 평균이라고 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unbiased 인 경우는 일반적인 평균 구하듯이 더해서 n으로 나누면 되는데..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 이벤트가 일어날 확률이 다른 경우는 다음처럼 다소 복잡해 보이는 정의가 되...지만 그리 어려울 것은 없다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/meRiJ/dJMcagMWVT1/TOMJGb9AkYOr28m0IK81Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/meRiJ/dJMcagMWVT1/TOMJGb9AkYOr28m0IK81Dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/meRiJ/dJMcagMWVT1/TOMJGb9AkYOr28m0IK81Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmeRiJ%2FdJMcagMWVT1%2FTOMJGb9AkYOr28m0IK81Dk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgm7ZQ/dJMcad3Di9y/ck1kUae633Qy4FaTRwVV0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgm7ZQ/dJMcad3Di9y/ck1kUae633Qy4FaTRwVV0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgm7ZQ/dJMcad3Di9y/ck1kUae633Qy4FaTRwVV0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgm7ZQ%2FdJMcad3Di9y%2Fck1kUae633Qy4FaTRwVV0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;표본공간&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본공간은 종종 S, &amp;Omega; 또는 U로 표기되며, 실험 또는 임의 시도의 모든 가능한 산출들의 집합이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 동전을 던지는 실험에서 표본 공간은 {앞면, 뒷면}이다. 6면 주사위를 던지는 실험에서 표본 공간은 {1, 2, 3, 4, 5, 6}이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;확률공간 probability space&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doiz1B/dJMcabSiFiz/Nu4YG93F4vRzxsBvg7MeW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doiz1B/dJMcabSiFiz/Nu4YG93F4vRzxsBvg7MeW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doiz1B/dJMcabSiFiz/Nu4YG93F4vRzxsBvg7MeW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdoiz1B%2FdJMcabSiFiz%2FNu4YG93F4vRzxsBvg7MeW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 측도가 1인 측도 공간 ( P(S) = 1 이라는 의미인듯 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(S, B, P)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S : 표본 공간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B : S의 부분집합으로 이루어진 시그마 필드, 아래 확률 함수의 정의역이 된다. 각 원소를 사건(event)라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;P : B에서 정의된 확률 함수... 즉 B의 치역이 되며 범위는 [0, 1]이다. B의 각 원소별로 확률을 구해놓은걸 말하는듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 확률공간의 정의역 B를 시그마필드로 하는지는 아래 링크 참조..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://hanmaths.tistory.com/56&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://hanmaths.tistory.com/56&lt;/a&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;시그마 필드(가측 공간)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sigma-algebra, &amp;sigma;-field, sigma-field, measurable space 대 비슷한 말...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;sigma;-field (sigma field)는는 공집합이 아니면서 가산번의 합집합, 가산번의 교집합, 그리고 여집합에 대해 닫혀있는 집합 Sㅇ의 부분집합의 모임을 뜻한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러니깐 원래 S의 부분집합을 모아놓은 것이면서, 원소끼리 합집합, 교집합, 여집합을 해도 닫혀있으면 필드라는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 주사위 예에서 보면 {짝수}, {홀수}를 합집합하면 S전체집합 나오고 교집합하면 공집합 나오는데 그것들도 다 원소로 포함되어 있으니 필드라고 하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필드와 시그마 필드 차이는 유한번 연산이냐 가산번 연산이냐인데 내가 관심있는 범위내에서는 크게 중요하지 않은것 같다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 주사위를 던져 짝수냐 홀수냐를 가리는 경우라고 했을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그때의 확률 공간 (S, B, P)는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S = {1, 2, 3, 4, 5, 6}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B = {&amp;phi;,S,{짝수},{홀수}}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;P : P(&amp;phi;)=0. P(S)=1, P({짝수})=1/2, P({홀수})=1/2&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;분산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 E(기대값)랑 X(확률변수)를 이해하고 나면 드디어 분산의 다음 정의를 이해할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \begin{align} \operatorname{Var}(X) &amp;amp;= \operatorname{E}\left[(X - \operatorname{E}[X])^2\right] \\ \end{align} \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관측값과 평균의 차이를 제곱한 값을 평균낸 것.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WGkMm/dJMcagMWVT2/dMkcZkOaXUbcGAV9CN5x60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WGkMm/dJMcagMWVT2/dMkcZkOaXUbcGAV9CN5x60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WGkMm/dJMcagMWVT2/dMkcZkOaXUbcGAV9CN5x60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWGkMm%2FdJMcagMWVT2%2FdMkcZkOaXUbcGAV9CN5x60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균값의 선형성으로부터 다음과 같은 식을 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \begin{align} \operatorname{Var}(X) &amp;amp;= \operatorname{E}\left[(X - \operatorname{E}[X])^2\right] \\ &amp;amp;= \operatorname{E}\left[X^2 - 2X\operatorname{E}[X] + (\operatorname{E}[X])^2\right] \\ &amp;amp;= \operatorname{E}\left[X^2\right] - 2\operatorname{E}[X]\operatorname{E}[X] + (\operatorname{E}[X])^2 \\ &amp;amp;= \operatorname{E}\left[X^2 \right] - (\operatorname{E}[X])^2 \end{align} \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 식은 실제로 분산을 구할 때 자주 사용된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;표준편차&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;간단 정의&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준편차는 $\sigma$로 표시하고 $\sqrt{분산}$ 이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정의&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 모집단의 표준편차는 $\sigma(시그마)$로, 표본의 표준편차는 S(에스)로 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확률변수 X의 표준 편차 $\sigma$ 는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\sigma = \sqrt{\operatorname{E}(X-\operatorname{E}(X))^2} = \sqrt{\operatorname{E}(X^2) - (\operatorname{E}(X))^2}$&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공분산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2개의 변수에 대한 공통분산이라는 의미로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실수값을 지니는 2개의 확률변수 X와 Y에 대해서 각 기대값(평균)이 다음과 같을때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$E(X)=\mu,E(Y)=\nu$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공분산은 아래와 같이 나타낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\operatorname{Cov}(X, Y) = \operatorname{E}((X - \mu) (Y - \nu))$&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;상관계수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 공분산 정의로 부터 상관계수는 다음과 같이 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \begin{align} \rho_{X,Y}= \frac{\operatorname{cov}(X,Y)}{\sigma_X \sigma_Y} \end{align} \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ \operatorname{cov}$ 는 공분산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ \sigma_X $ 는 확률변수 X의 표준편차&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공분산이 각 변량의 단위에 의존하게되어 변동 크기량이 모호하므로,공분산에다가 각 변량의 표준편차를 나누어주어 `정규화`시킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-1보다 크거나 같고 1보다 작거나 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxu8OX/dJMcagMWVT3/2MKkO25qeG2eBAdjwwjVk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxu8OX/dJMcagMWVT3/2MKkO25qeG2eBAdjwwjVk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxu8OX/dJMcagMWVT3/2MKkO25qeG2eBAdjwwjVk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdxu8OX%2FdJMcagMWVT3%2F2MKkO25qeG2eBAdjwwjVk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>AI, ML</category>
      <category>기대값</category>
      <category>분산</category>
      <category>상관계수</category>
      <category>표준편차</category>
      <category>확률론</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/452</guid>
      <comments>https://sevity.tistory.com/452#entry452comment</comments>
      <pubDate>Sun, 5 Jul 2026 04:05:10 +0900</pubDate>
    </item>
    <item>
      <title>Android 화면 회전 처리: onCreate 재호출과 onConfigurationChanged 기준</title>
      <link>https://sevity.tistory.com/424</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아무처리 안해도 화면 돌아가는데 반응은 한다. 그런데 매번 Activity의 onCreate()가 다시 불리는 구조.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 onCreate()가 매번 불리는게 싫다면 &lt;a href=&quot;http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-%ED%99%94%EB%A9%B4-%EC%A0%84%ED%99%98%EC%8B%9C-Activity-%EC%9E%AC%EC%83%9D%EC%84%B1-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt; 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면 전환 이벤트를 처리하고 싶다면 onConfigurationChanged()를 overide하면 되는데 &lt;a href=&quot;http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-Activity-%EA%B0%80%EB%A1%9C-%EC%84%B8%EB%A1%9C-%EB%AA%A8%EB%93%9C-%EC%A0%84%ED%99%98-%EC%B2%98%EB%A6%AC-%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt; 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단!, 위 링크대로 하면 onConfigurationChanged()가 안불리고, &lt;a href=&quot;http://stackoverflow.com/questions/5620033/onconfigurationchanged-not-getting-called&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;에 있는대로 API level 13이상에서는 screenSize를 추가 해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 landscape용 화면 xml을 별도로 만들어 주면 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://programmerguru.com/android-tutorial/android-landscape-layout-example/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt; 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스코드 상에서 현재의 orientation을 알아오는데는 다음처럼 하면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(상수값을 직접 만들어 써야해서 조금 지저분 하다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(참고로 ORIENTATION_180으로는 핸드폰 돌려도 들어오지 않았다.)&lt;/p&gt;
&lt;pre class=&quot;d&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;text&quot;&gt;&lt;code&gt;
final int ORIENTATION_0 = 0;
final int ORIENTATION_90 = 1;
final int ORIENTATION_180 = 2;
final int ORIENTATION_270 = 3;

Display display = ((WindowManager)mc.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();
switch (orientation)
{
  default:
  case ORIENTATION_0: // Portrait
    //dostuff
	  System.out.println(&quot;orientation ORIENTATION_0&quot;);
    break;
  case ORIENTATION_90: // Landscape left
    //do stuff
	  System.out.println(&quot;orientation ORIENTATION_90&quot;);
    break;
  case ORIENTATION_180: // Upside down.
    //do stuff
	  System.out.println(&quot;orientation ORIENTATION_180&quot;);
    break;
  case ORIENTATION_270: // Landscape right
    //do stuff
	  System.out.println(&quot;orientation ORIENTATION_270&quot;);
    break;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조할 만한 링크는 &lt;a href=&quot;http://stackoverflow.com/questions/4298824/android-universal-landscape-check&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt; 이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;emulator&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AVD(emulator) portrait/landscape 전환 : Ctrl + F11&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 2.3이나 4.4버전의 경우는 화면 전환시 버그가 있다고 한다. (나도 경험)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/questions/17964833/android-emulator-not-rotating-to-landscape&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;&lt;/p&gt;</description>
      <category>Programming</category>
      <category>Activity</category>
      <category>Android</category>
      <category>lifecycle</category>
      <category>Orientation</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/424</guid>
      <comments>https://sevity.tistory.com/424#entry424comment</comments>
      <pubDate>Tue, 2 Jun 2026 01:47:15 +0900</pubDate>
    </item>
    <item>
      <title>Python 디스크립터 이해하기: __get__, __set__, 속성 접근 제어</title>
      <link>https://sevity.tistory.com/366</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;descriptor&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; __get__, __set__, and __delete__. If any of those methods are defined for an object, it is said to be a descriptor.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; descriptors only work for new style objects and classes.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;__get__, __set__ 둘다 가진넘을 data descriptor라고 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;__get__ 하나만 가진넘은 non-data descriptor라고 한다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;
class RevealAccess(object):
    &quot;&quot;&quot;A data descriptor that sets and returns values
       normally and prints a message logging their access.
    &quot;&quot;&quot;

    def __init__(self, initval=None, name='var'):
        self.val = initval
        self.name = name

    def __get__(self, obj, objtype):
        print 'Retrieving', self.name
        return self.val

    def __set__(self, obj, val):
        print 'Updating' , self.name
        self.val = val

&amp;gt;&amp;gt;&amp;gt; class MyClass(object):
    x = RevealAccess(10, 'var &quot;x&quot;')
    y = 5

&amp;gt;&amp;gt;&amp;gt; m = MyClass()
&amp;gt;&amp;gt;&amp;gt; m.x
Retrieving var &quot;x&quot;
10
&amp;gt;&amp;gt;&amp;gt; m.x = 20
Updating var &quot;x&quot;
&amp;gt;&amp;gt;&amp;gt; m.x
Retrieving var &quot;x&quot;
20
&amp;gt;&amp;gt;&amp;gt; m.y
5
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예제보면 별것도 아니네..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 클래스 멥버variable접근할때 함수불리게 해서 추가동작 할 수 있는걸로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(decorator랑도 비슷?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 여러가지 파이선 기능 구현할때 이 기능을 사용해서 구현했다는거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; Descriptors are a powerful, general purpose protocol. They are the mechanism behind properties, methods, static methods, class methods, and super(). They are used used throughout Python itself to implement the new style classes introduced in version 2.2. Descriptors simplify the underlying C-code and offer a flexible set of new tools for everyday Python programs.&lt;/p&gt;</description>
      <category>Programming</category>
      <category>descriptor</category>
      <category>OOP</category>
      <category>Python</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/366</guid>
      <comments>https://sevity.tistory.com/366#entry366comment</comments>
      <pubDate>Tue, 26 May 2026 20:11:45 +0900</pubDate>
    </item>
    <item>
      <title>C++ 약수 구하기 방법: 완전 탐색과 O(sqrt(N)) 최적화</title>
      <link>https://sevity.tistory.com/365</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;약수구하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;
//Naive
VI Divisors(int n)
{
	VI v;
	FORE(i, 1, n)
	{
		if (n%i == 0) v.push_back(i);
	}
	return v;
}

//대칭성을 활용하면 sqrt 복잡도에 구할 수 있다.
VI Divisors2(int n)
{
	set&amp;lt;int&amp;gt; v;
	for (int i = 1; i*i &amp;lt;= n; i++)
	{
		if (n%i == 0) 
		{
			v.insert(i);
			v.insert(n/i);
		}
	}
	return VI(v.begin(), v.end());
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming</category>
      <category>Algorithm</category>
      <category>CPP</category>
      <category>Divisor</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/365</guid>
      <comments>https://sevity.tistory.com/365#entry365comment</comments>
      <pubDate>Tue, 26 May 2026 19:55:49 +0900</pubDate>
    </item>
    <item>
      <title>NumPy reshape 사용법과 NaN 검사: 배열 차원 변환과 np.isnan</title>
      <link>https://sevity.tistory.com/364</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;reshape&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수는 다음처럼 차원을 바꿀 때 사용함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lD4KA/dJMcaicrfTq/GGetrA7bQQSYQraBzpy4n0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lD4KA/dJMcaicrfTq/GGetrA7bQQSYQraBzpy4n0/img.png&quot; data-alt=&quot;2행 3열 NumPy 배열과 shape가 (2, 3)인 초기 상태&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lD4KA/dJMcaicrfTq/GGetrA7bQQSYQraBzpy4n0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlD4KA%2FdJMcaicrfTq%2FGGetrA7bQQSYQraBzpy4n0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;2행 3열 NumPy 배열과 shape가 (2, 3)인 초기 상태&quot; loading=&quot;lazy&quot; width=&quot;276&quot; height=&quot;98&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2행 3열 NumPy 배열과 shape가 (2, 3)인 초기 상태&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 2행 3열인 2차원 array 자료를&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;172&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nUrCo/dJMcaaenRJS/J3RYji7FlHHVUmc6N5iB50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nUrCo/dJMcaaenRJS/J3RYji7FlHHVUmc6N5iB50/img.png&quot; data-alt=&quot;reshape로 같은 값을 3행 2열 배열로 바꾼 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nUrCo/dJMcaaenRJS/J3RYji7FlHHVUmc6N5iB50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnUrCo%2FdJMcaaenRJS%2FJ3RYji7FlHHVUmc6N5iB50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;reshape로 같은 값을 3행 2열 배열로 바꾼 결과&quot; loading=&quot;lazy&quot; width=&quot;172&quot; height=&quot;115&quot; data-origin-width=&quot;172&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reshape로 같은 값을 3행 2열 배열로 바꾼 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reshape으로 위처럼 3행 2열로 변경할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;171&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caVsRG/dJMcaicrfTr/gMr7EzORplk3uXFiEI9Y5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caVsRG/dJMcaicrfTr/gMr7EzORplk3uXFiEI9Y5k/img.png&quot; data-alt=&quot;reshape(6)으로 배열을 1차원 형태로 바꾼 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caVsRG/dJMcaicrfTr/gMr7EzORplk3uXFiEI9Y5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaVsRG%2FdJMcaicrfTr%2FgMr7EzORplk3uXFiEI9Y5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;reshape(6)으로 배열을 1차원 형태로 바꾼 결과&quot; loading=&quot;lazy&quot; width=&quot;171&quot; height=&quot;84&quot; data-origin-width=&quot;171&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reshape(6)으로 배열을 1차원 형태로 바꾼 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 처럼 2차원을 1차원으로 줄일 수도 있고,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQLjgm/dJMcaiXHWbB/Mly6oPDtTiBuTKFRcA2Jf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQLjgm/dJMcaiXHWbB/Mly6oPDtTiBuTKFRcA2Jf1/img.png&quot; data-alt=&quot;reshape(6, 1)로 열 벡터 형태를 만든 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQLjgm/dJMcaiXHWbB/Mly6oPDtTiBuTKFRcA2Jf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQLjgm%2FdJMcaiXHWbB%2FMly6oPDtTiBuTKFRcA2Jf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;reshape(6, 1)로 열 벡터 형태를 만든 결과&quot; loading=&quot;lazy&quot; width=&quot;169&quot; height=&quot;165&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;165&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reshape(6, 1)로 열 벡터 형태를 만든 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차원같은 2차원으로 만들수도 있다(이런 형태가 Keras 쓰다보면 필요함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더욱 좋은 사용법은 -1을 이용해서 일부값을 스킵하면 알아서 채워준다는 것&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;177&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhVxpu/dJMcaiXHWbD/6uSso1b2blOxokqMfv1a0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhVxpu/dJMcaiXHWbD/6uSso1b2blOxokqMfv1a0k/img.png&quot; data-alt=&quot;reshape(-1, 1)에서 행 크기를 자동 추론한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhVxpu/dJMcaiXHWbD/6uSso1b2blOxokqMfv1a0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhVxpu%2FdJMcaiXHWbD%2F6uSso1b2blOxokqMfv1a0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;reshape(-1, 1)에서 행 크기를 자동 추론한 결과&quot; loading=&quot;lazy&quot; width=&quot;177&quot; height=&quot;164&quot; data-origin-width=&quot;177&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reshape(-1, 1)에서 행 크기를 자동 추론한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;nan 체크&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;놀랍게도 아래 방법으로는 체크가 되지 않는 경우가 있음을 발견&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;
&amp;gt;&amp;gt;&amp;gt; X[date][isin]
array([ nan,  nan,  nan,  nan,  nan,  nan])
&amp;gt;&amp;gt;&amp;gt; np.nan in X[date][isin]
False
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6736590/fast-check-for-nan-in-numpy&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;에도 해당 내용이 있다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;
&amp;gt;&amp;gt;&amp;gt; np.isnan(np.min(X))
True
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 처럼 하라는거네&lt;/p&gt;</description>
      <category>Programming</category>
      <category>array</category>
      <category>numpy</category>
      <category>Python</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/364</guid>
      <comments>https://sevity.tistory.com/364#entry364comment</comments>
      <pubDate>Tue, 26 May 2026 19:45:51 +0900</pubDate>
    </item>
    <item>
      <title>퍼셉트론 개념과 AND 게이트 예제: 가중합, 임계값, 신경망 기초</title>
      <link>https://sevity.tistory.com/363</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;perceptron&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 퍼셉트론: 여러개의 바이너리 인풋을 받아서 하나의 바이너리 아웃풋을 리턴 (뉴런을 모방)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;293&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmd8wN/dJMcaak6Cka/g35P5inKMnA95odaduoKs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmd8wN/dJMcaak6Cka/g35P5inKMnA95odaduoKs1/img.png&quot; data-alt=&quot;여러 입력을 받아 하나의 출력을 만드는 초기 퍼셉트론 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmd8wN/dJMcaak6Cka/g35P5inKMnA95odaduoKs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdmd8wN%2FdJMcaak6Cka%2Fg35P5inKMnA95odaduoKs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;여러 입력을 받아 하나의 출력을 만드는 초기 퍼셉트론 구조&quot; loading=&quot;lazy&quot; width=&quot;293&quot; height=&quot;150&quot; data-origin-width=&quot;293&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;여러 입력을 받아 하나의 출력을 만드는 초기 퍼셉트론 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인풋 범위를 실수로 확장하고 weight를 도입하고 output 계산식을 정의&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZ9FXo/dJMcaiDsA6U/ifwb52BBnALCvo27B04PK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZ9FXo/dJMcaiDsA6U/ifwb52BBnALCvo27B04PK0/img.png&quot; data-alt=&quot;가중합과 임계값으로 0 또는 1 출력을 정하는 퍼셉트론 식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZ9FXo/dJMcaiDsA6U/ifwb52BBnALCvo27B04PK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZ9FXo%2FdJMcaiDsA6U%2Fifwb52BBnALCvo27B04PK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;가중합과 임계값으로 0 또는 1 출력을 정하는 퍼셉트론 식&quot; loading=&quot;lazy&quot; width=&quot;379&quot; height=&quot;93&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가중합과 임계값으로 0 또는 1 출력을 정하는 퍼셉트론 식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인풋을 weight sum 해서 의사결정을 한다고 생각가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 파티에 갈지 결정하는 퍼셉트론을 만들어보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파티에 가고싶은 요소:&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 날씨는 좋은지 x1 = 0 또는 1&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 여자친구가 같이가고 싶어하는지 x2 = 0 또는 1&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 교통은 좋은지 x3 = 0 또는 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 날씨가 좋은 경우 다른건 따지지 않고 참석하고 싶을때..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;w1 = 6, w2 = 2, w3 = 2, threshold = 5로 놓아보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;날씨가 안좋아도 여자친구가 가고싶어하고 교통이 좋으면 참석하는 걸로 바꾸어 보면.. threshold를 3으로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AND 게이트를 만들어보자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EKqJ3/dJMcaak6Ckb/sBNt0Do5pLQIsj0OJbPlc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EKqJ3/dJMcaak6Ckb/sBNt0Do5pLQIsj0OJbPlc0/img.png&quot; data-alt=&quot;두 입력과 가중치, 임계값으로 구성한 AND 게이트 퍼셉트론&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EKqJ3/dJMcaak6Ckb/sBNt0Do5pLQIsj0OJbPlc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEKqJ3%2FdJMcaak6Ckb%2FsBNt0Do5pLQIsj0OJbPlc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;두 입력과 가중치, 임계값으로 구성한 AND 게이트 퍼셉트론&quot; loading=&quot;lazy&quot; width=&quot;258&quot; height=&quot;120&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 입력과 가중치, 임계값으로 구성한 AND 게이트 퍼셉트론&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; x1 x2&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 0 0 &amp;gt; 0&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 0 1 &amp;gt; 2&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 1 0 &amp;gt; 2&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 1 1 &amp;gt; 4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론 여러개를 쌓아보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nC7q5/dJMcaak6Ckc/IEnEo8rdKNK514koUkSiOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nC7q5/dJMcaak6Ckc/IEnEo8rdKNK514koUkSiOk/img.png&quot; data-alt=&quot;퍼셉트론을 여러 층으로 쌓은 신경망 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nC7q5/dJMcaak6Ckc/IEnEo8rdKNK514koUkSiOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnC7q5%2FdJMcaak6Ckc%2FIEnEo8rdKNK514koUkSiOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;퍼셉트론을 여러 층으로 쌓은 신경망 구조&quot; loading=&quot;lazy&quot; width=&quot;572&quot; height=&quot;223&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;퍼셉트론을 여러 층으로 쌓은 신경망 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가산기를 만들어보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGdMzV/dJMcaak6Ckd/HpbDsdgbaJzxNzSYuEW2G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGdMzV/dJMcaak6Ckd/HpbDsdgbaJzxNzSYuEW2G1/img.png&quot; data-alt=&quot;논리 게이트 조합으로 만든 반가산기의 합과 자리올림 출력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGdMzV/dJMcaak6Ckd/HpbDsdgbaJzxNzSYuEW2G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGdMzV%2FdJMcaak6Ckd%2FHpbDsdgbaJzxNzSYuEW2G1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;논리 게이트 조합으로 만든 반가산기의 합과 자리올림 출력&quot; loading=&quot;lazy&quot; width=&quot;524&quot; height=&quot;159&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;논리 게이트 조합으로 만든 반가산기의 합과 자리올림 출력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7EW0f/dJMcaiDsA6W/U1YU8NjVk9pKQxfOrFKs8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7EW0f/dJMcaiDsA6W/U1YU8NjVk9pKQxfOrFKs8k/img.png&quot; data-alt=&quot;퍼셉트론 네트워크로 표현한 반가산기 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7EW0f/dJMcaiDsA6W/U1YU8NjVk9pKQxfOrFKs8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7EW0f%2FdJMcaiDsA6W%2FU1YU8NjVk9pKQxfOrFKs8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;퍼셉트론 네트워크로 표현한 반가산기 구조&quot; loading=&quot;lazy&quot; width=&quot;475&quot; height=&quot;212&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;퍼셉트론 네트워크로 표현한 반가산기 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;convnetJS Demo&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;text&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;text&quot;&gt;&lt;code&gt;

layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:2});
layer_defs.push({type:'softmax', num_classes:2});

net = new convnetjs.Net();
net.makeLayers(layer_defs);

trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.1, batch_size:10, l2_decay:0.001});
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;sigmoid neuron&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;175&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OO7gL/dJMcaiDsA6X/IHIbL4N2buuSBOwAS7CskK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OO7gL/dJMcaiDsA6X/IHIbL4N2buuSBOwAS7CskK/img.png&quot; data-alt=&quot;시그모이드 함수의 기본 정의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OO7gL/dJMcaiDsA6X/IHIbL4N2buuSBOwAS7CskK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOO7gL%2FdJMcaiDsA6X%2FIHIbL4N2buuSBOwAS7CskK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;시그모이드 함수의 기본 정의&quot; loading=&quot;lazy&quot; width=&quot;175&quot; height=&quot;77&quot; data-origin-width=&quot;175&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시그모이드 함수의 기본 정의&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;233&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/20NIO/dJMcaiDsA6Y/XCIZkuxJt6fv2Vl1RYyPNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/20NIO/dJMcaiDsA6Y/XCIZkuxJt6fv2Vl1RYyPNk/img.png&quot; data-alt=&quot;가중합과 편향을 입력으로 사용하는 시그모이드 뉴런 식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/20NIO/dJMcaiDsA6Y/XCIZkuxJt6fv2Vl1RYyPNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F20NIO%2FdJMcaiDsA6Y%2FXCIZkuxJt6fv2Vl1RYyPNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;가중합과 편향을 입력으로 사용하는 시그모이드 뉴런 식&quot; loading=&quot;lazy&quot; width=&quot;233&quot; height=&quot;84&quot; data-origin-width=&quot;233&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가중합과 편향을 입력으로 사용하는 시그모이드 뉴런 식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coStSx/dJMcagMsit5/tYyO7UsSKvkkmHUf1hbd7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coStSx/dJMcagMsit5/tYyO7UsSKvkkmHUf1hbd7k/img.png&quot; data-alt=&quot;입력 변화에 따라 부드럽게 증가하는 시그모이드 함수 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coStSx/dJMcagMsit5/tYyO7UsSKvkkmHUf1hbd7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoStSx%2FdJMcagMsit5%2FtYyO7UsSKvkkmHUf1hbd7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;입력 변화에 따라 부드럽게 증가하는 시그모이드 함수 그래프&quot; loading=&quot;lazy&quot; width=&quot;434&quot; height=&quot;285&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;입력 변화에 따라 부드럽게 증가하는 시그모이드 함수 그래프&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXzQkV/dJMcaiDsA60/rhFMP0cEG1531UmOfJHuSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXzQkV/dJMcaiDsA60/rhFMP0cEG1531UmOfJHuSk/img.png&quot; data-alt=&quot;임계값에서 출력이 바뀌는 계단 함수 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXzQkV/dJMcaiDsA60/rhFMP0cEG1531UmOfJHuSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXzQkV%2FdJMcaiDsA60%2FrhFMP0cEG1531UmOfJHuSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;임계값에서 출력이 바뀌는 계단 함수 그래프&quot; loading=&quot;lazy&quot; width=&quot;433&quot; height=&quot;289&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;임계값에서 출력이 바뀌는 계단 함수 그래프&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tFeRb/dJMcaiDsA61/543kh7MXKuQ5OL8gt2ehFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tFeRb/dJMcaiDsA61/543kh7MXKuQ5OL8gt2ehFk/img.png&quot; data-alt=&quot;시그모이드 함수와 ReLU 활성화 함수 그래프 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tFeRb/dJMcaiDsA61/543kh7MXKuQ5OL8gt2ehFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtFeRb%2FdJMcaiDsA61%2F543kh7MXKuQ5OL8gt2ehFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;시그모이드 함수와 ReLU 활성화 함수 그래프 비교&quot; loading=&quot;lazy&quot; width=&quot;722&quot; height=&quot;285&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시그모이드 함수와 ReLU 활성화 함수 그래프 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>AI, ML</category>
      <category>AI</category>
      <category>machine-learning</category>
      <category>perceptron</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/363</guid>
      <comments>https://sevity.tistory.com/363#entry363comment</comments>
      <pubDate>Tue, 26 May 2026 19:33:31 +0900</pubDate>
    </item>
    <item>
      <title>확률론 - 푸아송 분포(Poisson Distribution)</title>
      <link>https://sevity.tistory.com/362</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;푸아송 분포(Poisson Distribution)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확률론에서, 푸아송 분포(Poisson分布, 영어: Poisson distribution)는 단위 시간 안에 어떤 사건이 몇 번 발생할 것인지를 표현하는 이산 확률 분포이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;푸아송 분포는 이항 분포의 특수한 형태로 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$X \sim \textrm{B}(n,p). \,$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이항분포를 따르는 위와 같은 확률변수 X에서, n이 대단히 크고 p가 대단히 작을 경우, 이 확률변수 X는 &amp;lambda;=np인 푸아송 분포로 근사할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$X \sim \textrm{Pois}(\lambda)$ 로 표기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정해진 시간 안에 어떤 사건이 일어날 횟수에 대한 기댓값을 $\lambda$라고 했을 때, 그 사건이 n회 일어날 확률은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$f(n; \lambda)=\frac{\lambda^n e^{-\lambda}}{n!},\,\!$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://math7.tistory.com/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;에 따르면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 사건에 대해서 실패, 성공 또는 앞면, 뒷면과 같이 2가지 이상의 상황에 대해서 관심이 있는 것이 아니라,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간에 따른 교통사고 횟수등 발생 횟수에만 관심이 있을때 푸아송 분포를 적용할 수 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://separk1031.tistory.com/entry/%EA%B8%B0%ED%95%98%EB%B6%84%ED%8F%AC-%EC%9D%B4%ED%95%AD%EB%B6%84%ED%8F%AC-%ED%91%B8%EC%95%84%EC%86%A1-%EB%B6%84%ED%8F%AC-%EC%99%84%EC%A0%84-%EC%A0%95%EB%A6%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;에 따르면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구간마다 사건이 일어나는 평균값 &amp;lambda;를 알고 있다고 치면, 어떤 주어진 구건에 사건이 발생하는 수 X를 예측하겠다는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔가 직관적으로, 대충 요게 이정도 일어나는 애라는걸 아는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 원하는 구간동안에 몇번 일어날 지를 알고 싶을 때 이 분포를 가정하면 된다는것...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이자료를 보면, 이항분포 식으로 부터 푸아송 식을 유도할 수 있다. (n이 크고 p가 작다는 가정하에)&lt;/p&gt;</description>
      <category>tistory</category>
      <category>dokuwiki</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/362</guid>
      <comments>https://sevity.tistory.com/362#entry362comment</comments>
      <pubDate>Tue, 26 May 2026 00:24:07 +0900</pubDate>
    </item>
    <item>
      <title>확률론 - 확률변수를 함수로 해석하기</title>
      <link>https://sevity.tistory.com/361</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;확률변수를 함수로 해석하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 위의 간단 정의로 충분한데.. 함수해석이 굳이 필요한 이유는 무엇일까..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 주사위 예에서는 표본공간과 관측값인 확률변수가 1:1 관계이지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(주사위 1이 나오면 확률변수 X = 1, 주사위 2가 나오면 확률변수 X = 2 등...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 확률변수를 다음과 같이 정의하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 주사위가 짝수가 나오면 1, 홀수가 나오면 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정의역 {1,2,3,4,5,6} 이고 치역 {0,1}인 함수처럼 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우는 확률 변수 X를 함수로 보는 해석이 더 자연스럽고 편할수 있다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 이때 확률변수 X는 '주사위를 굴렸을 때 나온 수의 짝수/홀수 여부'가 된다&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 다시한 번 말하지만 정의역 {1,2,3,4,5,6} 이고 치역 {0,1}인 함수처럼 된다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 다른말로 표본공간 &amp;gt; 가측공간(내 멋대로 0, 1로 정의)의 함수처럼 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAJohm/dJMcahkh0rj/HLqhJcqdHZUmdv7AldKEv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAJohm/dJMcahkh0rj/HLqhJcqdHZUmdv7AldKEv0/img.png&quot; data-alt=&quot;짝수와 홀수를 0, 1로 매핑하는 확률변수의 함수 표현&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAJohm/dJMcahkh0rj/HLqhJcqdHZUmdv7AldKEv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAJohm%2FdJMcahkh0rj%2FHLqhJcqdHZUmdv7AldKEv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;짝수와 홀수를 0, 1로 매핑하는 확률변수의 함수 표현&quot; loading=&quot;lazy&quot; width=&quot;626&quot; height=&quot;258&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;짝수와 홀수를 0, 1로 매핑하는 확률변수의 함수 표현&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 예를 보면 다음과 같다.(확률변수로 X가 아닌 Y가 쓰였다)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Coin Toss&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The possible outcomes for one coin toss can be described by the sample space &amp;Omega;={heads,tails}. We can introduce a real-valued random variable Y that models a $1 payoff for a successful bet on heads as follows:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;238&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR769Q/dJMcagZTOJY/5GvpOCwd4Lwf6mh9gPzVZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR769Q/dJMcagZTOJY/5GvpOCwd4Lwf6mh9gPzVZ1/img.png&quot; data-alt=&quot;동전 던지기 결과를 보상값에 대응시키는 확률변수 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR769Q/dJMcagZTOJY/5GvpOCwd4Lwf6mh9gPzVZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR769Q%2FdJMcagZTOJY%2F5GvpOCwd4Lwf6mh9gPzVZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;동전 던지기 결과를 보상값에 대응시키는 확률변수 예시&quot; loading=&quot;lazy&quot; width=&quot;238&quot; height=&quot;84&quot; data-origin-width=&quot;238&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;동전 던지기 결과를 보상값에 대응시키는 확률변수 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>tistory</category>
      <category>AI</category>
      <category>dokuwiki</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/361</guid>
      <comments>https://sevity.tistory.com/361#entry361comment</comments>
      <pubDate>Tue, 26 May 2026 00:04:03 +0900</pubDate>
    </item>
    <item>
      <title>베이지안</title>
      <link>https://sevity.tistory.com/360</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;베이즈 정리 = Bayes' theorem&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9aaUp/dJMcafUhAQL/62mcle5Jda1t5At156xawK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9aaUp/dJMcafUhAQL/62mcle5Jda1t5At156xawK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9aaUp/dJMcafUhAQL/62mcle5Jda1t5At156xawK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9aaUp%2FdJMcafUhAQL%2F62mcle5Jda1t5At156xawK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;216&quot; height=&quot;48&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건부 확률을 알고 있을 때 위 식의 유도 자체는 벤다이어그램 만으로 쉽게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 아래 세 가지 정보를 알고 있다고 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. P(A)가 암에 걸릴 확률 = 1.0%&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. P(B)가 65세일 확률 = 0.2%&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. P(B|A)가 암에 걸린 사람이 65세일 확률 = 0.5%&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴때.. 내가 65세인데 암에 걸릴 확률을 구하고 싶으면 다음과 같이 하면 된다는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;P(A|B) = 65세인 사람이 암에 걸릴 확률은 ${{0.5\% \times 1.0\%}\over0.2\%} = 2.5\% $ 이 된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Bayesian network&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대략적으로 state들이 있고 화살표가 있는 DAG을 말하고..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;state들 간의 연결은 영향력을 나타낸다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TtpgO/dJMcafUhAQM/R0gKUkPMokFlwNhtzX5Mu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TtpgO/dJMcafUhAQM/R0gKUkPMokFlwNhtzX5Mu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TtpgO/dJMcafUhAQM/R0gKUkPMokFlwNhtzX5Mu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTtpgO%2FdJMcafUhAQM%2FR0gKUkPMokFlwNhtzX5Mu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;440&quot; height=&quot;229&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A simple Bayesian network. Rain influences whether the sprinkler is activated, and both rain and the sprinkler influence whether the grass is wet.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 베이지안 네트워크는 질환과 증상 사이의 확률관계를 나타낼 수 있다. 증상이 주어지면, 네트워크는 다양한 질병의 존재 확률을 계산할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Formally, Bayesian networks are DAGs(directed acyclic graphs)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;좀 더 많은 예제&lt;/h4&gt;
&lt;p style=&quot;margin-left: 20px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;a href=&quot;http://blog.synapsoft.co.kr/103&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://blog.synapsoft.co.kr/103&lt;/a&gt;&lt;/p&gt;</description>
      <category>tistory</category>
      <category>AI</category>
      <category>dokuwiki</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/360</guid>
      <comments>https://sevity.tistory.com/360#entry360comment</comments>
      <pubDate>Mon, 25 May 2026 19:15:52 +0900</pubDate>
    </item>
    <item>
      <title>Makefile</title>
      <link>https://sevity.tistory.com/359</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;괜찮은 링크&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.gnu.org/software/make/manual/make.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;공식매뉴얼&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html#toc3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;kldp 한글 매뉴얼&lt;/a&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;일반&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;make with no arguments executes the first rule in the file&lt;/h4&gt;
&lt;pre class=&quot;text&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;text&quot;&gt;&lt;code&gt;
재밌는건 아래와 같은 Makefile의 경우 가장 처음 target만 무조건 수행된다는 점이다.
clean:test.c
        echo &quot;clean&quot;
 
clean2:test.c
        echo &quot;clean2&quot;
 
a.out : test.c
        gcc test.c
즉 위와 같은 Makefile 이 있을 때, make를 수행하면 가장 위에있는 target인 clean 만 수행되고 나머지 target인 clean2, a.out 은 깡그리 무시된다는 점이다.
clean2나 a.out 이 수행되려면 만앞에 있는 clean의 dependency chain에 언급해주거나 make a.out 이런식으로 직접 파라미터로 넣어주는 수밖에 없는것 같다.
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;.c를 .o로 바꾸어 주는 것은 자동이다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 특징을 이용하는게 좋은 것이.. 특정 .c 하나만 바뀌었을때 그 파일만 빌드되도록 만들기 쉽다는 점&lt;/p&gt;
&lt;pre class=&quot;text&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;text&quot;&gt;&lt;code&gt;
아하!! 정말 중요한 것을 깨달았다.

1.  컴파일 (.c 파일에서 .o 로 변환되는 것) 은 원래 부터 자동이라는 것.

2.  그리고 이 컴파일에 사용되는 것이 바로 predefined macro 라는 것!! 즉 CC, CFLAGS 같은 애들이 이와 같이 자동 컴파일 될 때 쓰인다는 것이다!

그 예로서 다음과 같은 Makefile 이 있을 때.

  6 OBJ = main.o func1.o
  7
  8 test : $(OBJ)
  9     gcc -o test $(OBJ)

보면은 원래는 다음처럼 .c를 .o로 바꾸어주는 부분도 있어야 하지만

  3 OBJ = main.o func1.o
  4
  5 test : $(OBJ)
  6     gcc -o test $(OBJ)
  7
  8 main.o : main.c
  9     gcc -c main.c
 10
 11 func1.o : func1.c
 12     gcc -c func1.c

실제로 위에거 처럼해도 잘 되는걸 볼 수 있고 실행시 나타나는 명령은 다음과 같다.

cc    -c -o main.o main.c
cc    -c -o func1.o func1.c
gcc -o test main.o func1.o

보면은 컴파일러로 자동으로 cc 가 쓰였고 컴파일 옵션에는 -c 만 있음을 알 수 있다.

위를 gcc로 바꾸고 디버깅 옵션인 -g 를 추가하려면 다음과 같이 Makefile을 수정해주면 된다.

  3 CC = gcc
  4 CFLAGS = -g
  5
  6 OBJ = main.o func1.o
  7
  8 test : $(OBJ)
  9     gcc -o test $(OBJ)

바로 predefined macro를 통하여 컴파일 옵션을 지정해 준것이다.

그럼 나타나는 명령어가 다음과 같이 잘 바뀐다.

gcc -g   -c -o main.o main.c
gcc -g   -c -o func1.o func1.c
gcc -o test main.o func1.o
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;타겟이 여러개인 경우도 가능하다&lt;/h4&gt;
&lt;pre class=&quot;text&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;text&quot;&gt;&lt;code&gt;
예제 2.1에서는 안 나왔지만 타겟이 여러 개인 경우는 어떻게 될까요? 그때에는 각 타겟에 대해서, 하나의 타겟을 가지는(그리고 나머지 선행조건 및 레시피는 모두 동일한) 다수의 규칙들을 작성하는 것과 동일합니다. 즉 다음의 규칙을 보시죠.

$(OBJS) : MyCommon.h
	echo &amp;ldquo;$@ depends on MyCommon.h&amp;rdquo;
$(OBJS)는 MySocket.o MyClient.o 으로 정의되어 있기 때문에, 위의 규칙은 다음 두 개의 규칙으로 풀어 쓴 것과 동일합니다.

MySocket.o : MyCommon.h
	echo &amp;ldquo;$@ depends on MyCommon.h&amp;rdquo;
 
MyClient.o : MyCommon.h
	echo &amp;ldquo;$@ depends on MyCommon.h&amp;rdquo;
당연히 풀어 쓴 것 보다야 하나의 규칙이 훨씬 컴팩트해서 보기도 좋고 유지 보수도 용이합니다.. (아, 물론 타이핑도 적습니다.) 이제 실제 규칙의 처리는 어떻게 되는 지 알아 보도록 하겠습니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;internal macro&lt;/h4&gt;
&lt;pre class=&quot;text&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;text&quot;&gt;&lt;code&gt;
내부적으로 정해짐. 바꿀수없음.

$@  현재의 목표 파일(Target) ( :의 왼쪽 부분)

$^  :의 오른쪽 부분

$*  확장자가 없는 현재의 목표 파일(Target) 

$&amp;lt;  :의 오른쪽 부분중 첫번째 거

$?  현재의 목표 파일(Target)보다 더 최근에 갱신된 파일이름
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;gccmakedep&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=== mac에서 gccmakedep 설치하기 ===&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://egloos.zum.com/manwooo/v/1808309&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://egloos.zum.com/manwooo/v/1808309&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 링크보고 macport 깔고 gccmakedep 설치하면 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 터미널은 다시 구동해야 하더라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=== 설명 ===&lt;/p&gt;
&lt;pre class=&quot;text&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;text&quot;&gt;&lt;code&gt;
다른 것들은 모두 편리하고 좋은 것 같은데, Makefile 하단에 있는 파일 간의 종속에 대한 정보를 모두 타이핑해서 넣어야 할까요? 파일이 많을 경우 어떻게 일일이 입력할 수 있있겠습니까?  당연한 말씀입니다. 게으른 프로그래머에게는 말도 안되죠. 그래서 이와 같은 귀찮은 작업을 make에 떠 넘기겠습니다. 바로 파일간의 의존성을 찾아서 그 내용을 직접 구성해 달라고 요청하는 것이죠.
  이렇게 파일의 의존성을 검색해서 그 내용을 작성해 주는 것이 gccmakedep 입니다. 아래와 같이 수정해서 make dep를 실행합니다.
TARGET =	sample
OBJS = main.o tcp.o rs232.o
SRCS = $(OBJS:.o=.c)
CC = -I/home/jwjw/prjs/include	-g	-c
$(TARGET): $(OBJS)
    gcc -lm -o $@ $^

.c.o:
    gcc $(CC) $&amp;lt;

dep : 
    gccmakedep $(SRCS)
  이렇게 추가 작성해서 make dep 를 실행하시면 make는 컴파일과 링크 작업 대신에 라벨 dep: 밑의 명령을 실행합니다. 새로 만들어진 SRCS는 OBJS에 열거된 파일 모록에 대해서 확장자를 .o를 .c로 바뀐 목록을 가지게 됩니다. gccmakedep는 소스 파일을 가지고 의존성을 검색할 수 있기 때문이죠.
]$ make dep
]$ vi Makefile
TARGET =	sample 
OBJS = main.o tcp.o rs232.o 
SRCS = $(OBJS:.o=.c) 
CC = -I/home/jwjw/prjs/include	-g	-c 
    $(TARGET): $(OBJS) gcc -lm -o $@ $^ 
.c.o: 
   	gcc $(CC) $&amp;lt; 
dep :	gccmakedep $(SRCS)
# DO NOT DELETE
main.o: main.c /usr/include/stdio.h .........
tcp.o: tcp.c /usr/include/stdio.h .........
rs232.o: rs232.c /usr/include/stdio.h .........
  하단에# DO NOT DELETE 행과 함께 밑으로 각 .o 에 대한 관련 파일 목록이 자동으로 생성되는 것을 보실 수 있습니다. 이제 make를 실행하면 위 정보에 맞추어 컴파일하게 됩니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;재귀적 사용(sub directories)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make-4.html#ss4.6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이 링크&lt;/a&gt;가 좋네&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;옵션&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;j 옵션&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;make -j 12&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼하면 12개의 명령어를 동시에 패러럴 하게 수행하라는 것(논리 CPU개수 적어주면 될 듯)&lt;/p&gt;</description>
      <category>tistory</category>
      <category>AI</category>
      <category>dokuwiki</category>
      <author>sevity</author>
      <guid isPermaLink="true">https://sevity.tistory.com/359</guid>
      <comments>https://sevity.tistory.com/359#entry359comment</comments>
      <pubDate>Mon, 25 May 2026 18:16:30 +0900</pubDate>
    </item>
  </channel>
</rss>