<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>아롱이 탐험대</title>
    <link>https://ys-cs17.tistory.com/</link>
    <description>관심 분야: Computer vision, Anomaly detection</description>
    <language>ko</language>
    <pubDate>Sun, 19 Apr 2026 04:39:28 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ys_cs17</managingEditor>
    <image>
      <title>아롱이 탐험대</title>
      <url>https://tistory1.daumcdn.net/tistory/3775223/attach/51793a58cc53457ebecaff2502f76e5c</url>
      <link>https://ys-cs17.tistory.com</link>
    </image>
    <item>
      <title>[Kernel-based Learning] Support Vector Machine (SVM) - Linear &amp;amp; Hard Margin</title>
      <link>https://ys-cs17.tistory.com/101</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;Linear Classification&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVM (Support vector Machine)은 binary classifier를 만드는 것이 목적이다. 각 알고리즘마다 분류를 만드는 절차가 다르기 때문에 아래 예시와 같이 경계면의 형태가 다르다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2810&quot; data-origin-height=&quot;1346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3NY5O/btrLFHmer2w/DkAXW1N31S2IwqiYFja3u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3NY5O/btrLFHmer2w/DkAXW1N31S2IwqiYFja3u1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3NY5O/btrLFHmer2w/DkAXW1N31S2IwqiYFja3u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3NY5O%2FbtrLFHmer2w%2FDkAXW1N31S2IwqiYFja3u1%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;2810&quot; height=&quot;1346&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2810&quot; data-origin-height=&quot;1346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 아는 NN은 비선형 분류다. 오늘 알아볼 SVM은 기본적으로 선형 모형이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ S=((x_{1} ,y_{1}), ..., (x_{n}, y_{n}))\in X \times \{-1,+1\} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 데이터 $X$는 i.i.d.이고, 샘플링 되었다고 가정한다. 우리는 $n$개의 데이터 셋을 가지고 있고, binary classification이기 때문에 $-1, +1$로 지정한다. logistic regression에서는 binary classification에서 0과 1로 표현을 하는데 SVM에서는 $-1, +1$로 설정한다. 이렇게 하는 이유는 수학적으로 계산을 더욱 간편하게 하려고 하는 것이다. 큰 문제는 없다. 자세한 것은 뒤에서 설명하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리의 목적은 주어진 조건에서 hypothesis $h: X\rightarrow \{-1, +1\}$를 찾는 것이다. 여기서 hypothesis는 model라고 생각하면 되고, $X$라는 공간에서 매칭 되는 정답으로 가는 좋은 성능의 model을 찾는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 성능의 model은 small generalization error를 찾는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Classifier는 2차원 공간 상에서는 1차원 직선을 사용하고, 3차원에서는 면을 통해 구분한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 우리의 최종 목적은 d-dimension에서 두 범주를 잘 구분하는 $d-1$ dimension의 hyper plane을 찾는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ H=\{\mathbf{x} \rightarrow sign(\mathbf{w}\cdot \mathbf{x}+b:\mathbf{w}\in R^{d}, b \in R\} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Binary classification의 기본적인 hypothesis는 위와 같이 정의 된다. $\mathbf{w}\cdot \mathbf{x}+b$를 통해 값을 계산하고, 이 값을 $sign$을 통해 +1, -1로 분류한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnTOru/btrLD0m9S8A/xQl5xtC3ZthK4cq8k3v300/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnTOru/btrLD0m9S8A/xQl5xtC3ZthK4cq8k3v300/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnTOru/btrLD0m9S8A/xQl5xtC3ZthK4cq8k3v300/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnTOru%2FbtrLD0m9S8A%2FxQl5xtC3ZthK4cq8k3v300%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;533&quot; height=&quot;354&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;1230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림에서 $A$와 $B$ 중 어떤 분류기가 더 좋을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 다 잘 분류하고 있는 모습을 보인다. 이전 포스트에서 $R =R_{emp}+capacity$로 성능을 측정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$A,B$는 둘 다 $R_{emp}=0$ 이지만 capacity term은 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 SVM이 선호하는 것은 $A$ 분류기이다. 그 이유는 지금 현재 shading이 되어 있는 회색 부분을 margin이라고 부른데, 이는 분류 경계면부터 등간격으로 확장시켰을 때, 가장 가까운 양 쪽 범주의 객체들 간의 거리이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 margin이 클수록 capacity term이 줄어든다. 따라서 $A$를 선호하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리의 핵심은 margin은 최대화하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거에는 인공 지능이 local optimum이 많아 빠져나오기 힘들 것이라고 생각했다. 그래서 이 중에 무엇을 하든 간에 인공 지능은 indifferent 하다고 생각했다. 이러한 문제점을 해결하기 위해 SVM은 global optimum을 찾는 것이 핵심이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 인공 지능의 경우 현재로서는 local optimum을 빠져나오는 방법이 존재하였다. 이를 다른 말로 하면 모든 방향으로 gradient가 0인 경우는 거의 없었다. 특정한 쪽으로는 0일 때가 존재했지만, 이를 수많은 학습을 통해 global optimum에 도달할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 실험 결과 이후로 인공 지능의 성능이 SVM을 넘어섰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVM의 성능을 올리기 위해서는 margin을 올려야 한다. Margin을 어떻게 계산할까?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;958&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbB12A/btrLE8LgtjK/WIFvIGKX3KmWvu3S40eWMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbB12A/btrLE8LgtjK/WIFvIGKX3KmWvu3S40eWMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbB12A/btrLE8LgtjK/WIFvIGKX3KmWvu3S40eWMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbB12A%2FbtrLE8LgtjK%2FWIFvIGKX3KmWvu3S40eWMk%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;572&quot; height=&quot;336&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;958&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 언급한 것과 같이 positive는 +1, negative -1로 계산한다. 이렇게 하면 실선인 classifier은 margin에 해당하는 점선들 사이에 위치하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+2, +3 이렇게 하지 않는 이유는 어차피 상수항이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 $x$와 $y$가 주어졌을 때 $w$와 $b$를 찾자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2018&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c21Pus/btrLFy30RrC/HELldSFtFQIY9HQRcwBqfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c21Pus/btrLFy30RrC/HELldSFtFQIY9HQRcwBqfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c21Pus/btrLFy30RrC/HELldSFtFQIY9HQRcwBqfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc21Pus%2FbtrLFy30RrC%2FHELldSFtFQIY9HQRcwBqfk%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;608&quot; height=&quot;224&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2018&quot; data-origin-height=&quot;744&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 margin의 넓이를 구해보자. 3차원 space라고 했을 때, 청록색이 분류면, 초록색이 margin이라고 했을 때, 분류면 기준으로 위아래를 마진으로 측정하거나, 이것의 $\frac{1}{2}$을 한다. 우리는 $\frac{1}{2}$을 기준으로 margin을 측정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$x_{0}$가 분류 경계면에 있다고 하자. $w^{T}x_{0}+b=0$이고, $x_{1}$을 위쪽 마진에 있는 값이라고 하자. $x_{1}=x_{0}+pw$라고 표현할 수 있다. 그러면 $w^{T}(x_{0}+pw)+b=1$로 되고, 이를 다시 쓰면 $wx_{0}+pw^{T}w+b=1$로 표현이 가능하다. $pw^{T}w=1$이니깐 $p=-\frac{1}{w^{T}w}$가 된다. 여기서 음수를 제거하면 아래와 같은 margin 식을 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ margin = \frac{1}{\parallel \mathbf{w} \parallel^{2} } $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 margin을 늘리는 게 capacity를 줄일까? 아래식을 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ h \leq min(\lceil \frac{R^{2}}{\Delta^{2}} \rceil, D)+1 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VC-dimension 자체는 margin $\Delta$에 bound 된다. 위 식에서 $D$는 차원의 수, $R$은 범주와 상관없이 전체 데이터를 입력 공간에서 감싸는 hyper sphere의 반지름이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 식에서 우리가 컨트롤할 수 없는 것은 $R$이고, 가변적인 것은 margin을 어떻게 설정하냐에 따라 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식을 보면 $\Delta$가 커지면 분수 식은 작아진다. 이게 충분히 작아지면 차원 $D$보다 작아지는 경우가 발생하게 된다. 그러면 VC-dimension 자체가 $D+1$보다 작아질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 margin을 최대화하는 것은 VC-dimension을 줄이는 효과를 가지고, 이는 아래 식에서 $h$를 줄인다. 따라서 전체 수식의 capacity term은 작아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ R[f] \leq R_{emp}[f]+\sqrt{\frac{h(\ln{\frac{2n}{h}}+1)-\ln{\frac{\delta}{4}}}{n}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국은 함수의 risk를 줄이기 위해서 train error가 동등하면 margin이 최대화되는 점을 찾으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVM은 아래와 같이 4가지 케이스로 나뉜다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;2746&quot; data-origin-height=&quot;970&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TEv27/btrLEklgAxn/LVtBgmMwe6lfPXUEmtx1H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TEv27/btrLEklgAxn/LVtBgmMwe6lfPXUEmtx1H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TEv27/btrLEklgAxn/LVtBgmMwe6lfPXUEmtx1H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTEv27%2FbtrLEklgAxn%2FLVtBgmMwe6lfPXUEmtx1H0%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;755&quot; height=&quot;267&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;2746&quot; data-origin-height=&quot;970&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 표에서 Hard margin은 마진을 벗어나는 예외를 허용하지 않는 것이고, Soft margin은 예외를 허용하는 것이다. 예외 허용은 penalty term을 도입한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선형 분류가 가능한지 불가능한지에 따라 위와 같이 나눈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Case 1에 해당하는 선형 분류가 가능하고, Hard margin을 사용하는 경우를 보자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SVM case 1: Linear Case &amp;amp; Hard Margin&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 케이스의 objective function은 다음과 같이 정의된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \text{Objective function}=\min{\frac{1}{2}\parallel \mathbf{w} \parallel^{2}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 알고 있는 margin에 대한 식은 $\frac{1}{\parallel \mathbf{w} \parallel^{2} }$이고, 이를 튜닝을 해야 하는데, 이에 대해 역수를 취하면 최소화 문제로 만들 수 있다. 이를 보면 $y$를 왜 $+1,-1$로 했는지 이해가 될 것이다.&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-filename=&quot;6.png&quot; data-origin-width=&quot;1692&quot; data-origin-height=&quot;968&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQXj3W/btrLE8Euqwg/MkHGJuASCYYlH50oWKkzE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQXj3W/btrLE8Euqwg/MkHGJuASCYYlH50oWKkzE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQXj3W/btrLE8Euqwg/MkHGJuASCYYlH50oWKkzE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQXj3W%2FbtrLE8Euqwg%2FMkHGJuASCYYlH50oWKkzE1%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;556&quot; height=&quot;318&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;1692&quot; data-origin-height=&quot;968&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림에서는 $x, y$ㄷ가 주어지고, 이를 통해 우리가 찾아야 하는 parameter는 $\mathbf{w}$와 $b$이다. 이를 바탕으로 보면 실선은 $\mathbf{w}\cdot \mathbf{x}+b$인 classifier이고, 여기서 margin을 $+1, -1$로 잡으면 모든 파란색 $\mathbf{x}$는 $+1$보다 위 쪽에 위치하게 되고, 빨간색은 $-1$보다 더 작아햐 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 식으로 살펴보면, 만약 $y_{i}=+1$ 이면 $\mathbf{w}\cdot \mathbf{x} \geq 1$이여야 하고, 빨간색은 반대인 $\mathbf{w}\cdot \mathbf{x} \leq -1$가 되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 양변에 $y_{i}$를 곱하면 파란색의 경우 부등호가 그대로지만, 빨간색은 부등호가 반대로 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 되면 모든 $i$에 대해 식이 아래 식과 같아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ y_{i}(\mathbf{w}^{T}x_{i}+b)\geq 1 $$&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;p data-ke-size=&quot;size16&quot;&gt;라그랑주 승수 법에 대해 remind 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 $\min{\frac{1}{2}x^{2}-2x+3}$라는 식이 존재하고, $x \geq 2$라는 조건이 있을 때, 우리는 제약식을 없애기 위해 라그랑주 승수법을 이용한다. 결과는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ L_{p}=\frac{1}{2}x^{2}-2x+3-\lambda(x-2) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $x-2$는 $x-2\geq 0$이라는 조건에서 나온 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 라그랑주 식에서 극소점을 찾으려면 $x$에 대해 편미분을 진행하면 된다. 결과는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ x-2-\lambda=0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식을 정리하면 $x=2+\lambda$로 쓸 수 있고, 우리는 $x$를 $L_{p}$에 넣을 수 있다. 이를 wolfe&amp;rsquo;s dual problem이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식을 정리하면 다음과 같이 쓸 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ L_{D}:-\frac{1}{2}\lambda^{2}+1,\ \lambda \geq 0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 식은 dual problem이기 때문에 $L_{D}$에 대한 $max$ 문제가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$L_{p}$ 식의 $\lambda$ 부분의 의미는 $(2,1)$을 지나는 곡선에서 $x$가 2보다 큰 부분을 사용할 수 있다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$x=2$일 때 $f(x)=1$이라는 것을 알 수 있다. 이것이 $L_{p}$에 대한 문제이고, $L_{D}$의 문제에서는 $(0,1)$을 지나는 음수 곡선에서 $\lambda=0$일 때, $L_{D}=1$이 된다. 이렇게 되면 $L_{p}$의 최솟값과 $L_{D}$의 최댓값이 같아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 보면 두 방법 모두 쉽지만 $L_{D}$로 풀면 훨씬 쉬워진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ y_{i}(\mathbf{w}^{T}x_{i}+b)\geq 1 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 우리의 식으로 돌아와서 우리의 objective function에 라그랑주 승수법을 적용하면 다음과 같이 계산이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \min{L_{p}}(\mathbf{w}, b, \alpha_{i})=\frac{1}{2}\parallel\mathbf{w}\parallel^{2}-\sum_{i=1}^{N} \alpha_{i}(y_{i}(\mathbf{w}^{T}\mathbf{x}_{i}+b)-1) \\ s.t. \ \ \alpha_{i} \geq 0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KKT condition을 적용해서 $\mathbf{w}$와 $b$가 미지수이기 때문에 편미분을 취하면 아래와 같은 식이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial L_{p}}{\partial \mathbf{w}}=0 \rightarrow \mathbf{w}=\sum_{i=1}^{N}\alpha_{i}y_{i}\mathbf{x}_{i} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial L_{p}}{\partial b}=0 \rightarrow \sum_{i=1}^{N}\alpha_{i}y_{i}=0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 수식을 가지고 원래의 $L_{p}$ 식에 적용하면 다음과 같이 정리된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \max L_{D}(\alpha_{i})=\sum_{i=1}^{N}\alpha_{i}-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}\mathbf{x}^{T}_{i}\mathbf{x}_{j} \\ s.t. \ \sum^{N}_{i=1}\alpha_{i}y_{i} = 0\ and \ a_{i} \geq 0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Primal 문제가 Dual 문제로 바뀐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 새로운 입력 데이터 $x_{new}$를 도입하면 다음과 같이 식이 전개된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ f(\mathbf{x}_{new})=sign(\sum^{N}_{i=1}\alpha_{i}y_{i}\mathbf{x}_{i}^{T}\mathbf{x}_{new}+b) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;binary classification을 해야 되기 때문에 sigmoid function을 적용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \alpha_{i}(y_{i}(\mathbf{w}^{T}\mathbf{x}_{i}+b)-1)=0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 위 식이 0이 되었을 때, KKT condition에 의해 $\alpha$ 또는 $y_{i}(\mathbf{w}^{T}\mathbf{x}_{i}+b)-1$ 둘 다 0이 되면 안된다. 둘 중 하나만 0이 되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 의미는 만약 term 2가 0이라는 것은 margin 경계선 위에 걸쳐 있는 데이터라는 의미이고, $\alpha$는 supprot vector라고 부른다. support vector는 0이 되면 안된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mgzh9/btrLE1MfR4Z/2su9WHNhkiKck6mqO3ZyA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mgzh9/btrLE1MfR4Z/2su9WHNhkiKck6mqO3ZyA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mgzh9/btrLE1MfR4Z/2su9WHNhkiKck6mqO3ZyA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmgzh9%2FbtrLE1MfR4Z%2F2su9WHNhkiKck6mqO3ZyA0%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;660&quot; height=&quot;307&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림에서 margin에 걸쳐 있는 3개의 점이 바로 support vector이고, $\mathbf{w}$를 결정하는데 영향을 미친다. 이는 굉장히 중요한 개념이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$b$는 미지수인데, 별로 고려하지 않는 이유는 어떤 특정한 support vector에 대해서는 $\mathbf{w}$ 대신 summation 식을 넣으면 구할 수 있다. 원래 $b$는 각 위치에 따라 같아야 하지만, 위치마다 살짝 다르다. 보통 $b$는 각 $b$의 평균값을 사용한다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 SVM을 풀었을 때 margin의 size를 직접 계산할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;support vector는 margin 위에 존재하는 점이기 때문에 $\mathbf{w}^{T}\mathbf{x}+b=y_{i}$가 성립한다. 이를 바탕으로 전개를 하면 $b$에 대한 식으로 나타낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ b=y_{i}-\sum_{i=1}^{N}\alpha_{i}y_{i}(\mathbf{x}{j}, \mathbf{x}{i}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 식에 $\sum_{i=1}^{N}\alpha_{i}y_{i}$를 곱하면 다음과 같이 식이 전개된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \sum_{i=1}^{N}\alpha_{i}y_{i}b=\sum_{i=1}^{N}\alpha_{i}y_{i}^{2}-\sum_{i,j=1}^{N}\alpha_{i}\alpha_{j}y_{i}y_{j}(\mathbf{x}{i}, \mathbf{x}{j}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 식에서 $b$는 상수니깐 나가고, $\alpha y$는 0이 된다. $y^{2}$는 1이 된다. 따라서 아래와 같이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ 0=\sum_{i=1}^{N}\alpha_{i}-\mathbf{w}^{T}\mathbf{w} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 위에서 구한 margin 식에 위 식을 대입하면 최종적인 margin의 크기를 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \rho^{2}=\frac{1}{\parallel \mathbf{w} \parallel^{2}_{2}}=\frac{1}{\sum_{i=1}^{N}\alpha_{i}}=\frac{1}{\parallel \mathbf{\alpha} \parallel_{1} } $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>support vector machine 리뷰</category>
      <category>SVM</category>
      <category>SVM hard margin</category>
      <category>SVM margin</category>
      <category>SVM 설명</category>
      <category>SVM 이란</category>
      <category>서포트벡터머신이란</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/101</guid>
      <comments>https://ys-cs17.tistory.com/101#entry101comment</comments>
      <pubDate>Wed, 7 Sep 2022 19:28:26 +0900</pubDate>
    </item>
    <item>
      <title>[Kernel-based Learning] Theoretical foundation</title>
      <link>https://ys-cs17.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&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;Kernel-based learning의 기본적인 개념에 대해 알아보자.&lt;/p&gt;
