آموزش

هوش مصنوعی با پایتون – بخش پنجم – یادگیری نظارت‌شده : طبقه‌بندی

 

رگرسیون منطقی: طبقه‌بندی کننده درخت تصمیم‌گیری[1]

یک درخت تصمیم‌گیری درواقع یک فلوچارت درخت دودوئی است که در آن هر گره گروهی از مشاهدات را طبق برخی از متغیرهای ویژگی تقسیم می‌کند. در اینجا ما در حال ساخت طبقه‌بندی کننده درخت تصمیم‌گیری برای پیش‌بینی زن یا مرد بودن هستیم. ما یک مجموعه داده بسیار کوچک با 19 نمونه خواهیم گرفت. این نمونه‌ها شامل دو ویژگی “قد” و “طول مو” است.

 

پیش‌نیاز

برای ساخت طبقه‌بندی کننده زیر، باید pydotplus و Graphviz را نصب کنیم. در اصل Graphviz ابزاری برای ترسیم گرافیک با استفاده از فایل‌های dot است و pydotplus ماژولی برای زبان نقطه[2] Graphviz است. می‌توان آن را از طریق Package Manager یا pip نصب کرد. اکنون می‌توان طبقه‌بندی کننده درخت تصمیم‌گیری را با کمک کد پایتون زیر ساخت. برای شروع اجازه دهید چند کتابخانه مهم را به شرح زیر وارد کنیم –

import pydotplus

from sklearn import tree

from sklearn.datasets import load_iris

from sklearn.metrics import classification_report

from sklearn import cross_validation

import collections

اکنون ما باید داده‌ها را به شرح زیر ارائه دهیم –

X = [[165,19], [175,32], [136,35], [174,65], [141,28], [176,15], [131,32],

[166,6], [128,32], [179,10], [136,34], [186,2], [126,25], [176,28], [112,38],

[169,9], [171,36], [116,25], [196,25]]

Y = [‘Man’,’Woman’,’Woman’,’Man’,’Woman’,’Man’,’Woman’,’Man’,’Woman’,

‘Man’,’Woman’,’Man’,’Woman’,’Woman’,’Woman’,’Man’,’Woman’,’Woman’,’Man’]

data_feature_names = [‘height’,’length of hair’]

X_train, X_test, Y_train, Y_test = cross_validation.train_test_split

(X, Y, test_size=0.40, random_state=5)

 

پس از تهیه دیتاست، ما باید مدل را که می‌تواند به شرح زیر انجام شود، fit کنیم –

clf = tree.DecisionTreeClassifier()

clf = clf.fit(X,Y)

پیش‌بینی را می‌توان با کمک کد پایتون زیر انجام داد –

prediction = clf.predict([[133,37]])

print(prediction)

ما می‌توانیم به کمک کد پایتون زیر درخت تصمیم‌گیری را تصویرسازی کنیم –

dot_data = tree.export_graphviz(clf,feature_names = data_feature_names,

 out_file = None,filled = True,rounded = True)

graph = pydotplus.graph_from_dot_data(dot_data)

colors = (‘orange’, ‘yellow’)

edges = collections.defaultdict(list)

for edge in graph.get_edge_list():

edges[edge.get_source()].append(int(edge.get_destination()))

for edge in edges: edges[edge].sort()

for i in range(2):dest = graph.get_node(str(edges[edge][i]))[0]

dest.set_fillcolor(colors[i])

graph.write_png(‘Decisiontree16.png’)

 

کد فوق پیش‌بینی ] “Woman”[را ارائه داده و درخت تصمیم‌گیری زیر را ایجاد می‌کند –

 

درخت تصمیم‌گیری[3]

 

ما می‌توانیم مقادیر ویژگی‌ها را برای آزمودنِ آن‌ها تغییر دهیم.

 

 

طبقه‌بندی کننده جنگل تصادفی

همان‌طور که می‌دانیم متدهای ensemble متدهایی هستند که مدل‌های یادگیری ماشین را در یک مدل یادگیری ماشین قدرتمندتر ترکیب می‌کنند. جنگل تصادفی به معنی مجموعه‌ای از درختان تصمیم‌گیری، یکی از آن‌ها است. جنگل تصادفی بهتر از یک درخت تصمیم‌گیری است، زیرا ضمن حفظ قدرت‌های پیش‌بینی کننده، می‌تواند با میانگین گرفتن از نتایج، over-fitting (داده‌هایی که پراکندگی کمی دارند) را کاهش دهد. در اینجا ما در حال اجرای مدل جنگل تصادفی در دیتاست سرطان Scikit Learn هستیم.

 

پکیج‌های ضروری را import کنید –

from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import train_test_split

from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()

import matplotlib.pyplot as plt

import numpy as np

اکنون ما باید دیتاستی ارائه دهیم که می‌تواند به شرح زیر انجام شود –

cancer = load_breast_cancer()

X_train, X_test, y_train,

y_test = train_test_split(cancer.data, cancer.target, random_state = 0)

پس از تهیه دیتاسِت، باید مدل را که می‌تواند مانند زیر باشد، fit کنیم.

forest = RandomForestClassifier(n_estimators = 50, random_state = 0)

forest.fit(X_train,y_train)

حالا دقت را روی مجموعه training و زیرمجموعه test به دست می‌آوریم. اگر ما تعداد تخمین زننده‌ها را افزایش دهیم دقت زیرمجموعه آزمایش هم افزایش خواهد یافت.

print(‘Accuracy on the training subset: (:.3f)’,format(forest.score(X_train,y_train)))

print(‘Accuracy on the training subset: (:.3f)’,format(forest.score(X_test,y_test)))

خروجی

Accuracy on the training subset: (:.3f) 1.0

Accuracy on the training subset: (:.3f) 0.965034965034965

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

n_features = cancer.data.shape[1]

plt.barh(range(n_features),forest.feature_importances_, align=’center’)

plt.yticks(np.arange(n_features),cancer.feature_names)

plt.xlabel(‘Feature Importance’)

plt.ylabel(‘Feature’)

plt.show()

 

 

بخش‌های دیگر مقاله را از لینک‌های زیر بخوانید:

هوش مصنوعی با پایتون – بخش پنجم – یادگیری نظارت‌شده : طبقه‌بندی (قسمت اول)

هوش مصنوعی با پایتون – بخش پنجم – یادگیری نظارت‌شده : طبقه‌بندی (قسمت دوم)

هوش مصنوعی با پایتون – بخش پنجم – یادگیری نظارت‌شده : طبقه‌بندی (قسمت سوم)

هوش مصنوعی با پایتون – بخش پنجم – یادگیری نظارت‌شده : طبقه‌بندی (قسمت چهارم)

هوش مصنوعی با پایتون – بخش پنجم – یادگیری نظارت‌شده : طبقه‌بندی (قسمت آخر)

 

 

[1] Decision Tree Classifier

[2] Dot Language

[3] Decision Tree

 

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا