جنگل انزوا

حاشیه|بندانگشتی|امتیاز های نرمال شده روی دادگان دیتاست "Old Faithful" در نتیجه ی اجرای الگوریتم جنگل انزوا
بندانگشتی|300x300پیکسل|نمونه‌ای از یک درخت انزوا. در این درخت گره‌ی مشخص شده با رنگ قرمز تنها دو یال با ریشه‌ی درخت فاصله دارد. در صورتی که مسیر مشخص شده با رنگ آبی پنج یال با ریشه‌ی درخت فاصله دارد. بنابراین می‌توان گفت که گره‌ی قرمز در مقایسه با سایر گره‌های درخت پَرت‌تر است.
**جنگل اِنزِوا** (به انگلیسی Isolation Forest) یک روش یادگیری نظارت نشده برای تشخیص داده‌های پَرت است.  

یک جنگل انزوا مجموعه‌ای از **درخت‌های انزوا **(به انگلیسی Isolation Tree) است. هر درخت انزوا در واقع یک درخت دودویی می‌باشد.

به طور خلاصه این الگوریتم فضای دادگان را به کمک خطوطی موازی پایه های متعامد فضا جداسازی می کند و به دادگانی که در قسمت های مختلف این فضا قرار گرفته اند امتیازی برای میزان غیر طبیعی بودن اختصاص می دهد. نحوه ی تخصیص این امتیاز نیز بدین صورت است که دادگانی که به خطوط جداساز کمتری برای قرار گیری در یک خوشه ی جداگانه نیاز دارند امتیاز بیشتری دریافت می کنند.

شکل سمت چپ کاربردی از این الگوریتم را نشان میدهد. در ابن شکل فاصله ی زمانی بین فوران بر حسب زمان هر فوران برای آبفشان مخروطی Old Faithful  نشان داده شده است. نواحی قرمز تیره امتیاز ناهنجاری بیشتری را نشان می دهند.

در درخت انزوا داده‌هایی که زودتر از بقیه جدا شوند نزدیک‌تر به ریشهٔ درخت می‌باشند و به این ترتیب احتمال پَرت بودن آن‌ها بیشتر می‌شود. میزان پرت بودن یک داده در یک درخت انزوا به صورت کلی برابر است با تعداد یال‌هایی که باید از ریشهٔ درخت تا گرهٔ برگ (Leaf Node) طی شود؛ بنابراین هرچه این مسیر کوتاه‌تر باشد احتمال پرت بودن داده بیشتر می‌شود. در نهایت جنگل انزوا برای تشخیص پرت بودن میانگین مسیرهای طی شده در هر درخت انزوا برای هر داده را محاسبه می‌کند.

## تاریخچه
در یادگیری ماشین، تشخیص ناهنجاری در داده ها یکی از مسائل مهم است. روش های مختلفی برای تشخیص ناهنجاری وجود دارد، اما بسیاری از این روش ها به دلیل نیاز به داده های برچسب خورده و یا تلاش برای تخمین توزیع داده ها، در مواقعی که داده های برچسب خورده کمی در دسترس هستند، مشکل دارند. 

این الگوریتم اولین بار در سال 2008 توسط فی تونی لیو و ژی هوا ژو توسعه داده شد. در سال 2010 یک نسخه ی دیگری از این الگوریتم به نام سای فارست توسعه داده شد تا مسئله ی مربوز به ناهنجاری های خوشه ای و ناهنجاری های موازی با پایه های متعامد فضا را حل کند.  این الگوریتم برای تشخیص ناهنجاری در داده های بدون برچسب و با توزیع نامعلوم استفاده می شود.

## الگوریتم
### ساختن درخت انزوا
روند ساختن یک درخت ایزوله از روی یک مجموعهٔ دادهٔ X=\lbrace x_1, ..., x_n\rbrace به‌طور خلاصه به ترتیب زیر است:
# اگر \left\vert X \right\vert \leq 1 یا ارتفاع درخت به یک حد از پیش تعیین شدهٔ l رسیده باشد:
## ساختن یک گرهٔ برگ.
# در غیر این صورت:
##انتخاب تصادفی یک ویژگی q (Feature) از میان تمامی ویژگی‌های موجود در مجوعهٔ دادهٔ X.
##انتخاب کمترین و بیشترین مقدار در ویژگی q به نام‌های min و max.
## انتخاب تصادفی یک مقدار p بین min و max.
## ساختن یک گرهٔ داخلی X_l \subseteq X به عنوان فرزند چپ درخت به طوری که ویژگی q تمامی عناصر مجموعهٔ X_l کمتر از p باشد و فراخوانی دوبارهٔ الگوریتم بر روی این مجموعه از داده‌ها.
## ساختن یک گرهٔ داخلی X_r \subseteq X به عنوان فرزند راست درخت به طوری که ویژگی q تمامی عناصر مجموعهٔ X_r بزرگتر یا مساوی p باشد و فراخوانی دوبارهٔ الگوریتم بر روی این مجموعه از داده‌ها.

## خصوصیات الگوریتم
- این الگوریتم پیچیدگی زمانی از مرتبه ی خطی دارد و برای اجرا به  حافظه ی کمی نیاز دارد. این موضوع این الگوریتم را برای اجرا روی دادگان حجیم مناسب می سازد.

- جنگل انزوا با استفاده از درخت های تصمیم گیری که به صورت تصادفی ساخته شده اند، ناهنجاری را تشخیص می دهد.

- هر درخت تصمیم گیری در جنگل انزوا، به صورت جداگانه از داده های دیگر ساخته می شود.

- این الگوریتم برای تشخیص ناهنجاری، از مفهوم "ارزش انزوا" استفاده می کند.

- جنگل انزوا به عنوان یک الگوریتم یادگیری نظارت نشده شناخته می شود، به این معنی که از داده های بدون برچسب استفاده می کند.

## ساختن جنگل انزوا
برای ساخت جنگل انزوا، ابتدا باید یک مجموعه داده تهیه شود. سپس به ازای هر درخت تصمیم گیری در جنگل، داده های تصادفی از مجموعه داده انتخاب می شوند. برای ساخت هر درخت، از یک الگوریتم تصمیم گیری مانند CART (Classification and Regression Trees) استفاده می شود. سپس، برای هر نمونه در مجموعه داده، ارزش انزوا محاسبه می شود. در نهایت، با محاسبه میانگین ارزش انزوای هر نمونه، نمونه هایی که بیشترین ارزش انزوا را دارند، به عنوان ناهنجاری ها شناسایی می شوند.

## محاسبهٔ امتیاز پرت بودن (Anomaly score)
برای محاسبه امتیاز پرت بودن یا ناهنجاری، از مفهوم "ارزش انزوا" استفاده می شود. ارزش انزوا برای هر نمونه محاسبه می شود و نشان دهنده میزان انحراف آن نمونه از دیگر نمونه ها است. برای محاسبه ارزش انزوا، ابتدا باید درخت تصمیم گیری ساخته شده را روی داده ها آموزش داد. سپس، برای هر نمونه در مجموعه داده، مسیری که درخت تصمیم گیری برای آن دنبال کرده است، پیدا می شود. سپس با محاسبه میزان انحراف هر نمونه از سایر نمونه ها، ارزش انزوای آن نمونه محاسبه می شود.

## خصوصیات جنگل انزوا
* **زیرنمونه برداری (Sub-sampling):** این الگوریتم نیازی به آن ندارد که همهٔ داده‌های مربوط به مرحلهٔ آموزش (Training) را در اختیار داشته باشد. به همین دلیل تنها یک زیرنمونه از داده‌ها برای آموزش الگوریتم کفایت می‌کند. این در حالی است که اکثر الگوریتم‌ها هرچه داده‌های بیشتری را دراختیار داشته باشند بهتر عمل می‌کنند. به این ترتیب می‌توان گفت که یکی از ویژگی‌های مثبت این الگوریتم زیرنمونه برداری و قابلیت کار کردن با داده‌های کم می‌باشد.

* جنگل انزوا به دلیل استفاده از درخت های تصمیم گیری، برای داده های با بعد بالا نیز قابل استفاده است.
* این الگوریتم دارای قابلیت تشخیص ناهنجاری در داده های بدون برچسب و با توزیع نامعلوم است.
* جنگل انزوا دارای پارامترهای قابل تنظیمی است که می تواند تاثیر مستقیم بر دقت الگوریتم داشته باشد.

## کاربردها
- تشخیص ناهنجاری در داده های پزشکی، مانند تصاویر پزشکی و ...

## منابع

رده:داده پرت آماری
رده:یادگیری بی‌نظارت