&lt;h1&gt;Shatter&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 2차원 평면에 점이 1개가 있다고 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기준선을 기준으로 왼쪽이면 흰색, 오른쪽이면 파란색이라고 하면 점 1개는 아래와 같이 총 2가지 경우의 수를 갖는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t7B04/btrLk34gjuh/dPJPr3DtqKcnFIG24RKjQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t7B04/btrLk34gjuh/dPJPr3DtqKcnFIG24RKjQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t7B04/btrLk34gjuh/dPJPr3DtqKcnFIG24RKjQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft7B04%2FbtrLk34gjuh%2FdPJPr3DtqKcnFIG24RKjQ1%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;247&quot; height=&quot;416&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMvVE8/btrLgSwOKO8/OGP52tFjCK6r2gXoeNABvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMvVE8/btrLgSwOKO8/OGP52tFjCK6r2gXoeNABvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMvVE8/btrLgSwOKO8/OGP52tFjCK6r2gXoeNABvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMvVE8%2FbtrLgSwOKO8%2FOGP52tFjCK6r2gXoeNABvk%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;274&quot; height=&quot;468&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 점이 2개라고 하면 다음과 같은 경우의 수를 갖는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOLUBJ/btrLhtcg1Vv/57AQY5yqQhHuBk6s6pGyU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOLUBJ/btrLhtcg1Vv/57AQY5yqQhHuBk6s6pGyU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOLUBJ/btrLhtcg1Vv/57AQY5yqQhHuBk6s6pGyU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOLUBJ%2FbtrLhtcg1Vv%2F57AQY5yqQhHuBk6s6pGyU0%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;264&quot; height=&quot;445&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kKJee/btrLih95U20/cSkC2r3VIoPjkUE131Oe9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kKJee/btrLih95U20/cSkC2r3VIoPjkUE131Oe9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kKJee/btrLih95U20/cSkC2r3VIoPjkUE131Oe9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkKJee%2FbtrLih95U20%2FcSkC2r3VIoPjkUE131Oe9k%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;267&quot; height=&quot;456&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JX6DJ/btrLg87io9r/LCjTkgts09mXNl2bhExitk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JX6DJ/btrLg87io9r/LCjTkgts09mXNl2bhExitk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JX6DJ/btrLg87io9r/LCjTkgts09mXNl2bhExitk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJX6DJ%2FbtrLg87io9r%2FLCjTkgts09mXNl2bhExitk%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;278&quot; height=&quot;469&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 파란색, 흰색 또는 각 흰색, 파란색 총 4개의 가짓수를 갖는다. (모든 점은 독립)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점이 3개면 다음과 같이 8개의 경우로 나눌 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dz8oTO/btrLhPe68Ev/oI0oR2zHy94rRuXcWqbBSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dz8oTO/btrLhPe68Ev/oI0oR2zHy94rRuXcWqbBSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dz8oTO/btrLhPe68Ev/oI0oR2zHy94rRuXcWqbBSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdz8oTO%2FbtrLhPe68Ev%2FoI0oR2zHy94rRuXcWqbBSK%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;602&quot; height=&quot;305&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 점 4개면 어떻게 될까? 점이 4개인 경우에는 xor problem으로 인해 직선 1개로는 분류를 할 수 없다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;1116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ulHbO/btrLk4PCVQY/vNYaqMc5LszeX5GsT3Vz4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ulHbO/btrLk4PCVQY/vNYaqMc5LszeX5GsT3Vz4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ulHbO/btrLk4PCVQY/vNYaqMc5LszeX5GsT3Vz4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FulHbO%2FbtrLk4PCVQY%2FvNYaqMc5LszeX5GsT3Vz4k%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;507&quot; height=&quot;460&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;1116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Shatter를 할 수 있다는 것은 함수 $F$에 의해 $n$개의 point는 임의의 +1 또는 -1을 target value러 하는 분류 경계면의 생성이 가능하다는 말이고, 만약 차원이 $d$라고 하면, 최대 $d+1$개까지 shatter가 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2792&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmWdnW/btrLhZaM4A8/TOXIxRNAqQ1L39qKVkmHKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmWdnW/btrLhZaM4A8/TOXIxRNAqQ1L39qKVkmHKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmWdnW/btrLhZaM4A8/TOXIxRNAqQ1L39qKVkmHKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmWdnW%2FbtrLhZaM4A8%2FTOXIxRNAqQ1L39qKVkmHKK%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;780&quot; height=&quot;225&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2792&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 직선 분류기로 예를 들었지만, 만약 위 그림과 같이 circle 분류기 일 경우에는 2차원에서 2 point를 커버할 수 없다. 무조건 $d+1$개를 커버한다는 말은 아니다.&lt;/p&gt;
&lt;h1&gt;VC Dimension&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VC dimension은 어떤 분류기의 capacity를 측정하는 지표이다. 다른 말로 expressive power, richness 등등으로 불린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 CNN에서 hidden node의 개수가 높을 수록 model의 복잡성이 높아지고, 성능도 높아진다. VC dimension은 최대로 shatter 할 수 있는 point의 수이고, 만약 2차원에서 1, 2, 3개의 점에서 shatter가 가능하다면 3이 VC dimension이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VC dimension의 최대 개수 또한 $d+1$이다.&lt;/p&gt;
&lt;h1&gt;SRM&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SRM은 Structural Risk Minimization의 줄임말이고, 2000년 대 중반까지 커널 머신 시대일 때 많이 사용되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;1066&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wtvby/btrLhJeVW14/Qcts1skDmJvbgCWpyo2Iq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wtvby/btrLhJeVW14/Qcts1skDmJvbgCWpyo2Iq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wtvby/btrLhJeVW14/Qcts1skDmJvbgCWpyo2Iq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWtvby%2FbtrLhJeVW14%2FQcts1skDmJvbgCWpyo2Iq1%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;707&quot; height=&quot;518&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;1066&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그래프에서 $x$축이 모델의 복잡도이고, 복잡도가 커질 수록 capacity는 올라간다. 이에 비해 train error는 줄어든다. SRM은 내가 현재 가지고 있는 학습 데이터를 얼마나 잘 맞추냐에 비례하지만, 여기서 모델 복잡도까지 커버한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SRM의 주 목적은 test error의 가장 낮은 점을 나타내는 점을 찾는다. 위 그래프에서는 $R(f_{*})$ 지점을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$h$는 VC dimension으로 정의된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 성능과 복잡도를 고려해 적절한 모델을 선택하는 것이 SRM의 주목적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ R_{emp}[f]=\frac{1}{n}\sum_{i=1}^{n}L(f(x_{i}), y_{i}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$h$는 위에서 말한 바와 같이 VC dimension이고, $R_{emp}$는 zero-one loss이다. $x$가 입력, $y$가 정답이라고 할 때, 이들을 평균을 낸 것이 $R_{emp}$이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ R[f] \leq R_{emp}[f]+\sqrt{\frac{h(\ln{\frac{2n}{h}}+1)-\ln{\frac{\delta}{4}}}{n}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SRM은 2가지 term으로 bound 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째는 $R_{emp}$이고, 두 번째 루트 식에서 $n$은 학습 데이터의 개수, $\delta$는 0부터 1까지의 확률 값을 나타내는 parameter, $h$는 VC dimension이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$n$이 증가하면 capacity term은 감소한다. 이 말은 $R[f]$의 SRM도 감소한다. $h$가 증가하면 capacity term이 증가한다. 이에 따라 SRM도 증가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hidden node의 개수가 5인 것과 10인 것이 있는데 이 중 train error가 둘 다 5%라고 하면 SRM은 10인 것이 더 높다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1062&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T53e1/btrLhgqy0R3/QarjUsaOiv5nkabJPbXmP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T53e1/btrLhgqy0R3/QarjUsaOiv5nkabJPbXmP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T53e1/btrLhgqy0R3/QarjUsaOiv5nkabJPbXmP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT53e1%2FbtrLhgqy0R3%2FQarjUsaOiv5nkabJPbXmP0%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;655&quot; height=&quot;272&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1062&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥 러닝 알고리즘은 SRM 관점에서 model capacity가 매우 높다. parameter가 매우 많기 때문이다. 하지만 overfitting을 잡아줌으로써 딥 러닝 모델은 capacity가 높아도 error가 낮아졌다. 이때부터 딥 러닝의 시대가 시작되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 성능이 좋은 딥 러닝 모델도 좋지만, 여전히 전통적 이론이 더 좋은 성능인 분야들이 많이 남아 있다.&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>Shatter</category>
      <category>shatter 설명</category>
      <category>shatter 의미</category>
      <category>shatter란</category>
      <category>SRM</category>
      <category>SRM 설명</category>
      <category>SRM란</category>
      <category>VC dimension</category>
      <category>VC dimension 설명</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/100</guid>
      <comments>https://ys-cs17.tistory.com/100#entry100comment</comments>
      <pubDate>Sat, 3 Sep 2022 16:12:28 +0900</pubDate>
    </item>
    <item>
      <title>[Anomaly Detection] Isolation Forest and Its Variations</title>
      <link>https://ys-cs17.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Isolation Forest&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Isolation forest의 motive는 기본적으로 이상치 데이터는 소수의 데이터로 구성이 되어있다고 생각하고, 이 데이터들은 특정한 속성 값들이 정상 범주의 데이터보다는 매우 다른 속성 값들을 가질 것이라는 가정을 하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 input data에 대해 isolation을 할 수 있는 tree를 만들 수 있다면, 이상치 데이터는 isolation이 쉬울 것이고, 정상 데이터는 isolation을 시키는 것이 어려울 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6Dgde/btrK8fShYD5/0Ccrk1TKIF0cJ9Vo8FKsx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6Dgde/btrK8fShYD5/0Ccrk1TKIF0cJ9Vo8FKsx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6Dgde/btrK8fShYD5/0Ccrk1TKIF0cJ9Vo8FKsx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Dgde%2FbtrK8fShYD5%2F0Ccrk1TKIF0cJ9Vo8FKsx1%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;592&quot; height=&quot;323&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;644&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 plot에서 파란색 $x_{i}$는 정상 데이터이고, $x_{0}$는 이상치 데이터이다. 우리는 각 데이터를 고립시키는 트리를 만든다. 트리를 만드는 방법은 매우 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Split point라는 위 plot에서 수직, 수평으로 그어진 선들을 랜덤으로 선택한다. Split point를 그었으면, 해당 데이터가 없는 부분을 버리게 된다. 이 과정을 계속 반복하다 보면 결국 데이터가 고립된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(a)의 경우는 총 11번의 split point를 통해 $x_{i}$를 고립시켰고, (b)의 경우에는 총 4번의 split point를 통해 $x_{0}$을 고립 시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상 데이터의 경우에는 비슷한 특성을 갖고 있기 때문에, 서로 뭉쳐 있는 모습을 볼 수 있고, 비정상 데이터는 이와 반대로 멀리 떨어져 있는 것을 볼 수 있다. 따라서 정상 데이터일수록 고립시키기 힘든 반면, 비정상 데이터일 수록 고립을 시키기 쉬워 진다. 이렇게 split을 몇 번 했는지가 isolation forest에서는 abnomal score가 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lh00A/btrK96gbX9O/2qS8mAl04EZhWTLE7JvCm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lh00A/btrK96gbX9O/2qS8mAl04EZhWTLE7JvCm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lh00A/btrK96gbX9O/2qS8mAl04EZhWTLE7JvCm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flh00A%2FbtrK96gbX9O%2F2qS8mAl04EZhWTLE7JvCm1%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;437&quot; height=&quot;382&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 plot은 log scale이고, Isolation tree를 1000개 생성하였을 때 결과를 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상 데이터의 경우 평균 path length가 13, 비정상 데이터의 경우에는 4 정도로 수렴하는 모습을 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Path length는 split을 몇 번 했는지와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2214&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sy7kJ/btrK5yrAMc7/brrjZ7ioHFPbQXrAT376p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sy7kJ/btrK5yrAMc7/brrjZ7ioHFPbQXrAT376p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sy7kJ/btrK5yrAMc7/brrjZ7ioHFPbQXrAT376p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsy7kJ%2FbtrK5yrAMc7%2FbrrjZ7ioHFPbQXrAT376p1%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;621&quot; height=&quot;234&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2214&quot; data-origin-height=&quot;834&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;정상 데이터일 수록 더 깊은 depth에 위치하게 되고, 사용자는 왼쪽과 같이 threshold를 통해 최종적으로 해당 데이터에 대해 normal, abnormal을 결정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Isolation tree의 종료 조건은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Tree의 맨 마지막 depth까지 도달하였을 때 (맨 마지막 depth는 사용자 지정)&lt;/li&gt;
&lt;li&gt;우연히 데이터 포인트 2개가 같은 설명 변수를 가지고 있을 때&lt;/li&gt;
&lt;li&gt;모든 데이터 포인트의 instance가 같은 값을 가지고 있을 때&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;충분히 많은 tree를 만들고 나면 path length를 구한다. 여기서 path length는 tree edge의 개수이다. 그리고 오일러 상수를 통해 평균 path length를 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 구한 평균 path length를 $c(n)$이라 하고, $h(x)$를 1개의 tree에 대해 $x$를 고립시키기 위한 path length라고 할 때 아래 수식을 사용하여 최종적인 anomaly score를 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ Anomaly \ score=s(x,n)=2^{-\frac{E(h(x))}{c(n)}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Anomaly score가 1에 가까워지면 비정상일 가능성이 높고, 0에 가까워지면 정상일 가능성이 높아진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1996&quot; data-origin-height=&quot;1066&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbGx06/btrK49FvAOc/xgQnGy4IIKdftKLSQkeGk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbGx06/btrK49FvAOc/xgQnGy4IIKdftKLSQkeGk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbGx06/btrK49FvAOc/xgQnGy4IIKdftKLSQkeGk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbGx06%2FbtrK49FvAOc%2FxgQnGy4IIKdftKLSQkeGk0%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;592&quot; height=&quot;316&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1996&quot; data-origin-height=&quot;1066&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;위 plot은 각 4096, 128개의 instance를 통해 isolation tree를 사용한 결과이다. 정상 데이터와 비정상 데이터의 area를 보면 거의 차이가 없는 모습을 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에 따르면 대략 256개의 instance만 사용해도 전체 데이터를 사용했을 때랑 성능 차이가 없다고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;1052&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCs3TZ/btrLavmjyae/IGgGoUc7MdzHZy59qQYEF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCs3TZ/btrLavmjyae/IGgGoUc7MdzHZy59qQYEF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCs3TZ/btrLavmjyae/IGgGoUc7MdzHZy59qQYEF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCs3TZ%2FbtrLavmjyae%2FIGgGoUc7MdzHZy59qQYEF0%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;649&quot; height=&quot;379&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;1052&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과를 보면 다른 알고리즘에 비해 AUC가 매우 높은 모습을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능과 계산 복잡도를 생각하면 활용의 가치가 매우 높고, 해당 논문이 나온지는 시간이 14년 정도가 지났지만, 아직까지도 현업에서 활용이 되고 있는 anomaly detection 방법론이다.&lt;/p&gt;
&lt;h1&gt;Extended Isolation Forests&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2rt4f/btrK4VgtGRT/VOSLSByxcrTpYyDPIprvsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2rt4f/btrK4VgtGRT/VOSLSByxcrTpYyDPIprvsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2rt4f/btrK4VgtGRT/VOSLSByxcrTpYyDPIprvsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2rt4f%2FbtrK4VgtGRT%2FVOSLSByxcrTpYyDPIprvsK%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;2206&quot; height=&quot;568&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Exteneded isolation forest는 2018년에 나온 비교적 최근의 논문이다. 위 plot에서 흰색에 가까울수록 정상이라고 판별할 가능성이 높다. 이전 standard isolation forest의 경우 왼쪽 plot과 같은 데이터에 대해서는 이상치를 잘 판별한다. 하지만 오른쪽 plot과 같이 data의 분포가 2개로 몰려있을 때는 오른쪽 위, 왼쪽 아래도 anomaly score가 작은 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 단점을 보완하고자 extended isolation forest는 논문의 이름과 같이 기존 isolation forest를 살짝 수정하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;2162&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY1JFC/btrK7BVpPnI/T8RTf5duD9A6mBu4bvhkU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY1JFC/btrK7BVpPnI/T8RTf5duD9A6mBu4bvhkU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY1JFC/btrK7BVpPnI/T8RTf5duD9A6mBu4bvhkU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY1JFC%2FbtrK7BVpPnI%2FT8RTf5duD9A6mBu4bvhkU0%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;2162&quot; height=&quot;706&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;2162&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념은 비교적 간단하다. 위 그림에서 빨간 rect 부분까지 정상이라고 판단하는 이유는 가로, 세로 선들을 통해 isolation을 시키기 때문이다. 빨간색 영역도 보면 고립시키기에 힘든 영역이다. 따라서 해당 영역도 정상 데이터 영역으로 보는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 isolation forest는 데이터에 대한 설명력이 별로 없다. 이 이야기는 중요도, 영향도를 파악을 하지 않는다는 말이다. 따라서 우리가 굳이 split을 수직으로 할 필요가 없어진다. Extended isolation forest는 split을 기울기가 있는 선분으로 진행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2124&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v72yY/btrK496zKBi/DsSISF3rch7DaiIgluJdgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v72yY/btrK496zKBi/DsSISF3rch7DaiIgluJdgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v72yY/btrK496zKBi/DsSISF3rch7DaiIgluJdgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv72yY%2FbtrK496zKBi%2FDsSISF3rch7DaiIgluJdgK%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;722&quot; height=&quot;340&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2124&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 데이터 셋이지만 split line이 확연히 차이나는 모습을 볼 수 있다.&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>extended isolation forest</category>
      <category>extended isolation forest 설명</category>
      <category>isolation forest</category>
      <category>isolation forest 설명</category>
      <category>isolation forest란</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/99</guid>
      <comments>https://ys-cs17.tistory.com/99#entry99comment</comments>
      <pubDate>Thu, 1 Sep 2022 14:27:08 +0900</pubDate>
    </item>
    <item>
      <title>[Dimensionality Reduction] Unsupervised Method (Nonlinear embedding) 2: t-SNE</title>
      <link>https://ys-cs17.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;SNE (Stochastic Neighbor Embedding)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SNE에서는 local distance를 보존하는 것이 local이 아닌 객체에 대한 distance보다 중요하는 것이 핵심이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLE에서는 정해진 개수의 이웃들 간의 weight를 찾고, 이를 저 차원으로 축소하였다. LLE에서는 이웃의 변화가 없었다. SNE에서는 객체 두 쌍의 거리가 local인 것을 확률적으로 결정한다. 이 말은 가깝게 있는 객체뿐만이 아니라, 조금 더 멀리 있는 객체들도 확률적으로는 낮을 뿐이지 뽑힐 수도 있다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1개의 data point가 다른 data point를 이웃으로 뽑는 것을 확률로 표현할 수 있다. $i$를 기준으로 해서 $j$번째 이웃을 뽑을 확률을 표현할 수 있고, 이를 고차원에서 저차원의 $j$를 뽑는 확률, 저차원에서 고차원의 $j$를 뽑는 확률로 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ p_{j \mid i}=\frac{e^{-\frac{\parallel \mathbf{x}{i}-\mathbf{x}{j} \parallel^{2}}{2 \sigma^{2}{i}}}}{\sum{k\neq i}e^{-\frac{\parallel \mathbf{x}{i}-\mathbf{x}{k} \parallel^{2}}{2 \sigma^{2}_{i}}}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ q_{j \mid i}=\frac{e^{-\parallel \mathbf{y}{i}-\mathbf{y}{j} \parallel^{2}}}{\sum_{k\neq i}e^{-\parallel \mathbf{y}{i}-\mathbf{y}{k} \parallel^{2}} } $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$p_{j \mid i}$는 원래 차원에서 객체 $i$가 다른 객체 $j$를 이웃으로 선택할 확률이고, $q_{j\mid i}$는 축소된 차원에서 객체 $i$가 원래 차원 $j$를 이웃으로 선택할 확률이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 2가지 확률에 대해서 정의하였는데, 식을 살펴보면 분포는 nomalization을 진행한다. 핵심은 분자에 있는데, 이는 서로 가까울 수록 확률 값이 커지고, 멀어질수록 확률은 낮아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 LLE에서는 구체적인 개수 안에 들어오는 이웃에 대해서는 1, 아닌 객체들에 대해서는 0을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 데이터는 같은 공간에 있지 않기 때문에 우리는 서로 다른 공간에 대해서 다른 radii를 사용해야 한다. radii를 통해 충분히 많은 이웃이 반경에 들어가야 되기 때문이다. radii가 크면 이웃의 distribution entropy는 커질 것이고, 반대로 작으면 낮아질 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 우리가 적절한 entropy를 사용하기 위해 radii를 잘 조절해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떠한 문제를 해결하기 위해서는 우리에게 주어진 것이 무엇이고, 찾아야 하는 미지수를 명확하게 정해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 현재 $p_{j \mid i}=f(x), \ q_{j \mid i}=q(y)$라는 식을 정의하였고, 현재는 $x$를 알고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식을 통해 $p_{j \mid i}$는 계산이 가능하다. 하지만 우리가 실절적으로 알아야 하는 것은 $u$이고, 이는 저차원 coordinate system이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리의 목표는 $p_{j \mid i}$와 $q_{j \mid i}$를 최대한 동일하게 만들고 싶은 것이 목적이다. 이를 위해 2개의 분포를 비교하는 데 있어 KL divergence를 사용할 수 있다. 이는 두 분포의 유사성을 파악할 수 있지만 distance matrix는 아니다. 이를 아래 수식과 같이 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ cost = \sum_{i}KL(P_{i}||Q_{i})=\sum_{i}\sum_{j}p_{j\mid i}\log\frac{p_{j \mid i}}{q_{j \mid i}} $$&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1646&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4kXL6/btrKXHVzaJe/YZyrSA0NUvIpG4DE7ksS3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4kXL6/btrKXHVzaJe/YZyrSA0NUvIpG4DE7ksS3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4kXL6/btrKXHVzaJe/YZyrSA0NUvIpG4DE7ksS3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4kXL6%2FbtrKXHVzaJe%2FYZyrSA0NUvIpG4DE7ksS3K%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;673&quot; height=&quot;237&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1646&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KL divergence를 통해 나온 summation이 cost function이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 cost function을 $y$에 대해 편미분을 진행함으로써 우리가 구해야 하는 최종적인 수식을 정의할 수 있다. 결과는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial C}{\partial y_{i}}=2\sum_{j}(y_{j}-y_{i})(p_{j\mid i}-q_{j \mid i}+p_{i\mid j}-q_{i \mid j}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식이 어떻게 나오는지 계산을 통해 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ C = \sum_{i}KL(P_{i}||Q_{i})=\sum_{i}\sum_{j}p_{j\mid i}\log\frac{p_{j \mid i}}{q_{j \mid i}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cost function의 log를 분해하면 다음과 같게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ C = \sum_{i}\sum_{j}p_{j\mid i}\log p_{j \mid i} - \sum_{i}\sum_{j} p_{j \mid i} \log q_{j\mid i} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 첫번째 term은 고차원에 대한 수식이기 때문에 상수로 취급한다. ($y$이랑 연관이 없다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상수를 없앤 식을 $C'$라고 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ C' = -\sum_{i}\sum_{j}p_{j \mid i}\log q_{j \mid i} \ \ (\frac{\partial C}{\partial y_{t}} =\frac{\partial C'}{\partial y_{t}}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 식을 $t$가 앞쪽에 있는지, 뒤에 있는지, 아예 없는 case에 따라 값이 달라진다. 이러한 이유로 위 식을 3개의 term으로 나눈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ C'=-\sum_{i}p_{t\mid i}\log q_{t\mid i}-\sum_{j}p_{j \mid t} \log q_{j\mid t} - \sum_{i \neq t}\sum_{j \neq t}p_{i \mid j}\log q_{i \mid j} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 식을 통해 cost function의 gradient를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계산의 편의를 위해 $d_{ti}$를 다음과 같이 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ d_{ti}=exp(-\parallel y_{t}-y_{i}\parallel^{2})= d_{it} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d_{ti}$는 $d_{it}$와 같고, 위 식을 $y_{t}$에 대해 편미분을 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial d_{ti}}{\partial y_{t}}=d'{ti} = -2(y{t}-y_{i})exp(-\parallel y_{t}-y_{i} \parallel^{2})=-2(y_{t}-y_{i})d_{ti} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 $d_{ti}$를 사용하여 3가지 case에 대한 $q$를 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \begin{align} q_{t\mid i} &amp;amp;=\frac{exp(-\parallel y_{i}-y_{t} \parallel^{2})}{\sum_{k \neq i} exp(-\parallel y_{i}-y_{k} \parallel^{2})} = \frac{d_{it}}{\sum_{k \neq i}d_{ik}} \\ q_{j\mid t}&amp;amp;=\frac{exp(-\parallel y_{t}-y_{j} \parallel^{2})}{\sum_{k \neq t} exp(-\parallel y_{t}-y_{k} \parallel^{2})} = \frac{d_{tj}}{\sum_{k \neq t}d_{tk}} \\ q_{i\mid j}&amp;amp;=\frac{exp(-\parallel y_{j}-y_{i} \parallel^{2})}{\sum_{k \neq j} exp(-\parallel y_{j}-y_{k} \parallel^{2})} = \frac{d_{ji}}{\sum_{k \neq j}d_{jk}} \end{align} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식들을 이용하여 $C'$에 대한 편미분을 진행하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Term 1&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial}{\partial y_{t}}(-\sum_{i}p_{t\mid i}\log q_{t\mid i})= -\sum_{i}p_{t \mid i}\cdot \frac{1}{q_{t\mid i}} \cdot \frac{\partial q_{t \mid i}}{ \partial y_{t}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그를 미분하면 위 수식과 같이 전개된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = -\sum_{i}p_{t \mid i} \cdot \frac{1}{q_{t\mid i}}\cdot \frac{d_{it}' \cdot (\sum_{k \neq i}d_{ik})-d_{it} \cdot d_{it}'}{(\sum_{k \neq i}d_{ik})^{2}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d$에 대한 summation에서 $t$가 존재하기 때문에 위와 같이 식이 전개된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = -\sum_{i}p_{t \mid i} \cdot \frac{1}{q_{t\mid i}} \cdot \frac{-2(y_{t} - y_{i}) \cdot d_{it} \cdot (\sum_{k \neq i} d_{ik})+2(y_{t} -y_{i}) \cdot d_{it}^{2}}{(\sum_{k \neq i}d_{ik})^{2}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 정의한 $d_{ti}' = -2(y_{t}-y_{i})d_{ti}$를 대입한 결과이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = -\sum_{i}p_{t \mid i} \cdot \frac{1}{q_{t\mid i}} \cdot (-2(y_{t}-y_{i})\cdot q_{t \mid i}+ 2(y_{t}-y_{i})\cdot q_{t \mid i}^{2}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d_{it} = q_{t \mid i} \cdot \sum_{k \neq i}d_{ik}$를 사용하여 약분한 결과이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = \sum_{i}p_{t \mid i} \cdot 2(y_{t}-y_{i})(1-q_{t \mid i}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$q_{t \mid i}$를 약분해주면 최종적인 식을 얻을 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Term 2&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial}{\partial y_{t}}(-\sum_{j}p_{j\mid t}\log q_{j\mid t}) = -\sum_{j}p_{j \mid t}\cdot \frac{1}{q_{j\mid t}} \cdot \frac{\partial q_{j \mid t}}{ \partial y_{t}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Term 1과 동일하게 $log$를 분리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = -\sum_{j}p_{j \mid t}\cdot \frac{1}{q_{j\mid t}}\cdot \frac{d_{tj}'\cdot (\sum_{k \neq t}d_{tk}) - d_{tj} \cdot (\sum_{k \neq t} d'{tk})}{(\sum{k \neq t}d_{tk})^{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;$$ = -\sum_{j}p_{j \mid t}\cdot \frac{1}{q_{j\mid t}}\cdot \frac{-2(y_{t}-y_{j})\cdot d_{tj}\cdot (\sum_{k \neq t}d_{tk})-d_{tj}\cdot (\sum_{k \neq t}d_{tk}')}{(\sum_{k \neq t}d_{tk})^{2}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d_{tj}'$를 대입한 결과이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = 2 \sum_{j}p_{j \mid t} \cdot (y_{t} - y_{j})+\sum_{j} p_{j \mid t}\cdot \frac{\sum_{k \neq t}d_{tk}'}{\sum_{k \neq t}d_{tk}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞 단과 뒷 단 둘 다 $\sum_{k \neq t}d_{tk}$에 대해 약분하면 나오는 결과이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = 2\sum_{j}p_{j \mid t} \cdot (y_{t} - y_{j}) + \sum_{j}\cdot \frac{d'{tj}}{\sum{k \neq t}d_{tk}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞 단은 그대로 내려오고, 뒷 단의 $\sum_{j}p_{j \mid t} =1$을 만족하기 때문에 없어진다. 분자는 $\sum_{k\neq t}d'{tk}= \sum{k}d_{tk}'$가 성립되고 이로 인해 $d'_{tt} =0$이 되기 때문이다. summation을 $j$로 바꾼 것은 계산의 편의상 변경한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = 2\sum_{j}p_{j \mid t} \cdot (y_{t} - y_{j}) -2\sum_{j}(y_{t}-y_{j})\cdot \frac{d_{tj}}{\sum_{k \neq t}d_{tk}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d_{tj}' = -2(y_{t}-y_{j})d_{tj}$를 대입한 결과이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = 2\sum_{j}p_{j \mid t} \cdot (y_{t} - y_{j}) -2\sum_{j}(y_{t}-y_{j})\cdot q_{j \mid t} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$q_{j\mid t} =\frac{d_{tj}}{\sum_{k \neq t}d_{tk}}$를 대입한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ =2\sum_{j}(y_{t} -y_{j})(p_{j \mid t}- q_{j \mid t}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식을 묶어 최종적인 term 2에 대한 수식을 정리하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Term 3&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial}{\partial y_{t}}(- \sum_{i \neq t}\sum_{j \neq t}p_{i \mid j}\log q_{i \mid j})= -\sum_{i \neq t}\sum_{j \neq t}p_{i\mid j}\cdot \frac{1}{q_{i \mid j}}\cdot \frac{\partial q_{i \mid j}}{\partial y_{t}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일하게 $log$를 풀어 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = -\sum_{i \neq t}\sum_{j \neq t} p_{i \mid j}\cdot \frac{1}{q_{i \mid j}}\cdot \frac{d'{ji} \cdot \sum{k \neq j}d_{jk} - d_{ji} \cdot d_{jt}'}{(\sum_{k \neq j}d_{jk})^{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;$$ = -\sum_{i \neq t}\sum_{j \neq t} p_{i \mid j}\cdot \frac{1}{q_{i \mid j}}\cdot \frac{2(y_{t}-y_{t} \cdot d_{ji}\cdot d_{jt})}{(\sum_{k \neq j}d_{jk})^{2}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d_{ji}'$는 $t$와 상관없는 변수이기 때문에 0이 되고, $d_{jt}'$를 풀어준 결과가 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = -\sum_{i \neq t}\sum_{j \neq t} p_{i \mid j}\cdot \frac{1}{q_{i \mid j}}\cdot 2(y_{t}-y_{j})\cdot q_{i \mid j}\cdot q_{t \mid j} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$q_{j\mid t}=\frac{exp(-\parallel y_{t}-y_{j} \parallel^{2})}{\sum_{k \neq t} exp(-\parallel y_{t}-y_{k} \parallel^{2})} = \frac{d_{tj}}{\sum_{k \neq t}d_{tk}}$, $q_{i\mid j}=\frac{exp(-\parallel y_{j}-y_{i} \parallel^{2})}{\sum_{k \neq j} exp(-\parallel y_{j}-y_{k} \parallel^{2})} = \frac{d_{ji}}{\sum_{k \neq j}d_{jk}}$를 대입한 결과이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = -\sum_{i \neq t}\sum_{j \neq t} 2(y_{t}-y_{j})\cdot p_{i \mid j}\cdot q_{t \mid j} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$q_{i \mid j}$를 약분하면 최종적인 term 3에 대한 식을 구할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Tern 1 + Term 3&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \sum_{i}p_{t \mid i} \cdot 2(y_{t}-y_{i})(1 - q_{t \mid i }) - \sum_{i \neq t}\sum_{j \neq t} 2(y_{t}-y_{j})\cdot p_{i \mid j} \cdot q_{t\mid j} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 순차적으로 모든 term에 대해 더해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ = 2\sum_{j}(y_{t}-y_{j}) \cdot p_{t \mid i} - 2 \sum_{j}(y_{t}-y_{j})\cdot p_{t \mid j} \cdot q_{t\mid j}- 2\sum_{i \neq t}\sum_{j \neq t} (y_{t}-y_{j})\cdot p_{i \mid j} \cdot q_{t\mid j} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Term 1에 있는 summation에 대해 $i$를 $j$로 변경해준다. 어차피 문자만 달라지는 거라 상관이 없다. 그러고 나서 term 1 summation에 있는 식들을 전개하면 위와 같은 결과가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ =2\sum_{j}(y_{t}-y_{j})\cdot p_{t \mid j}-2\sum_{i}\sum_{j}(y_{t}-y_{j})\cdot p_{i\mid j}\cdot q_{t \mid j} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러고 나서 term 3의 summation을 보면 $j \neq t$라는 조건이 있지만, $y_{t}-y_{t}=0$이기 때문에 $j$로 바꿔 쓸 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 $i \neq t$라는 조건은 2번째 식에 존재하는 $p_{t\mid j}$은 모든 $j$에 대한 summation이고, term 3에 있는 $p_{i\mid j}$는 $i$가 $t$가 아닐 때만 성립하기 때문에, 둘이 합쳐서 위 식과 같이 표현할 수 있다. 따라서 2번째 식을 $j$에서 $i$로 치환하여 다음과 같은 결과가 나온 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ =2\sum_{j}(y_{t}-y_{j})\cdot p_{t \mid j}-2\sum_{j}\sum_{i}p_{i \mid j}\cdot (y_{t}-y_{j})\cdot q_{t\mid j} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식을 계산하기 쉽게 순서를 바꿔준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ =2\sum_{j}(y_{t}-y_{j})\cdot p_{t \mid j}-2\sum_{j}(y_{t}-y_{j})\cdot q_{t\mid j} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\sum_{i}p_{i \mid j}=1$이기 때문에 $i$에 대한 summation을 제거할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ =2\sum_{j}(y_{t}-y_{j})( p_{t \mid j}-q_{t\mid j}) $$&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;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Tern 1 + Term 2 + Term 3&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ 2\sum_{j}(y_{t}-y_{j})( p_{t \mid j}-q_{t\mid j}) + 2\sum_{j}(y_{t}-y_{j})(p_{t \mid j}-q_{t \mid j}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 구한 식에서 term 2 식을 더해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ 2\sum_{j}(y_{t}-y_{j})(p_{t\mid j}-q_{t\mid j}+p_{j \mid t}-q_{j\mid t}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리를 해줌으로써 cost function에 대한 gradient를 간단한 수식으로 정리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 식을 가지고 gradient descent와 같은 gradient update 함수에 넣어 cost를 최소화할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Symmetric SNE&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지는 SNE의 cost function에 대한 도함수를 계산했다. 기존까지 SNE는 $p_{i \mid j}$와 $p_{j \mid i}$는 다르게 계산을 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Symmetric SNE는 $p_{i \mid j}$를 $2n$으로 나눔으로써 이를 통합한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식으로 표현하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ p_{ij}=\frac{e^{-\frac{\parallel \mathbf{x}{i} -\mathbf{x}{j} \parallel^{2}}{2 \sigma^{2}{i}}}}{\sum{k \neq l}e^{-\frac{\parallel \mathbf{x}{k}-\mathbf{x}{l}\parallel^{2}}{2\sigma^{2}_{i}}}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 기존 $p_{ij}$에 대한 확률식이다. 이를 아래 수식과 같이 변형하여 통합한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ p_{ij}=\frac{p_{j\mid i}+p_{i\mid j}}{2n}, \ \ \sum_{j}p_{ij}&amp;gt;\frac{1}{2n} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$2n$으로 나눔으로써 $p_{ij}$를 위와 같이 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 정의를 통해 cost function을 구하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ cost = \sum_{i}KL(P_{i}||Q_{i})=\sum_{i}\sum_{j}p_{j\mid i}\log\frac{p_{j \mid i}}{q_{j \mid i}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial C}{\partial y_{i}}=4\sum_{j}(y_{j}-y_{i})(p_{ij}-q_{ij}) $$&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;1300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPWNZV/btrKU8lP8G9/WZ6BvHF74dzVDt6VFnDiK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPWNZV/btrKU8lP8G9/WZ6BvHF74dzVDt6VFnDiK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPWNZV/btrKU8lP8G9/WZ6BvHF74dzVDt6VFnDiK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPWNZV%2FbtrKU8lP8G9%2FWZ6BvHF74dzVDt6VFnDiK1%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;393&quot; height=&quot;352&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;1300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Symmetric SNE를 적용하면 위와 같은 plot의 결과가 나온다. 이는 비교적 각 객체의 distance를 잘 보존한 것 같지만, crowding problem이 존재한다. 이는 객체가 멀어질 때 가까이 있는 객체들은 완만하게 감소하는데, 일정 이상 멀어지면 감소하는 폭이 커지는 것을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 가우시안 분포를 기준으로 객체를 고려하였기 때문에 생기는 문제이다.&lt;/p&gt;
&lt;h1&gt;T-SNE&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Symmetric SNE의 crowding problem을 해결하기 위해 T-SNE라는 개념이 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 기존 가우시안 분포를 사용하여 이웃 객체를 선택한 것을 T 분포로 대체하여 먼 객체에 대해 더욱 굳건해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T-SNE의 $p_{ij}$는 기존과 같이 가우시안을 사용하지만, 저 차원에서 원래의 차원에서 뽑는 $q_{ji}$에 대해서는 T 분포를 사용한다. 수식의 정의는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ q_{ji}=\frac{(1+\parallel y_{i}-y_{j} \parallel^{2})^{-1}}{\sum_{k\neq l}(1+\parallel y_{k}-y_{l} \parallel^{2})^{-1}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 식들을 통해 cost function의 gradient 수식은 다음과 같이 정의된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial C}{\partial y_{i}}=4\sum_{j}(y_{j}-y_{i})(p_{ij}-q_{ij})(1+\parallel y_{i}-y_{j} \parallel^{2})^{-1} $$&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2622&quot; data-origin-height=&quot;1126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJHq5/btrKZC0gvDL/SjIK1GauszbyYSZWcmKaYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJHq5/btrKZC0gvDL/SjIK1GauszbyYSZWcmKaYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJHq5/btrKZC0gvDL/SjIK1GauszbyYSZWcmKaYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJHq5%2FbtrKZC0gvDL%2FSjIK1GauszbyYSZWcmKaYK%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;650&quot; height=&quot;279&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2622&quot; data-origin-height=&quot;1126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t-SNE과 MDS를 비교하면 전자에서는 전체 이웃에 대한 확률을 가지고 이웃을 선택하기 때문에 비슷한 객체들끼리 몰려있는 모습을 볼 수 있다. MDS는 전체 객체의 대한 분산을 보존하려는 경향이 있어 다음과 같은 모습을 보인다.&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>SNE</category>
      <category>sne 설명</category>
      <category>sne 정리</category>
      <category>sne 증명</category>
      <category>symmetric sne</category>
      <category>t-SNE</category>
      <category>t-sne 설명</category>
      <category>t-sne 정리</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/98</guid>
      <comments>https://ys-cs17.tistory.com/98#entry98comment</comments>
      <pubDate>Tue, 30 Aug 2022 14:34:09 +0900</pubDate>
    </item>
    <item>
      <title>[Dimensionality Reduction] Unsupervised Method (Nonlinear embedding) 1: ISOMAP, LLE</title>
      <link>https://ys-cs17.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ISOMAP&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ISOMAP은 MDS 절차 중 변환 이전에만 다른 알고리즘이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA와 MDS는 계산적으로 효율적이고, global optima를 찾을 수 있다. 하지만 선형 방법론의 단점 중 하나는 원래 데이터가 선형이 아니면 데이터를 파악하기가 힘들어진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2930&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s3jaO/btrKcwBOtnU/bVspvZeklpfYaDDLiHdks0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s3jaO/btrKcwBOtnU/bVspvZeklpfYaDDLiHdks0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s3jaO/btrKcwBOtnU/bVspvZeklpfYaDDLiHdks0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs3jaO%2FbtrKcwBOtnU%2FbVspvZeklpfYaDDLiHdks0%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;751&quot; height=&quot;199&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2930&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 MDS나 PCA를 적용하면 3차원에서 최단 거리를 사용하기 때문에 부정확하다. 이 말은 선형 알고리즘을 사용하면 A에서 점선과 같이 부정확한 distance를 찾는다는 뜻이다. 우리는 청록색 직선과 같은 결과를 원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 하려면 A에서 B로 graph 형태로 변환한다. 그리고 나서 가까운 이웃들을 따라가다 보면 목적지에 도달하게 된다. C와 같은 그림을 manifold라고 하는데, 우리는 정확한 직선을 찾지 못해서 약간은 돌아가지만 빨간 선처럼 최대한 최단 거리를 구하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ISOMAP은 MDS와 달리 가까운 노드들을 그래프로 변환 시켜 최단 거리를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ISOMAP의 절차는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step 1.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이웃간 그래프를 생성한다. 그래프를 생성하는 방법은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\epsilon$-Isomap : $\epsilon$ 보다 가까운 2개의 node를 연결한다.&lt;/li&gt;
&lt;li&gt;$k$-Isomap : 만약 $i$가 $j$의 k-nearest neighbor 중 하나라면 $i$와 $j$를 연결한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step 2.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최단 거리를 찾는다. 최단 거리 distance를 구하는 알고리즘을 찾아 최단 거리를 통한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step 3.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 구한 distance matrix를 통해 MDS를 적용한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;LLE (Locally Linear Embedding)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLE는 eigenvector를 사용한 비선형 차원 축소법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLE는 PCA와 비슷하게 eigenvector를 사용한다. local optima에 빠지지 않고, 고차원의 데이터를 우리가 원하는 차원의 개수만큼 lower dimesion으로 변환할 수 있다. ISMAP과 LLE는 local 정보를 이용하는 면에서 공통점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLE의 절차는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step 1.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 data point의 이웃을 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step 2.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Original data를 가장 최적으로 재구축할 수 있는 이웃들의 가중치를 찾고, 아래 cost function을 통해 최적화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ E(\mathbf{W})=\sum_{i}\mid \mathbf{x}{i}-\sum{j}\mathbf{W}{ij}\mathbf{x}{j}\mid^{2} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 original data는 $\mathbf{x}{i}$이고, $\mathbf{x}{j}$는 이웃이고, 가중치는 original data를 재구축하기 위해 이웃에 부여되는 가중치이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 이웃을 가지고 original data를 재구축할 수 있는 경우, 즉 이웃들 간 polygon 안에 original data가 위치한 경우에는 가중치가 0이 된다. 그렇지 않은 경우에는 해당 data에 해당하는 이웃들의 weight의 합은 1이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Step 3.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;original data를 가장 잘 구축하는 vector를 weight $\mathbf{W}$를 통해 eigenvector를 최소화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \Phi(\mathbf{W})=\sum_{i}\mid \mathbf{y}{i}-\sum{j}\mathbf{W}{ij}\mathbf{y}{i}\mid^{2} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbf{W}_{ij}$ 는 이미 step 2에서 구한 값이다. 우리는 이를 통해 $\mathbf{y}$를 최적화할 것이다. $\mathbf{y}$는 낮은 차원으로 임베딩 된 data의 좌표 값이다.&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-filename=&quot;2.png&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;1492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5MYf6/btrJ8qIvwNG/pJkWeAvvOtP1I9G2CC6kF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5MYf6/btrJ8qIvwNG/pJkWeAvvOtP1I9G2CC6kF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5MYf6/btrJ8qIvwNG/pJkWeAvvOtP1I9G2CC6kF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5MYf6%2FbtrJ8qIvwNG%2FpJkWeAvvOtP1I9G2CC6kF0%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;484&quot; height=&quot;481&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;1492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 step 3에서 재구축된 $\mathbf{y}$를 원본과 최소화하는 문제로 변형할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \min \Phi(\mathbf{W})=\sum_{i}\mid \mathbf{y}{i}-\sum{j}\mathbf{W}{ij}\mathbf{y}{i}\mid^{2} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLE 논문에서는 최소화 문제를 잘 풀기 위해 다음과 같은 제약식을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ s.t. \ \sum_{i}\mathbf{y}{i}=0, \ \frac{1}{n}\sum{i}\mathbf{y}\mathbf{y}^{T}= \mathbf{I} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 제약은 data point의 평균을 0으로 centering 한 것이고, 두 번째 제약은 covariance는 $\mathbf{I}$라는 것이다. (대칭 행렬)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 제약을 통해 수식을 아래와 같이 정리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \Phi(\mathbf{W})=\sum_{i}\mid \mathbf{y}{i}-\sum{j}\mathbf{W}{ij}\mathbf{y}{i}\mid^{2} \\ = \sum_{i}[\mathbf{y}^{2}{i}-\mathbf{y}{i}(\sum_{j}\mathbf{W}{ij}\mathbf{y}{j})-(\sum_{j}\mathbf{W}{ij}\mathbf{y}{j})\mathbf{y}{i}+(\sum{j}\mathbf{W}{ij}\mathbf{y}{j})^{2}] \\ =\mathbf{Y}^{T}\mathbf{Y}-\mathbf{Y}^{T}(\mathbf{W}\mathbf{Y})-(\mathbf{W}\mathbf{Y})^{T}\mathbf{Y}+(\mathbf{W}\mathbf{Y})^{T}(\mathbf{W}\mathbf{Y}) \\ = (\mathbf{Y}^{T}-\mathbf{Y}^{T}\mathbf{W}^{T})\mathbf{Y}-(\mathbf{Y}^{T}-\mathbf{Y}^{T}\mathbf{W}^{T})\mathbf{W}\mathbf{Y} \\ = \mathbf{Y}^{T}(\mathbf{I}-\mathbf{W}^{T})\mathbf{Y}-\mathbf{Y}^{T}(\mathbf{I}-\mathbf{W}^{T})\mathbf{W}\mathbf{Y} \\ =\mathbf{Y}^{T}(\mathbf{I}-\mathbf{W}^{T})(\mathbf{Y}-\mathbf{W}\mathbf{Y}) \\ =\mathbf{Y}^{T}(\mathbf{I}-\mathbf{W}^{T})(\mathbf{I}-\mathbf{W})\mathbf{Y} \\ = \mathbf{Y}^{T}(\mathbf{I}-\mathbf{Y}), \ (\mathbf{M}=(\mathbf{I}-\mathbf{W})^{T}(\mathbf{I}-\mathbf{W})) \\ \therefore \ \mathbf{Y}^{T}\mathbf{M}\mathbf{Y} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식을 라그랑제 승수 $\alpha$를 이용해 $L$로 나타내면 아래 식과 같이 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial L}{\partial \mathbf{Y}}=(\mathbf{Y}+\mathbf{Y}^{T})\mathbf{M}-\frac{2}{m}\alpha\mathbf{Y} \\ = 2\mathbf{M}\mathbf{Y}-\frac{2}{m}\alpha\mathbf{Y} \\ =0 \\ \therefore \mathbf{M}\mathbf{Y}=\frac{\alpha}{m}\mathbf{Y} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 결과를 통해 $\mathbf{Y}$는 $\mathbf{M}$의 eigenvector 인 것을 알 수 있고, $\frac{\alpha}{m}$은 eigenvalue 인 사실을 알 수 있다.&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>Isomap</category>
      <category>ISOMAP 정리</category>
      <category>LLE</category>
      <category>LLE 정리</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/97</guid>
      <comments>https://ys-cs17.tistory.com/97#entry97comment</comments>
      <pubDate>Mon, 22 Aug 2022 16:02:03 +0900</pubDate>
    </item>
    <item>
      <title>[Dimensionality Reduction] Unsupervised Method (Linear embedding) 2: Multi-dimensional scaling (MDS)</title>
      <link>https://ys-cs17.tistory.com/96</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRkSRz/btrJAd8Joav/92JOzOvTaM7T8aNEJJ7sHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRkSRz/btrJAd8Joav/92JOzOvTaM7T8aNEJJ7sHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRkSRz/btrJAd8Joav/92JOzOvTaM7T8aNEJJ7sHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRkSRz%2FbtrJAd8Joav%2F92JOzOvTaM7T8aNEJJ7sHk%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;562&quot; height=&quot;217&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MDS의 목적은 D차원 공간 상에 객체들이 존재할 때, 이 객체들의 distance가 저차원에서도 최대한 많이 보존되도록 하는 축을 찾는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MDS에서 데이터들의 특징은 개별적인 객체들의 거리이고, 이 거리들을 보존하는 것이 최종 목표이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;PCA vs MDS&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Data&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA는 다차원에 존재하는 $N$개의 object가 데이터이다. $(N \times D)$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MDS는 해당하는 객체들 사이의 유사도 또는 비 유사도를 측정할 수 있는 지표가 데이터이고, 이는 $N \times N$ metrix로 구성된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Purpose&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA는 원 데이터의 분산을 최대한 보존하는 bases를 찾는 것에 목적을 둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MDS는 실질적인 객체들의 좌표 시스템을 찾는다. 이 좌표 시스템은 객체들 사이의 거리 정보를 보존해야 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Output&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA는 $d$개의 bases, $d$개의 eigenvalue이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MDS는 $X \in R^{d}$ 인 각 object의 좌표가 output이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA에 비해 MDS는 cover 해야 하는 범위가 더 넓다. $D$ 차원에서 좌표로 표현된 $X$라는 데이터는 $X$를 통해 $d$ metrix를 만드는 것은 쉽지만, 반대로 $d$로부터 $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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;사과&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0.6&lt;/td&gt;
&lt;td&gt;0.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;포도&lt;/td&gt;
&lt;td&gt;0.6&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;바나나&lt;/td&gt;
&lt;td&gt;0.4&lt;/td&gt;
&lt;td&gt;0.5&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 테이블과 같이 행렬은 $N \times N$으로 정의가 되고, 같은 객체들끼리는 1인 것과, 대칭 행렬인 모습을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 여기서 사과에 대한 데이터를 10차원으로 확장하라고 하면 그것은 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 알 수 있는 사실은 MDS가 cover 할 수 있는 범위가 더 넓다는 것이고, 이는 PCA를 적용할 수 있는 데이터는 MDS를 적용할 수 있지만, MDS를 적용할 수 있는 모든 데이터는 PCA를 적용할 수 없다는 사실을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MDS Procedure&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 1. Construct Proximity / Distance Matrix&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 object에 대한 coordinate가 존재할 때, 그들의 거리 또는 유사도를 계산할 수 있다. 거리는 다음과 같은 조건을 따른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \begin{align} &amp;amp;d_{ij} \geq 0 \\ &amp;amp;d_{ii} = 0 \\ &amp;amp;d_{ij} = d_{ji} \\ &amp;amp;d_{ij} \leq d_{ik}+d_{jk} \end{align} $$&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;distance는 0과 같거나 커야 한다.&lt;/li&gt;
&lt;li&gt;같은 객체들의 distance는 0이어야 한다.&lt;/li&gt;
&lt;li&gt;대칭 행렬을 만족해야 한다.&lt;/li&gt;
&lt;li&gt;삼각 부등식을 만족해야 한다. 여기서 $k$는 $i$와 $j$ 사이에 있어야 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;distance는 Euclidean, Manhattan 등 본인이 원하는 distance method를 사용해도 되고, Similarity는 correlation matrix, jaccard 등 많이 알려진 유사도 방법들을 사용하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bffeWy/btrJyqU9Bg0/FgPTEbeJ3xq7W0kppPP7w0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bffeWy/btrJyqU9Bg0/FgPTEbeJ3xq7W0kppPP7w0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;270&quot; data-filename=&quot;2.png&quot; style=&quot;width: 55.3784%; margin-right: 10px;&quot; data-widthpercent=&quot;56.03&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bffeWy/btrJyqU9Bg0/FgPTEbeJ3xq7W0kppPP7w0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbffeWy%2FbtrJyqU9Bg0%2FFgPTEbeJ3xq7W0kppPP7w0%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;338&quot; height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Rh7I/btrJu1aSAJW/4xEgTPaGG2YJR8WCGWkTJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Rh7I/btrJu1aSAJW/4xEgTPaGG2YJR8WCGWkTJk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;341&quot; data-filename=&quot;3.png&quot; style=&quot;width: 43.4588%;&quot; data-widthpercent=&quot;43.97&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Rh7I/btrJu1aSAJW/4xEgTPaGG2YJR8WCGWkTJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Rh7I%2FbtrJu1aSAJW%2F4xEgTPaGG2YJR8WCGWkTJk%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;335&quot; height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 $d$ 차원에 $n$개의 $x$로 구성된 $d \times n$ shape을 같은 $X$를 각 object 별 유사도 / distance 지표를 갖는 $n \times n$ 크기의 행렬 $D$로 만드는 것이 목적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 $d_{rs}^{2}$로 부터 $x_{r}$과 $x_{s}$를 찾아야 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 2. Extract the coordinates that preserve the distance information&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step 2는 distance information을 보존하는 coordinate system을 찾는 것이 목표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Distance matrix $D$의 각 element는 다음 식과 같이 표현된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ d_{rs}^{2}= (\mathbf{x}{r}-\mathbf{x}{s})^{T}(\mathbf{x}{r}-\mathbf{x}{s}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbf{x}$로 부터 스칼라 값인 $d_{rs}^{2}$를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 현재 가지고 있는 데이터의 구조는 $D$이다. $(n \times n)$ 이를 통해 $X$라는 $(d \times n)$ matrix를 찾고 싶은데, 이를 바로 찾기는 힘들어서 $B$라는 inner product matrix를 먼저 찾을 것이다. $(n \times n)$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$B$ matrix는 다음과 같이 정의 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ [\mathbf{B}]{rs}= b{rs}= \mathbf{x}{r}^{T}\mathbf{x}{s} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 $\mathbf{x}{r}$ 과 $\mathbf{x}{s}$의 내적 값이다. (inner matrix)&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;$$ \begin{align} &amp;amp;\sum^{n}{r=1}x{ri}=0, \ (i=1,2,\dots,p) \\ &amp;amp;d_{rs}^{2}=\mathbf{x}{r}^{T}\mathbf{x}{r}+\mathbf{x}{s}^{T}\mathbf{x}{s}- 2\mathbf{x}{r}^{T}\mathbf{x}{s} \end{align} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(5)는 모든 변수는 centering을 진행하였기 때문에, 평균을 0으로 둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(6)은 $d_{rs}^{2}= (\mathbf{x}{r}-\mathbf{x}{s})^{T}(\mathbf{x}{r}-\mathbf{x}{s})$를 풀어 쓴 식이다.&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;MDS의 수식을 설명하기 위해 몇 가지 정리가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ d_{rs}^{2}= (\mathbf{x}{r}-\mathbf{x}{s})^{T}(\mathbf{x}{r}-\mathbf{x}{s}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 distance 수식에 $r$에 대한 summataion을 진행하면 다음과 같이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{1}{n}\sum_{r=1}^{n}d^{2}{rs}=\frac{1}{n}\sum{r=1}^{n}\mathbf{x}^{T}{r}\mathbf{x}{r}+\frac{1}{n}\sum_{r=1}^{n}\mathbf{x}^{T}{s}\mathbf{x}{s}-\frac{2}{n}\sum_{r=1}^{n}\mathbf{x}^{T}{r}\mathbf{x}{s} = \frac{1}{n}\sum_{r=1}^{n}\mathbf{x}^{T}{r}\mathbf{x}{r}+\mathbf{x}^{T}{s}\mathbf{x}{s} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(6)을 통해 distance의 평균을 term 2와 같이 전개한 것을 확인할 수 있고, term 2에 $\mathbf{x}^{T}{s}\mathbf{x}{s}$는 $r$과는 상관이 없어 $n \times \mathbf{x}^{T}{r}\mathbf{x}{r}$가 된다. 그리고 term 2의 마지막 식은 (5)로 인해 0이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \begin{align}\mathbf{x}^{T}{s}\mathbf{x}{s}=\frac{1}{n}\sum_{r=1}^{n}d^{2}{rs}+\frac{1}{n}\sum{r=1}^{n}\mathbf{x}^{T}{r}\mathbf{x}{r}\end{align} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식을 다시 쓰면 위와 같이 정리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;distance 행렬을 $s$에 대해 summation을 진행하면 다음과 같이 쓸 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{1}{n}\sum_{s=1}^{n}d^{2}{rs}=\frac{1}{n}\sum{s=1}^{n}\mathbf{x}^{T}{r}\mathbf{x}{r}+\frac{1}{n}\sum_{s=1}^{n}\mathbf{x}^{T}{s}\mathbf{x}{s}-\frac{2}{n}\sum_{s=1}^{n}\mathbf{x}^{T}{r}\mathbf{x}{s} =\mathbf{x}^{T}{r}\mathbf{x}{r}+ \frac{1}{n}\sum_{s=1}^{n}\mathbf{x}^{T}{s}\mathbf{x}{s} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(7)과 마찬가지로 정리하면 아래와 같은 식을 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \begin{align}\mathbf{x}^{T}{r}\mathbf{x}{r}=\frac{1}{n}\sum_{s=1}^{n}d^{2}{rs}-\frac{1}{n}\sum{s=1}^{n}\mathbf{x}^{T}{s}\mathbf{x}{s}\end{align} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 $r$과 $s$에 대해 summation을 진행해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{1}{n^{2}}\sum_{r=1}^{n}\sum_{s=1}^{n}d^{2}{rs}=\frac{1}{n^{2}}\sum{r=1}^{n}\sum_{s=1}^{n}\mathbf{x}{r}^{T}\mathbf{x}{r}+ \frac{1}{n^{2}}\sum_{r=1}^{n}\sum_{s=1}^{n}\mathbf{x}{s}^{T}\mathbf{x}{s}-\frac{2}{n^{2}}\sum_{r=1}^{n}\sum_{s=1}^{n}\mathbf{x}{r}^{T}\mathbf{x}{s} \\ =\frac{1}{n}\sum_{r=1}^{n}\mathbf{x}{r}^{T}\mathbf{x}{r}+\frac{1}{n}\sum_{s=1}^{n}\mathbf{x}{s}^{T}\mathbf{x}{s}=\frac{2}{n}\sum_{r=1}^{n}\mathbf{x}{r}^{T}\mathbf{x}{r} $$&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}\frac{2}{n}\sum_{r=1}^{n}\mathbf{x}{r}^{T}\mathbf{x}{r}=\frac{1}{n^{2}}\sum_{r=1}^{n}\sum_{s=1}^{n}d_{rs}^{2}\end{align} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 정리한 식을 활용하여 distance matrix로부터 inner product matrix $\mathbf{B}$를 정의할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \begin{align} b_{rs}&amp;amp;=\mathbf{x}{r}^{T}\mathbf{x}{s} \\ &amp;amp;=-\frac{1}{2}(d_{rs}^{2}-\mathbf{x}{r}^{T}\mathbf{x}{r}-\mathbf{x}{s}^{T}\mathbf{x}{s}) \\ &amp;amp;=-\frac{1}{2}(d_{rs}^{2}-\frac{1}{n}\sum_{s=1}^{n}d_{rs}^{2}+\frac{1}{n}\sum_{s=1}^{n}\mathbf{x}{s}^{T}\mathbf{x}{s}-\frac{1}{n}\sum^{n}{r=1}d^{2}{rs}+\frac{1}{n}\sum_{r=1}^{n}\mathbf{x}{r}^{T}\mathbf{x}{r}) \\ &amp;amp;= -\frac{1}{2}(d_{rs}^{2}-\frac{1}{n}\sum_{s=1}^{n}d_{rs}^{2}-\frac{1}{n}\sum_{r=1}^{n}d_{rs}^{2}+\frac{1}{n^{2}}\sum_{r=1}^{n}\sum_{s=1}^{n}d_{rs}^{2}) \\ &amp;amp;=a_{rs}-a_{r.}-a_{.s}+a_{..} \end{align} \\ \text{where} \ a_{rs}=-\frac{1}{2}d_{rs}^{2}, \ a_{r.}=\frac{1}{n}\sum_{s}a_{rs}, \ a_{.s}=\frac{1}{n}\sum_{r}a_{rs},\ a_{..}=\frac{1}{n^{2}}\sum_{r}\sum_{s}a_{rs}&lt;br /&gt;$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(10)에서 (11)은 (6)을 이용하여 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(11)에서 (12)는 (7), (8)에서 구한 수식을 대입한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(12)에서 (13)은 (9)를 이용하여 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 distance matrix로부터 inner product matrix인 $\mathbf{B}$를 distance의 선형 결합을 통해 만들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ [\mathbf{A}{rs}=a{rs}] \ \ \ \mathbf{B}=\mathbf{H}\mathbf{A}\mathbf{H} \ \ \ \mathbf{H}=\mathbf{I}-\frac{1}{n}11^{T} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞 연산들을 통해 위 수식과 같이 $\mathbf{B}$ matrix에 대한 정의를 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbf{B}$로부터 coordinate matrix인 $\mathbf{X}$를 구하기 위해 아래와 같은 연산을 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathbf{B} = \mathbf{X}\mathbf{X}^{T} \ \ \ rank(\mathbf{B})=rank(\mathbf{X}\mathbf{X}^{T})=rank(\mathbf{X})=p $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbf{X}$가 $n \times p$ 행렬이고, $p &amp;lt;n$ 일 때, $\mathbf{B}$의 rank는 $p$가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 $\mathbf{B}$는 대칭 행렬이고, postive semi-definite를 만족하며, rank가 $p$이기 때문에, $p$개의 non-negative한 eigen value와 $n-p$개의 zero eigenvalue를 갖게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 표현하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathbf{B}=\mathbf{V}\mathbf{\Lambda}\mathbf{V}^{T}, \ \mathbf{\Lambda}=diag(\lambda_{1},\lambda_{2}, \dots, \lambda_{n}), \ \mathbf{V}=[\mathbf{v}{1}, \mathbf{v}{2}, \dots, \mathbf{v}_{n}] $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$n-p$개의 zero eigenvalue를 제외하고 아래와 같이 다시 쓸 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathbf{B}{1}=\mathbf{V}{1}\mathbf{\Lambda}{1}\mathbf{V}^{T}{1}, \ \mathbf{\Lambda}{1}=diag(\lambda{1},\lambda_{2}, \dots, \lambda_{p}), \ \mathbf{V}{1}=[\mathbf{v}{1}, \mathbf{v}{2}, \dots, \mathbf{v}{p}] $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbf{B}_{1}=\mathbf{X}\mathbf{X}^{T}$인 것을 활용하여 아래와 같이 $\mathbf{X}$를 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathbf{X} = \mathbf{V}{1}\mathbf{\Lambda}{1}^{\frac{1}{2}} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>mds</category>
      <category>MDS 정리</category>
      <category>MDS란</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/96</guid>
      <comments>https://ys-cs17.tistory.com/96#entry96comment</comments>
      <pubDate>Fri, 12 Aug 2022 13:31:33 +0900</pubDate>
    </item>
    <item>
      <title>[Dimensionality Reduction] Unsupervised Method (Linear embedding) 1: Principal component analysis (PCA)</title>
      <link>https://ys-cs17.tistory.com/95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&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;차원 축소의 목적은 특정한 머신 러닝 모델을 만들기 위해 특성을 보존하면서 compact 한 데이터를 유지하는 것이다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2510&quot; data-origin-height=&quot;1052&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqWFDi/btrJlpWKiNV/9v8FfZiBhLeknT5PMim7gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqWFDi/btrJlpWKiNV/9v8FfZiBhLeknT5PMim7gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqWFDi/btrJlpWKiNV/9v8FfZiBhLeknT5PMim7gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqWFDi%2FbtrJlpWKiNV%2F9v8FfZiBhLeknT5PMim7gK%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;2510&quot; height=&quot;1052&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2510&quot; data-origin-height=&quot;1052&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림과 같이 만약 데이터가 있고, PC (Principal Component)가 2개라고 할 때, 우리는 분산이 더 큰 PC를 더 선호해야 한다. 따라서 오른쪽이 더 선호도가 높다고 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;2486&quot; data-origin-height=&quot;1328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzDpuP/btrJm8GvSRe/of2ybTIrX28k2O2idLKcrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzDpuP/btrJm8GvSRe/of2ybTIrX28k2O2idLKcrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzDpuP/btrJm8GvSRe/of2ybTIrX28k2O2idLKcrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzDpuP%2FbtrJm8GvSRe%2Fof2ybTIrX28k2O2idLKcrK%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;2486&quot; height=&quot;1328&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;2486&quot; data-origin-height=&quot;1328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PC를 선택하기 위해 우리는 분산 보존량을 계산할 수 있다. 뒤에서 자세히 살펴보겠지만 $\lambda$가 분산 보존량을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본격적으로 PCA 과정에 대해 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 1. Data Centering&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2418&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r86cg/btrJloKmXto/YzM6yvKUikew5KNQnvj4O0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r86cg/btrJloKmXto/YzM6yvKUikew5KNQnvj4O0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r86cg/btrJloKmXto/YzM6yvKUikew5KNQnvj4O0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr86cg%2FbtrJloKmXto%2FYzM6yvKUikew5KNQnvj4O0%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;2418&quot; height=&quot;590&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2418&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 센터링을 위해 각 데이터들의 평균을 0으로 맞춘다. 추후 계산식의 $x-\bar{x}$ 과정을 간략화하기 위해 진행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2276&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zpj3g/btrJikBWDmI/Y9zY0ZLESd6HabLR6uNfrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zpj3g/btrJikBWDmI/Y9zY0ZLESd6HabLR6uNfrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zpj3g/btrJikBWDmI/Y9zY0ZLESd6HabLR6uNfrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzpj3g%2FbtrJikBWDmI%2FY9zY0ZLESd6HabLR6uNfrK%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;2276&quot; height=&quot;744&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2276&quot; data-origin-height=&quot;744&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 plot이 데이터 센터링에 대한 결과이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 2. Formulate the optimization problem&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Optimization 수식은 다음과 같다. 벡터 $\mathbf{X}$가 bias $\mathbf{w}$에 projection 되었을 때 variance는 아래 식과 같이 정의된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ V = \frac{1}{n}(\mathbf{w}^{T}\mathbf{X})(\mathbf{w}^{T}\mathbf{X})^{T} = \frac{1}{n}\mathbf{w}^{T}\mathbf{X}\mathbf{X}^{T}\mathbf{w}=\mathbf{w}^{T}\mathbf{S}\mathbf{w} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbf{S}$는 normalize 된 $\mathbf{X}$의 sample covariance이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 위 수식에서 맨 오른쪽 수식을 최대화시켜야 한다. (분산을 최대로 보존해야 되기 때문에)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 3. Obtain the solution&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \max \ \mathbf{w}^{T}\mathbf{S}\mathbf{w} \\ s.t. \mathbf{w}^{T}\mathbf{w} = 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;$$ L = \mathbf{w}^{T}\mathbf{S}\mathbf{w}-\lambda(\mathbf{w}^{T}\mathbf{w}-1) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 식에 $\mathbf{w}$에 대한 편미분을 진행하면 최적의 값을 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \frac{\partial L}{\partial \mathbf{w}} = 0 \rightarrow \mathbf{S}\mathbf{w} - \lambda \mathbf{w} = 0 \\ \therefore (\mathbf{S} - \lambda \mathbf{I})\mathbf{w} = 0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA의 해에서 $\mathbf{w}$는 $\mathbf{S}$의 고유 벡터가 되고, $\lambda$는 $S$의 고유 값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 4. Find the base set of bases&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 $\mathbf{w}$에 원래 벡터를 projection 후 분산의 변화량을 계산할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathbf{S}\mathbf{w}{1} = \lambda{1}\mathbf{w}{1} \\ \mathbf{w}{1}^{T}\mathbf{S}\mathbf{w}{1} = \mathbf{w}{1}^{T}\lambda\mathbf{w}{1} = \lambda{1}\mathbf{w}{1}^{T}\mathbf{w}{1} = \lambda_{1} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbf{S}$ 대신 고유 벡터인 $\lambda$를 쓸 수 있고, 이는 스칼라이기 때문에 왼쪽으로 빼줘서 결국 $\lambda$만 남게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 알 수 있는 사실은 결국 분산의 변화량은 $\lambda$가 되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 $\frac{\lambda_{1}}{\lambda_{1}+\lambda_{2}}$를 통해 분산의 보존량을 구할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 5. Extract new features&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 step 4에서 bases를 뽑았으니 이를 통해 새로운 feature를 추출해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;3774&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/siN4N/btrJk3TXH16/0DeMvhhAZI1Cse5lNoYZKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/siN4N/btrJk3TXH16/0DeMvhhAZI1Cse5lNoYZKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/siN4N/btrJk3TXH16/0DeMvhhAZI1Cse5lNoYZKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsiN4N%2FbtrJk3TXH16%2F0DeMvhhAZI1Cse5lNoYZKk%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;3774&quot; height=&quot;724&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;3774&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 구한 $\mathbf{w}$를 $\mathbf{x}$ 에 곱해 $\mathbf{z}$를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 결과에서 $\mathbf{z}{1}$은 $\mathbf{w}{1}^{T}\mathbf{X }$이다. 위 연산을 통해 PC를 구한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 6. Reconstruct the original data&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbf{w}^{T}\mathbf{X}$에 $\mathbf{w}$를 다시 곱함으로써 다시 원본 데이터로 reconstruction 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2466&quot; data-origin-height=&quot;1164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yaKaU/btrJmxNjvBG/gLPY6nDgee9530UIDY7hw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yaKaU/btrJmxNjvBG/gLPY6nDgee9530UIDY7hw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yaKaU/btrJmxNjvBG/gLPY6nDgee9530UIDY7hw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyaKaU%2FbtrJmxNjvBG%2FgLPY6nDgee9530UIDY7hw0%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;2466&quot; height=&quot;1164&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2466&quot; data-origin-height=&quot;1164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 결과와 마찬가지로 $\mathbf{x}$와 $\mathbf{x}'$ 사이 약간의 오차가 발생하게 되는데, 해당 오차를 가지고 anomaly detection 분야에서 활용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 통해 PCA의 모든 절차를 알아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA에 대한 몇 개의 이슈가 남아 있는데, 가장 중요한 것은 PCA는 구체적인 몇 개의 component를 가지고 최적화해야 하는지에 대한 정해진 답은 없다. 보통 분산에 대한 보존량 비율 또는 전문가의 의견을 통해 판단한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCA에 대한 한계점은 통계적 모델이라 데이터의 분포가 가우시안이라는 것을 가져해야 한다. 데이터가 가우시안 분포를 따를 때는 정상적으로 작동하지만, multimodal과 같은 분포를 따른다면 작동이 안 될 수 있다. 또한 PCA는 분류에 대한 목적으로 사용하지 않는다.&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>pca</category>
      <category>PCA란</category>
      <category>주성분분석</category>
      <category>주성분분석 설명</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/95</guid>
      <comments>https://ys-cs17.tistory.com/95#entry95comment</comments>
      <pubDate>Tue, 9 Aug 2022 21:36:02 +0900</pubDate>
    </item>
    <item>
      <title>[Dimensionality Reduction] Supervised Methods 2: Genetic algorithm</title>
      <link>https://ys-cs17.tistory.com/94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Meta-heuristic&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유전 알고리즘은 이전 FS, BE, SS 알고리즘보다는 시간이 조금 더 소요되지만, 성능은 더 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 알고리즘은 meta-heuristic 기반이고, 이는 굉장히 복잡한 문제들에 대해 trial과 error를 해결해가면서 효율적으로 solution을 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 접근법을 기반으로 만들어진 알고리즘은 neural network, ant colony algorithm, particle swarm optimization 등이 있다. 이러한 알고리즘들은 자연에서 motive가 되어 연구되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Genetic Algorithm&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유전 알고리즘에서 가장 중요한 3가지 step은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Selection : solution에 대한 퀄리티를 높일 수 있는 후보군을 찾는데 집중한다.&lt;/li&gt;
&lt;li&gt;Crossover: 퀄리티가 우수한 객체를 조합하면서 더 좋은 대안이 있는지 탐색하는 과정&lt;/li&gt;
&lt;li&gt;Mutation: 수렴 과정에서 local optima를 빠져나가기 위한 대안&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유전 알고리즘을 사용한 feature selection의 전체 단계는 크게 6 step으로 나누어진다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;염색체 초기화 및 파라미터 설정 (Initialization)&lt;/li&gt;
&lt;li&gt;각 염색체 선택 및 변수별 모델 학습&lt;/li&gt;
&lt;li&gt;각 염색체 적합도 평가 (Fitness evaluation)&lt;/li&gt;
&lt;li&gt;우수 염색체 선택 (Selection)&lt;/li&gt;
&lt;li&gt;다음 세대 염색체 생성 (Crossover &amp;amp; Mutation)&lt;/li&gt;
&lt;li&gt;최종 변수 집합 선택&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 5 &amp;rarr; 2로 다시 돌아가게 되는데 이를 feed back loop라고 부른다. 해당 loop를 세대라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세대가 지남에 따라 퀄리티를 높이는 것을 목표로 하고, 더 이상의 성능 향상이 없을 때 6단계에서 최종적인 변수를 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2746&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cC0oEx/btrIT9HBA45/ps9KB9EHdBtSAzUnkc34F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC0oEx/btrIT9HBA45/ps9KB9EHdBtSAzUnkc34F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC0oEx/btrIT9HBA45/ps9KB9EHdBtSAzUnkc34F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC0oEx%2FbtrIT9HBA45%2Fps9KB9EHdBtSAzUnkc34F1%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;2746&quot; height=&quot;514&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2746&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 유전 알고리즘은 selection만이 아닌 다른 최적화 문제에서도 사용된다. 각 문제에 따라 encoding scheme이 달라진다. variable selection에서는 binary encoding을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 알아야 되는 용어가 있다. Chromosome은 위 그림과 같은 테이블이고, 각 요소는 gene이라고 부른다. 0이면 사용하지 않고, 1이면 사용한다는 것을 의미한다. 1에 대응하는 위치에 대응하는 변수를 실제 모델링에 사용한다는 의미이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유전 알고리즘에서는 많은 hyper parameter가 존재하는데, Initialization 단계에서는 이를 초기화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hyper parameter의 리스트는 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Chromosome 개수 : 만약 100이라면 이는 1개의 세대에서 100개의 변수 subset을 평가하겠다는 의미&lt;/li&gt;
&lt;li&gt;Fitness function : Chromosome의 퀄리티를 평가하는 함수&lt;/li&gt;
&lt;li&gt;Crossover mechanism : 뒤에서 다룰 예정이다.&lt;/li&gt;
&lt;li&gt;Mutation 비율 : 뒤에서 다룰 예정이다.&lt;/li&gt;
&lt;li&gt;종료 조건 : Chromosome의 퀄리티가 일정 수준 이하면 종료 또는 최대 iteration에 도달&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;1026&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbeeTC/btrIXxODhP2/RB0oltzRVAwOQZRTgGrih1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbeeTC/btrIXxODhP2/RB0oltzRVAwOQZRTgGrih1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbeeTC/btrIXxODhP2/RB0oltzRVAwOQZRTgGrih1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbeeTC%2FbtrIXxODhP2%2FRB0oltzRVAwOQZRTgGrih1%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;678&quot; height=&quot;461&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;1026&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 plot의 초록색 point는 best chromosome에 의해 선택된 변수들의 예측 성능이다. 하늘색 point는 해당 세대 chromosome의 평균 성능을 보여 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 본격적으로 전체 step에 대해 자세하게 알아보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 1. Initialization&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;1322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bheNjw/btrIXwhQhSR/ckcfcT2JEP9W6iD8KPAZek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bheNjw/btrIXwhQhSR/ckcfcT2JEP9W6iD8KPAZek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bheNjw/btrIXwhQhSR/ckcfcT2JEP9W6iD8KPAZek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbheNjw%2FbtrIXwhQhSR%2FckcfcT2JEP9W6iD8KPAZek%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;734&quot; height=&quot;592&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;1322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 세대에 대한 초기화는 랜덤으로 gene을 생성한다. 그 후 0.5 기준으로 cut-off 후 이진화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mutilvariate linear regression model 기준 아래와 같이 모델을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \hat{y} = \hat{\beta}{0} +\hat{\beta}{2}x_{2}+\hat{\beta}{3}x{3}+\hat{\beta}{4}x{4}+\hat{\beta}{6}x{6}+\hat{\beta}{9}x{9}+\hat{\beta}{10}x{10} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 모델은 chromosome 1의 예시 모델이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 모델을 가지고 학습을 진행한다. (step 2)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 3. Fitness Evaluation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 후 fitness function을 통해 평가를 진행한다. 이 과정을 통해 어떤 chromosome이 좋은지 알 수 있다. Fitness function의 지표는 무조건 높을수록 좋게 만든다. 작을수록 좋은 error의 경우도 1 - error와 같은 식을 통해 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 동일한 성능을 가지고 있으면 변수의 개수가 적은 것이 좋은 것이고, 같은 수의 변수를 갖고 있다면 예측 성능이 더 좋은 것이 좋은 것으로 간주한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 Adjusted $R^{2}$, AIC, BIC와 같은 평가 지표를 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bI11uw/btrI1jhfNbK/IedIshyJK5QaHAdFq5lHG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bI11uw/btrI1jhfNbK/IedIshyJK5QaHAdFq5lHG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bI11uw/btrI1jhfNbK/IedIshyJK5QaHAdFq5lHG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbI11uw%2FbtrI1jhfNbK%2FIedIshyJK5QaHAdFq5lHG0%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;552&quot; height=&quot;324&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8개의 chromosome에 대해 fitness function을 돌린 결과이고, 지표에 따라 rank을 매긴다. weight는 각 지표의 결과를 지표의 총합으로 나눈 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;weight는 뒤에서 다룰 crossover에 영향을 준다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 4. Selection&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;selection은 다음 세대를 생성하기 위해 우수한 chromosome을 선택하는 과정이다. 이를 통해 세대가 지날수록 더 우수한 성능을 가질 수 있다. selection의 방법은 크게 2가지로 나뉜다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Deterministic selection&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Chromosome 중에 상위 n%에 속하는 애들만 다음 세대에 유전자를 남길 수 있다. rank를 기준으로 남기고, 나머지 chromosome은 폐기한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7KRmx/btrIXwWpjpf/On9A6ZRDRobFSOdEYeLKZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7KRmx/btrIXwWpjpf/On9A6ZRDRobFSOdEYeLKZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7KRmx/btrIXwWpjpf/On9A6ZRDRobFSOdEYeLKZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7KRmx%2FbtrIXwWpjpf%2FOn9A6ZRDRobFSOdEYeLKZ1%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;558&quot; height=&quot;337&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 50%라면 1~4 rank에 속하는 chromosome만 선택된다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Probabilistic selection&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 확률을 사용하여 모든 chromosome에게 기회를 준다. rank가 높을수록 선택될 확률이 높다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2578&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pduad/btrIVhyFwQx/zFqGSdEgtSz0xTWuUzL1ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pduad/btrIVhyFwQx/zFqGSdEgtSz0xTWuUzL1ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pduad/btrIVhyFwQx/zFqGSdEgtSz0xTWuUzL1ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpduad%2FbtrIVhyFwQx%2FzFqGSdEgtSz0xTWuUzL1ck%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;2578&quot; height=&quot;352&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2578&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 chromosome의 rank에 따라 높을 수록 확률을 높게 부여하고, 해당 값들을 통해 랜덤 한 수를 뽑는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 2개의 chromosome을 선택하기 위한 랜덤 숫자가 0.881, 0.499라면 위 그림과 같이 C4, C8이 선택될 것이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 5. Crossover &amp;amp; Mutation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Crossover&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Crossover를 통해 2개의 chromosome을 섞는다. 이때 crossover point가 등장하는데, 이를 통해 부모 chromosome에서 어느 부분을 기준으로 끊을 것인가를 결정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boCHJe/btrIVgT7IGe/QdLory4Tq71eHq0ynpsPqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boCHJe/btrIVgT7IGe/QdLory4Tq71eHq0ynpsPqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boCHJe/btrIVgT7IGe/QdLory4Tq71eHq0ynpsPqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboCHJe%2FbtrIVgT7IGe%2FQdLory4Tq71eHq0ynpsPqK%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;2132&quot; height=&quot;856&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;856&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Crossover point가 1개인 경우의 예시이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2116&quot; data-origin-height=&quot;836&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IkuEc/btrIT9OtXKA/Kw9rUqJMxffbMfrkXgAIak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IkuEc/btrIT9OtXKA/Kw9rUqJMxffbMfrkXgAIak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IkuEc/btrIT9OtXKA/Kw9rUqJMxffbMfrkXgAIak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIkuEc%2FbtrIT9OtXKA%2FKw9rUqJMxffbMfrkXgAIak%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;2116&quot; height=&quot;836&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2116&quot; data-origin-height=&quot;836&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Crossover point가 2개일 경우, 위 그림과 같은 결과가 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;2136&quot; data-origin-height=&quot;860&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbRo5x/btrIY1g5VJq/F954IFTP5sQMQKkQeOdmKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbRo5x/btrIY1g5VJq/F954IFTP5sQMQKkQeOdmKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbRo5x/btrIY1g5VJq/F954IFTP5sQMQKkQeOdmKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbRo5x%2FbtrIY1g5VJq%2FF954IFTP5sQMQKkQeOdmKk%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;2136&quot; height=&quot;860&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;2136&quot; data-origin-height=&quot;860&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;극단적으로 Crossover point가 각 gene의 개수일 때는 random number를 통해 crossover를 진행할 수 있다. 위 그림에서는 0.5 이상의 gene들만 crossover를 진행한 예시이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Mutation&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mutation은 local optima에서 global optima로 가기 위해 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;2328&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sj7KW/btrIYojjqmH/rDGK13yrqsbueNgHssN9A1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sj7KW/btrIYojjqmH/rDGK13yrqsbueNgHssN9A1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sj7KW/btrIYojjqmH/rDGK13yrqsbueNgHssN9A1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsj7KW%2FbtrIYojjqmH%2FrDGK13yrqsbueNgHssN9A1%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;2328&quot; height=&quot;808&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;2328&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 또한 자식 chromosome에 대해 random number를 사용하며, mutation rate를 통해 mutation을 진행한다. 위 그림은 mutation rate가 0.01인 경우이다. 기존 child 2의 9번째 gene이 1에서 0으로 변환된 모습을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mutation rate가 너무 높으면 optima 지점에 수렴하는 데 있어 시간이 오래 걸릴 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step 6. Find the Best Solution&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;992&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD8RL8/btrI1hqcWuE/N6Ft0rkmOlM0394xcFAdh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD8RL8/btrI1hqcWuE/N6Ft0rkmOlM0394xcFAdh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD8RL8/btrI1hqcWuE/N6Ft0rkmOlM0394xcFAdh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD8RL8%2FbtrI1hqcWuE%2FN6Ft0rkmOlM0394xcFAdh1%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;533&quot; height=&quot;302&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;992&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 plot과 같이 초반에는 fitness function의 성능은 급격하게 상승한다. 이후 성능이 수렴하거나 iteration이 종료되면 최종적으로 종료한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 유전 알고리즘에서는 항상 top-1, top-2에 해당하는 chromosome을 저장한다. meta-heuristic 특성상 성능이 더 나빠질 수도 있기 때문이다.&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>Genetic Algorithm</category>
      <category>genetic selection</category>
      <category>meta heuristic</category>
      <category>유전 알고리즘</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/94</guid>
      <comments>https://ys-cs17.tistory.com/94#entry94comment</comments>
      <pubDate>Fri, 5 Aug 2022 12:23:09 +0900</pubDate>
    </item>
    <item>
      <title>[Dimensionality Reduction] Supervised Methods 1: Forward selection, Backward elimination, Stepwise selection</title>
      <link>https://ys-cs17.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Feature selection&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature selection은 가지고 있는 변수 중 의미 있는 일부분의 변수를 추출하는 것이다. 원본의 변수를 치환 또는 변환을 하지 않는다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Exhaustive Search&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 쉽게 생각할 수 있는 feature selection 기법은 exhaustive search가 있다. 이는 가능한 모든 조합에 대해 탐색을 하여 feature selection을 진행하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ x_{1}, x_{2},x_{3} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 위와 같이 3개의 변수가 있다면, 이에 해당하는 모든 조합은 아래와 같이 총 7가지가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ (x_{1}), (x_{2}),(x_{3}),(x_{1},x_{2}), (x_{1},x_{3}),(x_{2},x_{3}), (x_{1},x_{2}, x_{3}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 변수에 대해 AIC, BIC, Adjusted $R^{2}$와 같은 지표를 사용하여 성능이 가장 좋은 변수의 조합을 선택하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;1346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pl9co/btrIyZSK7Ah/az1DfbGKhEsMMb9d3AbeD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pl9co/btrIyZSK7Ah/az1DfbGKhEsMMb9d3AbeD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pl9co/btrIyZSK7Ah/az1DfbGKhEsMMb9d3AbeD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpl9co%2FbtrIyZSK7Ah%2Faz1DfbGKhEsMMb9d3AbeD1%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;702&quot; height=&quot;470&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;1346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Exhaustive search는 변수의 개수가 많아지면 모델에 대한 연산 시간이 매우 많이 걸리게 된다. 위 plot에서 초록색 그래프가 exhaustive search의 연산 속도이다. exhaustive search의 장점은 global opimal을 찾을 수 있다는 점이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Forward Selection&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Exhaustive search보다는 성능은 좋지 않지만, 시간을 줄이는 방법으로는 Forward selection과 Backward elimination이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FS (Forward Selection)부터 살펴보자. 아래와 같이 linear regression model을 기준으로 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;1268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5L9CS/btrIEY5TBpM/xkmMV5wzazjEzyCxwRZJqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5L9CS/btrIEY5TBpM/xkmMV5wzazjEzyCxwRZJqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5L9CS/btrIEY5TBpM/xkmMV5wzazjEzyCxwRZJqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5L9CS%2FbtrIEY5TBpM%2FxkmMV5wzazjEzyCxwRZJqk%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;354&quot; height=&quot;401&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;1268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 8개의 변수가 존재할 때 FS는 우선 각 변수를 1개씩만 사용한다. 각 조합에 대한 $R^{2}$를 지표를 사용한다고 가정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식에서는 $x_{2}$를 사용할때가 가장 성능이 높은 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;1104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brnzLK/btrItlB2O7r/VZrVcAmlLD1HfGAEQodQg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brnzLK/btrItlB2O7r/VZrVcAmlLD1HfGAEQodQg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brnzLK/btrItlB2O7r/VZrVcAmlLD1HfGAEQodQg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrnzLK%2FbtrItlB2O7r%2FVZrVcAmlLD1HfGAEQodQg1%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;434&quot; height=&quot;335&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;1104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$x_{2}$를 고정하고, 다시 8개의 변수를 각각 더한다. 여기에 대해서도 $R^{2}$를 적용한다. $x_{7}$이 가장 높은 것을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;988&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L8DHP/btrIGx72IPp/Y6U8SlfVkq3KyMKDI1fBdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L8DHP/btrIGx72IPp/Y6U8SlfVkq3KyMKDI1fBdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L8DHP/btrIGx72IPp/Y6U8SlfVkq3KyMKDI1fBdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL8DHP%2FbtrIGx72IPp%2FY6U8SlfVkq3KyMKDI1fBdk%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;479&quot; height=&quot;274&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;988&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$x_{7}$를 고정한 후 다시 반복한다. $x_{4}$를 채택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1886&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csWOAQ/btrIynk4MdC/VVh6ss1Nu7aCHNJBJ4uoK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csWOAQ/btrIynk4MdC/VVh6ss1Nu7aCHNJBJ4uoK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csWOAQ/btrIynk4MdC/VVh6ss1Nu7aCHNJBJ4uoK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsWOAQ%2FbtrIynk4MdC%2FVVh6ss1Nu7aCHNJBJ4uoK1%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;603&quot; height=&quot;256&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1886&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$x_{4}$까지 고정한 후 지표를 측정해보면 더 이상 $R^{2}$가 증가하지 않는 모습을 볼 수 있다. 최종적으로 우리는 FS를 통해 아래와 같은 model을 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \hat{y} = \hat{\beta_{0}} + \hat{\beta_{2}}x_{2}+ \hat{\beta_{7}}x_{7}+ \hat{\beta_{4}}x_{4}, \ \ R^{2}_{adj}=0.76 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FS는 추가 된 변수에 대해 절대로 제거가 되지 않는다는 특징을 가지고 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Backward Elimination&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BE (Backward Elimination)는 FS의 반대라고 생각하면 된다. 쉽게 말해 변수를 하나씩 없애는 방법론이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \hat{y} = \hat{\beta_{0}} + \hat{\beta_{1}}x_{1}+ \hat{\beta_{2}}x_{2}+\hat{\beta_{3}}x_{3}+\hat{\beta_{4}}x_{4}+\hat{\beta_{5}}x_{5}+\hat{\beta_{6}}x_{6}+\hat{\beta_{7}}x_{7}+\hat{\beta_{8}}x_{8}, R^{2}_{adj}=0.77 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 linear regression model이 있다고 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 각 변수를 하나씩 뺀 후 이에 대한 지표를 측정한다. 결과에 대한 감소 값을 hyper parameter로 두고, 해당 값보다 낮아지면 BE를 종료한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2902&quot; data-origin-height=&quot;1412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7PDsR/btrIA2an9Dt/UndipLb5dPyK5kr0op1Yc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7PDsR/btrIA2an9Dt/UndipLb5dPyK5kr0op1Yc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7PDsR/btrIA2an9Dt/UndipLb5dPyK5kr0op1Yc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7PDsR%2FbtrIA2an9Dt%2FUndipLb5dPyK5kr0op1Yc1%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;735&quot; height=&quot;358&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;2902&quot; data-origin-height=&quot;1412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 결과를 보면 $x_{3}$을 제거 하였을 때가 가장 성능이 좋은 것으로 보인다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;2896&quot; data-origin-height=&quot;1266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n5jZ6/btrIynrRNuY/8ofAIyaN7E21qPxgofj150/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n5jZ6/btrIynrRNuY/8ofAIyaN7E21qPxgofj150/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n5jZ6/btrIynrRNuY/8ofAIyaN7E21qPxgofj150/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn5jZ6%2FbtrIynrRNuY%2F8ofAIyaN7E21qPxgofj150%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;764&quot; height=&quot;334&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;2896&quot; data-origin-height=&quot;1266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 다시 하나씩 제거 한다. $x_{8}$을 제거하였을 때 가장 작게 감소한 모습을 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2866&quot; data-origin-height=&quot;1092&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P0fzT/btrIyZFh3on/txgVFsdgkBv11KdiiOuL7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P0fzT/btrIyZFh3on/txgVFsdgkBv11KdiiOuL7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P0fzT/btrIyZFh3on/txgVFsdgkBv11KdiiOuL7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP0fzT%2FbtrIyZFh3on%2FtxgVFsdgkBv11KdiiOuL7K%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;760&quot; height=&quot;290&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;2866&quot; data-origin-height=&quot;1092&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 후 지표에 대한 감소가 커짐과 동시에 BE를 종료한다. 최종적으로 아래 수식과 같은 모델을 채택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \hat{y} = \hat{\beta_{0}} + \hat{\beta_{1}}x_{1}+ \hat{\beta_{2}}x_{2}+ \hat{\beta_{4}}x_{4}+\hat{\beta_{5}}x_{5}+\hat{\beta_{6}}x_{6}+\hat{\beta_{7}}x_{7}+, \ \ R^{2}_{adj}=0.76 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BE의 경우는 FS와는 다르게 한번 제거된 변수는 절대로 추가가 되지 않는다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Stepwise Selection&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FS, BE 보다 연산량은 많지만, 성능을 더 좋게하기 위해 stepwise selection이라는 방법론이 등장했다. 이는 FS와 BE를 번갈아가면서 수행한다. 이로 인해 변수가 선택이나 제거되어도 다음 텀에서 다시 제거되거나 선택될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \hat{y} = \hat{\beta_{0}} + \hat{\beta_{2}}x_{2}, \ \ R^{2}_{adj}=0.56 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 FS를 통해 성능이 가장 높은 변수를 선택한다. 위 수식을 통해 $x_{2}$를 선택한 모습을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 제거를 해야 하지만, 초기 값보다는 $x_{2}$를 선택한 것이 성능이 더 좋아 제거하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 다시 FS를 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \hat{y} = \hat{\beta_{0}} + \hat{\beta_{2}}x_{2}+ \hat{\beta_{7}}x_{7}, \ \ R^{2}_{adj}=0.70 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FS를 통해 $x_{7}$을 선택한 모습을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 제거를 해야 하지만, $x_{2}, x_{7}$을 제거해도 성능이 좋아지지는 않아 그대로 내버려둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \hat{y} = \hat{\beta_{0}} + \hat{\beta_{2}}x_{2}+ \hat{\beta_{7}}x_{7} + \hat{\beta_{4}}x_{4}, \ \ R^{2}_{adj}=0.76 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FS를 통해 $x_{4}$를 선택하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwPSr/btrIEbYI1fH/vXE13JSGalWAAnJ7z9N970/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwPSr/btrIEbYI1fH/vXE13JSGalWAAnJ7z9N970/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwPSr/btrIEbYI1fH/vXE13JSGalWAAnJ7z9N970/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwPSr%2FbtrIEbYI1fH%2FvXE13JSGalWAAnJ7z9N970%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;427&quot; height=&quot;145&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 BE를 진행하였는데, $x_{2}$를 제거했는데 성능이 더 좋아진 모습을 볼 수 있다. 따라서 $x_{2}$를 제거한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 다시 FS, BE를 반복한 후, 성능이 개선이 되지 않을 때까지 반복한다.&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>backward elimination</category>
      <category>be</category>
      <category>feature selection</category>
      <category>Forward selection</category>
      <category>FS</category>
      <category>stepwise selection</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/93</guid>
      <comments>https://ys-cs17.tistory.com/93#entry93comment</comments>
      <pubDate>Sun, 31 Jul 2022 20:55:40 +0900</pubDate>
    </item>
    <item>
      <title>[Anomaly Detection] SVDD</title>
      <link>https://ys-cs17.tistory.com/92</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;본 포스트는 고려대학교 산업경영공학부 강필성 교수님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Business Analytics&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;강의를 정리한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Support Vector Data Description based Anomaly detection (SVDD)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wOVPE/btrH5dW6dTq/CKtck0SzsQl0vkOeuS9Ha1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wOVPE/btrH5dW6dTq/CKtck0SzsQl0vkOeuS9Ha1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wOVPE/btrH5dW6dTq/CKtck0SzsQl0vkOeuS9Ha1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwOVPE%2FbtrH5dW6dTq%2FCKtck0SzsQl0vkOeuS9Ha1%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;2272&quot; height=&quot;776&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVDD는 앞서 살펴본 SVM과 동시대에 만들어진 알고리즘이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVDD는 SVM과는 달리 hyper sphere를 찾는 것이 목표이고, 이를 위해 sphere의 중심점인 $a$와 반지름인 $R$을 찾아, 정상 데이터를 해당 sphere안에 몰아넣는 것을 목적으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 sphere 밖에 있는 데이터에 대해서는 $\xi$라는 패널티를 줄 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림 오른쪽을 통해 1-SVM과 SVDD의 차이를 볼 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Optimization function&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \min_{R, \mathbf{a}, \xi_{i}}{R^{2}}+C\sum_{i=1}^{l}{\xi_{i}} \\ s.t. \parallel \Phi(\mathbf{x}_{i})- \mathbf{a} \parallel^{2} \ \leq \ R^{2}+\xi_{i}, \ \xi_{i} \geq 0, \forall i $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Optimization function의 수식을 보면 sphere의 반지름인 $R^{2}$을 최소화 하면서, sphere와 멀어지는 데이터 $\mathbf{x}$에 대해 페널티 $\xi$를 준다. 여기서 $C$는 페널티 상수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 $s.t.$을 통해 알 수 있는 제약 조건은 데이터 $\mathbf{x}_{i}$를 $\Phi$ 함수를 통해 feature space로 mapping을 진행하고, sphere의 중심으로부터 해당 point의 거리가 sphere + $\xi$ 영역 안쪽에 위치해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식을 통해 $R$과 $\mathbf{a}$, $\xi$를 구한 후 아래 계산식을 통해 정상 또는 비정상을 판별한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Decision function&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ f(\mathbf{x}) = sign(R^{2}- \parallel \Phi(\mathbf{x}_{i}) - \mathbf{a} \parallel^{2}) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;feature space로 변환된 데이터 $\mathbf{x}$ 가 sphere 안쪽에 위치하면 양수 임으로 정상, 바깥쪽에 위치하면 음수임으로 비정상으로 판별한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라그랑주 승수법을 사용하여 최적화 함수를 정의하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ L = R^{2} + C\sum^{l}_{i=1}{\xi_{i}} - \sum^{l}_{i=1}\alpha_{i}(R^{2}+\xi_{i}-(\Phi(\mathbf{x}_{i})\cdot \Phi(\mathbf{x}_{i}) - 2 \cdot \mathbf{a} \cdot \Phi (\mathbf{x}_{i})+\mathbf{a} \cdot \mathbf{a}))- \sum^{l}_{i=1}\beta_{i}\xi_{i} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $\alpha_{i} \geq 0, \beta_{i} \geq 0$을 만족해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식을 가지고 KKT condition에 따라 각 parameter에 대해 편미분을 해서 정리하면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \begin{align*} &amp;amp;\frac{\partial L}{\partial R} = 2R - 2R \sum^{l}_{i=1}\alpha_{i} = 0 \rightarrow \sum_{i=1}^{l}\alpha_{i} = 1 \\ &amp;amp;\frac{\partial L}{\partial \mathbf{a}} = 2\sum^{l}_{i=1}\alpha_{i} \cdot \Phi(\mathbf{x}_{i})- 2\mathbf{a}\sum_{i=1}^{l}\alpha_{i} = 0 \rightarrow \mathbf{a} = \sum^{l}_{i=1}\alpha_{i} \cdot \Phi(\mathbf{x}_{i}) \\ &amp;amp;\frac{\partial L}{\partial \xi_{i}} = C - \alpha_{i}-\beta_{i} = 0 \ \ \forall i \end{align*} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식을 통해 나온 식들을 최적화 함수에 대입하면 다음과 같이 정리 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ L = \sum^{l}_{i=1}\alpha_{i}\Phi(\mathbf{x}_{i}) \cdot \Phi(\mathbf{x}_{i}) - \sum^{l}_{i=1} \sum^{l}_{j=1} \alpha_{i}\alpha_{j}\Phi(\mathbf{x}_{i})\Phi(\mathbf{x}_{j}) \\ (0 \leq \alpha_{i} \leq C) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식에 음수를 곱해서 최소화 문제로 변환할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ L = \sum^{l}_{i=1} \sum^{l}_{j=1} \alpha_{i}\alpha_{j}\Phi(\mathbf{x}_{i})\Phi(\mathbf{x}_{j})- \sum^{l}_{i=1}\alpha_{i}\Phi(\mathbf{x}_{i}) \cdot \Phi(\mathbf{x}_{i}) \\ (0 \leq \alpha_{i} \leq C) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-SVM과 마찬가지로 $\alpha_{i}$의 값에 따라 위치가 달라진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X3Xiz/btrH0RBdvsv/Xc1ECqUz3KJe7v0sWCLE9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X3Xiz/btrH0RBdvsv/Xc1ECqUz3KJe7v0sWCLE9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X3Xiz/btrH0RBdvsv/Xc1ECqUz3KJe7v0sWCLE9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX3Xiz%2FbtrH0RBdvsv%2FXc1ECqUz3KJe7v0sWCLE9K%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;491&quot; height=&quot;320&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Case 1 : $\alpha_{i}=0$ &amp;rarr; a non-support vector&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $\alpha_{i}=0$라는 의미는 $\beta_{i}$가 $C$라는 것이고, 이는 조건에 의해 $\xi_{i} = 0$이라는 것과 같다. 결국 이 객체들은 $L$에 아무것도 영향을 주지 않는 hyper sphere 안 쪽에 위치하는 점이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Case 2 : $\alpha_{i} = C$ &amp;rarr; Support vector&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 케이스를 만족하려면 $\beta_{i}$는 0이 되어야 하고, $\xi$는 0보다 커야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 만족하는 $\alpha$는 support vector가 되고, hyper sphere 바깥쪽에 위치하는 점이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Case 3 : $0 &amp;lt; \alpha_{i} &amp;lt; C$ &amp;rarr; Support vector&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 부등식을 만족하는 $\alpha_{i}$는 결국 $\xi$가 0이 되고, 이는 support vector 이면서 hyper sphere 위에 위치하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>study/IME654</category>
      <category>svdd</category>
      <category>SVDD anomaly detection</category>
      <category>SVDD 설명</category>
      <category>SVDD 이상치 탐지</category>
      <category>SVDD란</category>
      <author>ys_cs17</author>
      <guid isPermaLink="true">https://ys-cs17.tistory.com/92</guid>
      <comments>https://ys-cs17.tistory.com/92#entry92comment</comments>
      <pubDate>Sun, 24 Jul 2022 15:06:02 +0900</pubDate>
    </item>
  </channel>
</rss>