برای پیاده سازی یک درخت تصمیم از Scratch در زبان برنامهنویسی پایتون، به چند جزء اصلی نیاز داریم:
کلاس Node: این کلاس به عنوان نمایندهی هر گره در درخت تصمیم عمل میکنه. این گرهها شامل اطلاعاتی دربارهی شاخص ویژگیها برای تقسیم (feature_index)، آستانهی تقسیم (threshold)، و گرههای فرزند چپ و راست (left و right) هستن. همچنین، این کلاس میزان افزایش اطلاعات ناشی از هر تقسیم (info_gain) و پیشبینیهای نهایی برای گرههای برگ (value) رو داراست.
class Node:
def __init__(self, feature_index=None, threshold=None,
left=None, right=None, info_gain=None, value=None):
self.feature_index = feature_index
self.threshold = threshold
self.left = left
self.right = right
self.info_gain = info_gain
self.value = value
کلاس DecisionTreeClassifier: این کلاس هستهی الگوریتم درخت تصمیم رو تشکیل میده. متد سازنده (Constructor) پارامترهایی مثل حداکثر عمق درخت (max_depth) و حداقل تعداد نمونهها برای یک گره (min_samples_split) رو مشخص میکنه. تابع build_tree مسئول ساخت درخته و به صورت بازگشتی بهترین تقسیم رو بر اساس افزایش اطلاعات انتخاب میکنه. تابع predict برای پیشبینی کلاسهای نمونههای جدید استفاده میشه.
class DecisionTreeClassifier:
def __init__(self, min_samples_split=2, max_depth=2):
self.min_samples_split = min_samples_split
self.max_depth = max_depth
def build_tree(self, dataset, curr_depth=0):
pass
def train(self, X, Y):
pass
def predict(self, X):
pass
توابع کمکی: تابع entropy برای محاسبه انتروپی استفاده میشه که میزان ناخالصی در یک مجموعه داده رو نشون میده. انتروپی بالا به معنای وجود تنوع بیشتر در برچسبهای دادههاست، و انتروپی پایین نشوندهنده یکنواختی بیشتر در برچسبهاست.
تابع calculate_info_gain برای محاسبه افزایش اطلاعات یک تقسیم مشخص در درخت استفاده میشه. افزایش اطلاعات معیاری برای اندازهگیری میزان بهبودی هست که یک تقسیم مشخص در پیشبینی برچسبها ایجاد میکنه.
تابع best_split این تابع کمک میکنه تا بهترین نقطه تقسیم برای دادهها رو بر اساس معیار افزایش اطلاعات یا شاخص جینی پیدا کنیم. این تابع از بین همه ویژگیها و آستانههای ممکن، تقسیمی رو انتخاب میکنه که بیشترین افزایش اطلاعات رو به دست بیارن.
def entropy(y):
class_labels = np.unique(y)
entropy = 0
for cls in class_labels:
p = len(y[y == cls]) / len(y)
entropy -= p * np.log2(p)
return entropy
def calculate_info_gain(dataset, feature_index, threshold):
pass
def best_split(dataset, num_features):
pass
❗️توجه داشته باشین که کدهای گذاشته شده قطعه کد هستن و فقط به صورت کلی توابع لازم برای پیاده سازی درخت تصمیم رو توضیح دادن و با اجراشون خروجی نخواهید داشت.
#Machine_Learning
#Decision_Tree
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👌6👍3❤1👨💻1
❓کوئیز شماره ۶۰: مزیت اصلی استفاده از Bagging با درخت تصمیمگیری چیه؟
Anonymous Quiz
56%
با میانگینگیری پیشبینیهای چندین درخت، از بیشبرازش جلوگیری میکنه
9%
قابلیت تفسیر درختهای تصمیمگیری رو بهبود میده
28%
پیچیدگی محاسباتی درختهای تصمیمگیری رو کاهش میده
6%
به درختهای تصمیمگیری اجازه میده تا با دادههای گمشده کار کنن
👍4❤2😎2
درخت بگینگ (Tree Bagging) یک روش یادگیری گروهی (Ensemble learning) که در اون چندین درخت تصمیمگیری به صورت مستقل از دادههای آموزشی که به صورت تصادفی انتخاب شدن (Bootstrap Aggregating)، آموزش داده میشن و بعد پیشبینیهاشون باهم ترکیب میشه تا یک مدل نهایی با عملکرد بهتر، کمتر دچار بیشبرازش شه. این روش با کاهش واریانس پیشبینیها، مدلی توانمندتری ایجاد میکنه و برای مجموعههای داده بزرگ که دارای نویز و ابهام هستن، مفیده.
#Machine_Learning
#Decision_Tree
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👌2❤1🔥1
درخت تصمیم بر اساس ساختار شاخهای و برگها کار میکنه. هر شاخه نشوندهنده یک تصمیم و هر برگ نشوندهنده یک دستهبندی یا پیشبینی مقداره. در ادامه، نحوه پیاده سازی درخت تصمیم در scikit-learn رو بررسی میکنیم.
۱. وارد کردن کتابخانهها و دادهها: اول کتابخانههای مورد نیاز وارد میشه.
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
۲. آمادهسازی دادهها: دادهها برای مدلسازی آماده میشه. این مرحله شامل پاکسازی دادهها، جدا کردن ویژگیها و برچسبها و تقسیمبندی دادهها به دو مجموعه آموزشی و تسته.
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
۳. ایجاد مدل و آموزش: یک شی از کلاس DecisionTreeClassifier ایجاد و با دادههای آموزشی مدل آموزش داده میشه.
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
۴. پیشبینی و ارزیابی مدل: با استفاده از مدل آموزش دیده روی دادههای تست پیشبینی انجام داده و دقت مدل ارزیابی میشه.
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f"دقت مدل: {accuracy}")
#Machine_Learning
#Decision_Tree
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👌5❤2👨💻1
❓کوئیز شماره ۶۱: استفاده از پارامتر splitter= random در مقایسه با splitter= best چه مزایا و معایبی داره؟
Anonymous Quiz
75%
حالت random سریعتره اما ممکنه دقت کمتری داشته باشه، در حالی که best دقیقتره و زمان بیشتری میبره.
15%
هیچ تفاوت عمدهای بین این دو وجود نداره.
10%
حالت random برای دادههای با حجم کم مناسبتره.
0%
حالت best همیشه بهترین گزینه است و نباید از random استفاده شه.
😎7❤1👍1
نه max_depth حداکثر تعداد گره هاییه که یک درخت تصمیم میتونه داشته باشه. این پارامتر برای جلوگیری از رشد بیش از حد درخت و کاهش پیچیدگی استفاده میشه. هرس، فرآیند حذف گره ها از یک درخت تصمیمه که برای بهبود دقت درخت و کاهش احتمال بیش برازش انجام شه.
برای هرس درخت تصمیم در Scikit-learn، میشه از تابع ().prune استفاده کرد. این تابع دو پارامتر ورودی criterion و max_depth رو میگیره. برای مثال برای هرس یک درخت تصمیم با استفاده از شاخص Gini و عمق حداکثر 5، میشه از کد زیر استفاده کرد:
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
classifier.fit(X_train, y_train)
pruned_classifier = classifier.prune(criterion="gini", max_depth=5)
#Machine_Learning
#Decision_Tree
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👌1👨💻1
#Weekend
#Machine_Learning
#Decision_Tree
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👏3👍1
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🔥1
Audio
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🔥1
جنگل تصادفی (Random Forest) در گروه الگوریتمهای باناظر قرار داره و برای حل مسائل طبقهبندی و رگرسیون استفاده میشه. این الگوریتم بر اساس ترکیب چندین درخت تصمیم کار میکنه و به عنوان یک روش یادگیری گروهی (Ensemble Learning) شناخته میشه.
هر درخت در "جنگل" سعی میکنه به طور مستقل یک پیشبینی انجام بده، و نتیجهی نهایی بر اساس میانگین یا اکثریت آراء این درختها به دست میاد. ایدهی اصلی پشت این الگوریتم اینکه با استفاده از چندین درخت تصمیم به جای یک درخت تصمیم، بشه پیشبینیهای دقیقتر و معتبرتری انجام داد.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👌2👨💻1
❓کوئیز شماره ۶۱: در مورد تأثیر تعداد درختان در یک جنگل تصادفی، کدوم گزینه صحیحه؟
Anonymous Quiz
11%
افزایش تعداد درختان همیشه به بهبود دقت مدل منجر میشه
17%
افزایش بیرویه تعداد درختان به کاهش سرعت یادگیری و پیشبینی بدون بهبود قابل توجه در دقت منجر میشه
14%
کاهش تعداد درختان معمولاً باعث افزایش دقت مدل میشه
58%
افزایش درختان تا یک حدی دقت رو بهبود میده اما بعد از اون بهبود دقت ناچیز و هزینه محاسبات بیشتر میشه
👍7❤2😎1
خطای Out-of-Bag یک روش ارزیابی عملکرد برای الگوریتمهای جنگل تصادفیه. در فرایند آموزش یک جنگل تصادفی، برای هر درخت تصمیم، یک نمونهگیری بوتاسترپ از دادههای آموزشی انجام میشه. یعنی بعضی از دادهها ممکنه چندین بار در نمونهگیری ظاهر شن، در حالی که بعضی دیگه اصلاً انتخاب نمیشن. دادههایی که در نمونهگیری برای یک درخت خاص استفاده نمیشن، خارج از کیسه (OOB) نام دارن.
پس از آموزش درخت، دادههای OOB برای ارزیابی عملکرد اون درخت به کار میرن، چون این دادهها در آموزش درخت شرکت نداشتن. با استفاده از OOB برای هر درخت، خطای OOB محاسبه میشه و بعد خطاهای هر درخت در جنگل تصادفی میانگینگیری میشه تا خطای OOB کلی محاسبه شه.
مزیت این روش اینکه نیازی به جدا کردن یک مجموعه تست جداگانه نیست و میشه یک تخمین از خطای تعمیم رو بدون استفاده از دادههای بیشتر به دست آورد. خطای OOB به عنوان یک روش در زمان تنظیم هایپرپارامترها کاربرد داره.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔1👌1
در الگوریتم جنگل تصادفی، "تصادفی" به دو مکانیزم اصلی اشاره داره که برای افزایش تنوع در مدلهای درخت تصمیم و کاهش بیشبرازش استفاده میشه. این دو مکانیزم به این صورت هستن:
در جنگل تصادفی، هر درخت تصمیم بر اساس یک نمونه تصادفی از دادهها آموزش میبینه. این نمونهها از طریق فرایندی به نام Bagging انتخاب میشن. در Bagging، نمونههای گوناگون با جایگذاری از مجموعه داده اصلی انتخاب میشن، به این معنی که هر نمونه میتونه بیشتر از یک بار انتخاب شه. در نتیجه باعث میشه که هر درخت تصمیم با توجه به بخشی متفاوت و منحصر به فرد از دادهها آموزش ببینه.
زمان ساخت هر گره در درختهای تصمیم، به جای بررسی تمام ویژگیها برای انتخاب بهترین تقسیم، یک زیر مجموعه تصادفی از ویژگیها انتخاب میشه و بعد بهترین تقسیم از بین این زیرمجموعه ویژگیها انتخاب میشه. این فرایند به مدل اجازه میده که برای هر گره، تنوع بیشتری داشته باشه و به این ترتیب، از بیشبرازش جلوگیری میکنه و مقاومت در برابر نویز و تغییرات در دادهها رو افزایش میده.
این دو تعریف پشت "تصادفی" در جنگل تصادفی باعث میشن که این الگوریتم به عنوان یک مدل قوی و مقاوم در برابر Overfitting شناخته شه. ترکیب پیشبینیهای تمام درختها، که هر کدوم با توجه به نمونهها و ویژگیهای متفاوتی آموزش دیدن، منجر به ایجاد یک مدل نهایی میشه که هم دقت بالایی داره و هم قابلیت تعمیم خوبی به دادههای جدید داره.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍2👌1👨💻1
❓کوئیز شماره ۶۲: کدوم گزینه بهترین توصیف از اثر تصادفی در بهبود کیفیت مدل جنگل تصادفیه؟
Anonymous Quiz
63%
هر درخت به خطاهای مختلف دچار میشه و با ترکیب پیشبینی درختها، خطاها جبران و مدل دقیق حاصل میشه.
26%
تصادفی بودن باعث ساخت درختهای تصمیم مشابه میشه، که در نتیجه مدل نهایی دارای پایداری بیشتری میشه.
11%
تصادفی بودن در انتخاب نمونهها و ویژگیها تاثیری روی کیفیت مدل نهایی نداره و فقط برای کاهش محاسباته.
😎9👌4❤1🤔1
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4👨💻1
❓کوئیز شماره ۶۳: در مواجهه با دادههای نامتعادل در الگوریتم جنگل تصادفی، کدوم استراتژی معمولاً به کار میره؟
Anonymous Quiz
36%
استفاده از تکنیکهایی مثل نمونهبرداری بیشتر (Oversampling) یا نمونهبرداری کمتر (Undersampling)
19%
حذف ویژگیهای کم اهمیت
31%
استفاده از معیارهای تقسیم خاص مثل شاخص جینی
14%
افزایش عمق درختان
❤5😎3👍2
یکی از روشهای رایج اینکه در هر تقسیم (split)، درختهای تصمیمگیری از مقادیر دادهای که موجود هستن استفاده میکنن و مقادیر گمشده رو نادیده میگیرن.
یه روش دیگه اینکه مقادیر گمشده رو در زمان تقسیم به زیر گروهی اختصاص میده که بیشترین شمار (یا وزن) رو دارن. این روش به این دلیل مفیده که اجازه میده مدلسازی بدون نیاز به حدس زدن یا جایگزینی مقادیر گمشده پیش بره.
به طور کلی، جنگلهای تصادفی در مقایسه با الگوریتمهای دیگه نسبت به دادههای گمشده مقاومتر هستن، چون میتونن با استفاده از رایگیری اکثریت پیشبینیهای موثری ارائه بدن.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2👌1👨💻1
جنگل تصادفی با ترکیب چند درخت تصمیمگیری و استفاده از تکنیکی به نام بوتاسترپینگ (Bootstrap Aggregation یا Bagging)، به نتایج قابل اطمینانی دست پیدا میکنه و کاربردهای زیادی داره.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👌3👨💻1
❓کوئیز شماره ۶۴: در کدوم موارد، استفاده از جنگل تصادفی به دلیل قابلیتهای خاصش، مزیت رقابتی ایجاد میکنه؟
Anonymous Quiz
17%
پیشبینی نرخ تبدیل کاربر در وبسایتها با استفاده به دادههای رفتاری غیرساختار یافته
9%
ساخت مدلهای هواشناسی برای پیشبینی دمای روزانه
34%
کلاسبندی متون بر اساس نوع ژانر
40%
تحلیل علت و معلول در دادههای پزشکی برای شناسایی ریسکهای بیماری
❤4😎3👍2
جنگل تصادفی یکی از قدرتمندترین و پرکاربردترین الگوریتمها در زمینه یادگیری ماشینه. توی این پست بلاگ، اینکه جنگل تصادفی یا Random Forest چیه، چطور کار میکنه و چرا بهتر از درخت تصمیم هست رو بررسی میکنیم. همچنین به بعضی از کاربردها، مزایا و معایبش هم پرداختیم.
#Machine_Learning
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👌6❤3👏1👨💻1