ساخت کلاسیفایر جنگل تصادفی با کتابخانه Scikit-Learn

بفرست برای دوستت
Telegram
WhatsApp
ساخت طبقه‌بندی‌کننده جنگل تصادفی

فهرست مطالب

در این مقاله، خواهیم دید چگونه یک طبقه‌بندی‌کننده یا کلاسیفایر جنگل تصادفی (Random Forest Classifier) با استفاده از کتابخانه Scikit-Learn زبان برنامه‌نویسی پایتون بسازیم و به منظور انجام این کار، از مجموعه داده IRIS استفاده خواهیم کرد که یک مجموعه داده متداول و مشهور است. جنگل تصادفی یا جنگل تصمیم تصادفی الگوریتم یادگیری ماشین نظارت شده‌ ای است که برای طبقه‌بندی، رگرسیون و سایر وظایف با استفاده از درخت‌های تصمیم استفاده می‌شود.

طبقه‌بندی‌کننده جنگل تصادفی یک مجموعه از درخت‌ های تصمیم از یک زیرمجموعه تصادفی از مجموعه آموزشی ایجاد می‌کند. اصولاً این الگوریتم یک مجموعه از درخت‌های تصمیم از یک زیرمجموعه تصادفی از مجموعه آموزشی است و سپس آراء از درخت‌های تصمیم مختلف جمع‌آوری می‌شود تا تصمیم نهایی انجام شود.

در این الگوریتم طبقه‌بندی، از مجموعه داده‌های گل آیریس برای آموزش و آزمون مدل استفاده خواهیم کرد. ما یک مدل برای طبقه‌بندی نوع گل خواهیم ساخت.

 

کد: بارگیری مجموعه داده

# importing required libraries 
# importing Scikit-learn library and datasets package 
from sklearn import datasets 

# Loading the iris plants dataset (classification) 
iris = datasets.load_iris()	 

 

کد: بررسی محتوا و نام ویژگی‌های موجود در مجموعه داده

print(iris.target_names) 

 خروجی:

[‘setosa’ ‘versicolor’ ‘virginica’]

کد:

print(iris.feature_names)

 خروجی:

[‘sepal length (cm)’, ’sepal width (cm)’, ’petal length (cm)’, ’petal width (cm)’]

کد: 

# dividing the datasets into two parts i.e. training datasets and test datasets 
X, y = datasets.load_iris( return_X_y = True) 

# Splitting arrays or matrices into random train and test subsets 
from sklearn.model_selection import train_test_split 
# i.e. 70 % training dataset and 30 % test datasets 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30) 

 

کد: وارد کردن کتابخانه‌های مورد نیاز و ماژول طبقه‌بندی‌کننده جنگل تصادفی

# importing random forest classifier from assemble module 
from sklearn.ensemble import RandomForestClassifier 
import pandas as pd 
# creating dataframe of IRIS dataset 
data = pd.DataFrame({‘sepallength’: iris.data[:, 0], ’sepalwidth’: iris.data[:, 1], 
					’petallength’: iris.data[:, 2], ’petalwidth’: iris.data[:, 3], 
					’species’: iris.target}) 

 

کد: نمایش یک نگاه به مجموعه داده

# printing the top 5 datasets in iris dataset 
print(data.head()) 

خروجی:

     sepallength   sepalwidth   petallength     petalwidth   species

0          5.1             3.5               1.4                0.2           0

1          4.9             3.0               1.4                0.2           0

2          4.7             3.2               1.3                0.2           0

3          4.6             3.1               1.5               0.2            0

4          5.0             3.6               1.4               0.2            0

 

  استفاده از SVM برای دسته‌بندی در یک مجموعه داده غیرخطی

کد:

# creating a RF classifier 
clf = RandomForestClassifier(n_estimators = 100) 

# Training the model on the training dataset 
# fit function is used to train the model using the training sets as parameters 
clf.fit(X_train, y_train) 

# performing predictions on the test dataset 
y_pred = clf.predict(X_test) 

# metrics are used to find accuracy or error 
from sklearn import metrics 
print() 

# using metrics module for accuracy calculation 
print("ACCURACY OF THE MODEL: ", metrics.accuracy_score(y_test, y_pred)) 

خروجی:

ACCURACY OF THE MODEL: 0.9238095238095239

کد: پیش‌بینی نوع گل از مجموعه داده

# predicting which type of flower it is. 
clf.predict([[3, 3, 2, 2]]) 

 خروجی:

array([0])

این به این معناست که نوع گل ستوسا است، زیرا در مجموعه داده ما سه گونه یا کلاس وجود دارد: ستوسا، ورسی‌کالر و ویرجینیا. حالا با استفاده از خطوط کد زیر نیز ویژگی‌های مهم یا انتخاب ویژگی‌ها در مجموعه داده IRIS را محاسبه خواهیم کرد.

# importing random forest classifier from assemble module 
from sklearn.ensemble import RandomForestClassifier 
# Create a Random forest Classifier 
clf = RandomForestClassifier(n_estimators = 100) 

# Train the model using the training sets 
clf.fit(X_train, y_train)

 

کد: محاسبه اهمیت ویژگی

# using the feature importance variable 
import pandas as pd 
feature_imp = pd.Series(clf.feature_importances_, index = iris.feature_names).sort_values(ascending = False) 
feature_imp

 خروجی:

petal width (cm)     0.458607
petal length (cm)    0.413859
sepal length (cm)    0.103600
sepal width (cm)     0.023933
dtype: float64

 

  پیاده‌سازی رگرسیون چندجمله‌ ای با پایتون از پایه

ویژگی‌های هایپرپارامتری کلاسیفایر جنگل تصادفی

 حالا می خواهیم در مورد ویژگی‌های مختلف هایپرپارامتری که در یک کلاسیفایر جنگل تصادفی وجود دارند، آموزش ببینیم.

ویژگی‌های هایپرپارامتری، تنظیماتی هستند که نمی‌توان از داده‌های معمولی که به الگوریتم ارائه می‌دهیم، یاد گرفت؛ این ویژگی‌ها به طور داخلی در الگوریتم وجود دارند و هر الگوریتم دارای یک مجموعه پیش‌فرض از ویژگی‌های هایپرپارامتری خود است. اغلب این ویژگی‌ها برای افزایش دقت مدل تنظیم می‌شوند، و ما می‌توانیم از روش‌های مختلفی مانند GridSearchCV و RandomizedSearchCV استفاده کنیم.

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

n_estimators

ما می‌دانیم که یک جنگل تصادفی در واقع یک گروه از درختان تصمیم است، و پارامتر n_estimators تعداد درختان درون کلاسیفایر را کنترل می‌کند. ممکن است فکر کنیم که استفاده از تعداد زیادی از درختان برای سازگاری مدل می‌تواند به ما کمک کند تا نتایجی کلی تر به دست آوریم، اما این همیشه درست نیست. با این وجود، این باعث بیش‌برازش نمی‌شود، اما ممکن است پیچیدگی زمانی مدل را افزایش دهد. تعداد پیش‌فرض درختان در scikit-learn مقدار ۱۰۰ است.

 

max_depth

این پارامتر، حداکثر ارتفاعی را که درختان داخل جنگل می‌توانند داشته باشند، کنترل می‌کند. این یکی از مهمترین هایپرپارامترهاست زمانی که به افزایش دقت مدل می‌پردازیم؛ چرا که با افزایش عمق درخت، دقت مدل به حد معینی افزایش پیدا می‌کند، اما سپس به تدریج کاهش می‌یابد به دلیل مشکل بیش‌برازش در مدل. تنظیم مناسب مقدار این پارامتر از اهمیت زیادی برخوردار است تا از بیش‌برازش جلوگیری شود. مقدار پیش‌فرض آن None است؛ به این معنا که گره‌های درون درخت تا زمانی که همه برگ‌ها خالص شوند یا همه برگ‌ها حاوی مقدار کمتر از min_samples_split (یک هایپرپارامتر دیگر) باشند، ادامه می‌یابد.

  تولید داده‌های تست برای یادگیری ماشین

 

min_samples_split

این پارامتر، حداقل تعداد نمونه‌ها را که یک گره داخلی باید داشته باشد تا بتواند به گره‌های بعدی تقسیم شود، مشخص می‌کند. اگر مقدار min_samples_split خیلی کم باشد، در این صورت درخت به رشد ادامه می‌دهد و ابتدا از اندازه‌گیری خارج می‌شود. با افزایش مقدار min_samples_split، تعداد کل تقسیم‌ها را می‌توان کاهش داد و این به محدود کردن تعداد پارامترها در مدل و در نتیجه کاهش بیش‌برازش کمک می‌کند. با این حال، مقدار نباید خیلی بزرگ باشد تا تعداد پارامترها به‌طور قابل‌توجهی کاهش یابد و مدل اندرفیت شود. معمولاً مقدار min_samples_split را بین 2 و 6 نگه می‌داریم. با این حال، مقدار پیش‌فرض آن 2 است.

 

min_samples_leaf

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

 

max_features

جنگل تصادفی، نمونه‌های تصادفی از ویژگی‌ها را انتخاب کرده و سعی می‌کند بهترین تقسیم را پیدا کند. max_features به تعداد ویژگی‌هایی که در نظر گرفته می‌شود برای انجام بهترین تقسیم کمک می‌کند. این پارامتر می‌تواند چهار مقدار “auto”، “sqrt”، “log2” و None را بپذیرد.

– در حالت auto: 

considers max_features = sqrt(n_features)

– در حالت sqrt:

max_features = sqrt(n_features

– در حالت log2:

max_features = log2(n_features)

– در حالت None: 

max_features = n_features

  • max_leaf_nodes: این حداکثر تعداد برگ‌هایی را که یک گره می‌تواند داشته باشد، مشخص می‌کند و در نتیجه به کاهش عمق درخت کمک می‌کند و به طور موثر در کاهش بیش‌برازش نقش دارد. اگر مقدار به None تنظیم شود، درخت به طور نامحدود ادامه می‌یابد.
  • max_samples: این هایپرپارامتر به انتخاب حداکثر تعداد نمونه‌ها از مجموعه داده آموزش برای آموزش هر درخت فردی کمک می‌کند.

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

Rating 0.00 from 0 votes

لیست دروس دوره

آموزش پیشنهادی و مکمل

اگر سوالی در مورد این درس دارید، در کادر زیر بنویسید.

guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
سبد خرید

دوره جامع متخصص علم داده و یادگیری ماشین

برای دیدن نوشته هایی که دنبال آن هستید تایپ کنید.
×