<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Random Forest |</title><link>https://chaeniverse.github.io/tags/random-forest/</link><atom:link href="https://chaeniverse.github.io/tags/random-forest/index.xml" rel="self" type="application/rss+xml"/><description>Random Forest</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Thu, 19 Sep 2024 00:00:00 +0000</lastBuildDate><image><url>https://chaeniverse.github.io/media/icon_hu_da05098ef60dc2e7.png</url><title>Random Forest</title><link>https://chaeniverse.github.io/tags/random-forest/</link></image><item><title>Random Forest</title><link>https://chaeniverse.github.io/blog/random-forest/</link><pubDate>Thu, 19 Sep 2024 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/random-forest/</guid><description>&lt;h2 id="random-forest"&gt;Random Forest&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Random Forest&lt;/strong&gt; 는 bagging의 특수한 형태로, base learner로 &lt;strong&gt;decision tree&lt;/strong&gt; 를 쓴다. 두 가지 메커니즘으로 앙상블의 다양성을 확보한다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Bagging (bootstrap sampling)&lt;/strong&gt; — 각 tree는 원본 데이터에서 복원 추출한 bootstrap 샘플로 학습&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Random variable selection&lt;/strong&gt; — tree의 각 분기점에서, 전체 $p$ 개 변수 중 무작위로 $m$ 개만 후보로 두고 그 중 최선의 변수로 분기&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="알고리즘"&gt;알고리즘&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Bootstrap size $t$ 의 무작위 샘플 생성&lt;/li&gt;
&lt;li&gt;분기 시 원본 $p$ 개 변수에서 $m$ 개의 변수만 무작위로 선택해 후보로 두고 분기&lt;/li&gt;
&lt;li&gt;다수의 decision tree를 학습한 뒤 결과를 결합 (분류는 majority vote, 회귀는 평균)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="핵심-통찰"&gt;핵심 통찰&lt;/h2&gt;
&lt;p&gt;변수 제약 때문에 &lt;strong&gt;개별 tree의 성능은 떨어진다.&lt;/strong&gt; 하지만 tree들 간 &lt;strong&gt;상관(correlation)이 줄어들어&lt;/strong&gt; 평균/투표로 결합하면 전체 앙상블의 성능은 더 좋아진다. &amp;ldquo;약한 학습기들을 다양하게 조합해 강한 학습기를 만든다&amp;quot;의 정수.&lt;/p&gt;
&lt;h2 id="일반화-오차-generalization-error"&gt;일반화 오차 (Generalization Error)&lt;/h2&gt;
&lt;p&gt;Random Forest의 일반화 오차에는 다음과 같은 상한이 알려져 있다.&lt;/p&gt;
$$\text{Generalization Error} \;\le\; \frac{\bar{\rho}\,(1 - s^2)}{s^2}$$&lt;p&gt;여기서&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\bar{\rho}$ : tree들 간 결과의 평균 &lt;strong&gt;상관(correlation)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;$s^2$ : 개별 tree의 &lt;strong&gt;정확도&lt;/strong&gt; (strength)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ 좋은 일반화는 &lt;strong&gt;개별 모델 성능($s$)이 높으면서 모델 간 상관($\bar{\rho}$)이 낮을 때&lt;/strong&gt; 얻어진다. 이게 RF가 변수 무작위 선택을 추가하는 이유 — 약간의 개별 정확도 손해를 보더라도 상관을 크게 떨어뜨려서 전체 bound를 줄이는 거래.&lt;/p&gt;
&lt;h2 id="변수-중요도-variable-importance"&gt;변수 중요도 (Variable Importance)&lt;/h2&gt;
&lt;p&gt;Random Forest는 &lt;strong&gt;Out-of-Bag (OOB)&lt;/strong&gt; 데이터를 활용해 변수 중요도를 계산할 수 있다 (별도의 validation set 없이도 가능).&lt;/p&gt;
&lt;h3 id="절차"&gt;절차&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;각 tree에 대해, 그 tree 학습에 쓰이지 않은 OOB 샘플로 예측 오차를 측정.&lt;/li&gt;
&lt;li&gt;변수 $x_i$ 의 값을 &lt;strong&gt;무작위로 permute&lt;/strong&gt; 한 OOB 샘플로 다시 예측 오차 측정.&lt;/li&gt;
&lt;li&gt;두 오차의 차이를 모아 평균과 분산을 구한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="중요도-지표"&gt;중요도 지표&lt;/h3&gt;
$$v_i \;=\; \frac{\bar{d}_i}{s_i}$$&lt;p&gt;여기서&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\bar{d}_i$ : OOB 오차 차이의 평균 (permute 후 - permute 전)&lt;/li&gt;
&lt;li&gt;$s_i^2$ : 그 차이의 분산&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;직관적으로, &lt;strong&gt;분기 시 자주 쓰이는 중요한 변수&lt;/strong&gt;일수록 permute하면 모델이 크게 망가져 오차 차이가 커진다 → $\bar{d}_i$ 가 크다 → $v_i$ 가 크다.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>