مقایسه الگوریتم ها در یادگیری ماشین — راهنمای کاربردی
انتخاب الگوریتم «یادگیری ماشین» (Machine Learning) و «دادهکاوی» (Data Mining) مناسب برای یک مساله خاص، کاری مهم و نیازمند دانش، دقت، تجربه و گاه اندکی آزمون و خطا است. در مطلب «روش انتخاب الگوریتم داده کاوی — راهنمای کاربردی» به چگونگی انتخاب الگوریتم مناسب برای حل یک مساله خاص به طور کامل پرداخته شد. اما، گاه نیاز میشود عملکرد چند الگوریتم روی یک مساله مشخص با هم مقایسه شوند. به طور کلی، مقایسه کارایی الگوریتمهای گوناگون، یک مبحث مهم در حوزه یادگیری ماشین و دادهکاوی محسوب میشود. در این مطلب، روش مقایسه الگوریتم ها در یادگیری ماشین با توجه به کارایی با استفاده از کتابخانه «سایکیتلِرن» (Scikit-Learn) آموزش داده شده است.
از آنچه در این مطلب آموزش داده شده، میتوان به عنوان قالبی برای مقایسه الگوریتمهای گوناگون استفاده کرد؛ مخاطبان میتوانند به میل خود، الگوریتمهای دیگری را نیز به این لیست برای مقایسه اضافه کنند و قالب کاملتری را برای خود بسازند.
انتخاب بهترین مدل یادگیری ماشین
چطور میتوان بهترین مدل یادگیری ماشین را برای حل یک مساله انتخاب کرد؟ هنگام کار روی پروژههای یادگیری ماشین، کاربران معمولا با مدلهای خوب متعددی کار میکنند و چندین مدل را روی یک مساله خاص پیاده میکنند تا در نهایت، بهترین مدل را انتخاب کنند. هر مدل دارای کارایی متفاوتی برای یک مساله خاص است.
با استفاده از روشهای «نمونهسازی مجدد» (Resampling Methods)، مانند «اعتبارسنجی متقابل» (Cross Validation)، میتوانید تخمینی از میزان مناسب بودن هر مدل روی «دادههای دیده نشده» (منظور از Unseen Data، دادههایی است که برای آموزش مدل استفاده نشدهاند و در واقع دادههای جدیدی هستند که به مدل داده میشوند) به دست بیاید. فرد باید قادر باشد با بهرهگیری از این تخمینها، بهترین مدل و یا دو مدل بهتر از میان مدلهای گوناگون ساخته و تست شده روی مساله را برگزیند.
مقایسه الگوریتم ها در یادگیری ماشین بر اساس کارایی
هنگامی که یک مجموعه داده جدید وجود دارد، بصریسازی دادهها با استفاده از روشهای گوناگون، راهکار مناسبی برای بررسی دادهها از چشماندازهای مختلف است. ایده مشابهی برای انتخاب مدل نیز وجود دارد. کاربر باید قادر به استفاده از راهکارهای متفاوت برای بررسی و تخمین صحت الگوریتمهای یادگیری ماشین گوناگون برای حل یک مساله خاص، به منظور انتخاب یک یا دو بهترین گزینه جهت نهاییسازی مدل و استقرار آن باشد.
یک راهکار برای انجام این کار، استفاده از روشهای بصریسازی متفاوت برای نمایش میانگین صحت، واریانس و دیگر مشخصههای صحت مدل است. در بخش بعدی، چگونگی انجام این کار در «زبان برنامهنویسی پایتون» (Python Programming Language) و به زبان ساده شرح داده شده است.
مقایسه الگوریتم ها در یادگیری ماشین
یک راهکار برای مقایسه الگوریتمهای یادگیری ماشین، حصول اطمینان از این این موضوع است که هر الگوریتم به شیوه مشابهی روی دادههای مشابه ارزیابی میشود. میتوان بدین شکل، به ارزیابی هر الگوریتم با بهرهگیری از «چارچوب تست خودکار» (Automated Test Framework) پرداخت.
در مثالی که در ادامه آمده، شش الگوریتم متفاوت «رگرسیون لجستیک» (Logistic Regression)، «آنالیز تشخیص خطی» (Linear Discriminant Analysis)، «درخت دستهبندی و رگرسیون» (Classification and Regression Trees)، «بیز ساده» (Naive Bayes)، «ماشین بردار پشتیبان» (Support Vector Machines) و «K نزدیکترین همسایگی» (K-Nearest Neighbors) با یکدیگر مقایسه شدهاند.
مسالهای که در اینجا مورد بررسی قرار میگیرد، یک مجموعه داده دستهبندی دودویی استاندارد از مخزن یادگیری ماشین UCI است که «Pima Indians Onset of Diabetes» [+] نامیده میشود. مساله دارای دو دسته و هشت متغیر عددی در مقیاسهای گوناگون است. در اینجا، اعتبارسنجی متقابل ۱۰-لایه برای ارزیابی هر الگوریتم مورد استفاده قرار میگیرد. مساله مهمی که باید به آن توجه داشت این است که همه الگوریتمها با «بذر» (Seed) تصادفی مشابهی پیکربندی شدهاند تا این اطمینان حاصل شود که تقسیمبندی مشابهی روی دادههای تست انجام شده و هر الگوریتم به شیوه دقیقا مشابهی ارزیابی شده است. به هر الگوریتم، یک نام اختصاری داده شده که برای خلاصهسازی بعدی نتایج مفید است.
1# Compare Algorithms
2import pandas
3import matplotlib.pyplot as plt
4from sklearn import model_selection
5from sklearn.linear_model import LogisticRegression
6from sklearn.tree import DecisionTreeClassifier
7from sklearn.neighbors import KNeighborsClassifier
8from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
9from sklearn.naive_bayes import GaussianNB
10from sklearn.svm import SVC
11# load dataset
12url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
13names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
14dataframe = pandas.read_csv(url, names=names)
15array = dataframe.values
16X = array[:,0:8]
17Y = array[:,8]
18# prepare configuration for cross validation test harness
19seed = 7
20# prepare models
21models = []
22models.append(('LR', LogisticRegression()))
23models.append(('LDA', LinearDiscriminantAnalysis()))
24models.append(('KNN', KNeighborsClassifier()))
25models.append(('CART', DecisionTreeClassifier()))
26models.append(('NB', GaussianNB()))
27models.append(('SVM', SVC()))
28# evaluate each model in turn
29results = []
30names = []
31scoring = 'accuracy'
32for name, model in models:
33 kfold = model_selection.KFold(n_splits=10, random_state=seed)
34 cv_results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
35 results.append(cv_results)
36 names.append(name)
37 msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
38 print(msg)
39# boxplot algorithm comparison
40fig = plt.figure()
41fig.suptitle('Algorithm Comparison')
42ax = fig.add_subplot(111)
43plt.boxplot(results)
44ax.set_xticklabels(names)
45plt.show()
با اجرای مثال بالا، لیستی از نام کوتاه الگوریتم به همراه میانگین صحت و صحت انحراف معیار ارائه شده است.
LR: 0.769515 (0.048411) LDA: 0.773462 (0.051592) KNN: 0.726555 (0.061821) CART: 0.695232 (0.062517) NB: 0.755178 (0.042766) SVM: 0.651025 (0.072141)
در عین حال، قطعه کد بالا یک نمودار جعبهای نیز فراهم میکند که توزیع صحت امتیازها برای هر لایه اعتبارسنجی برای هر الگوریتم را نمایش میدهد.
با توجه به نتایج و نمودار ارائه شده در بالا، الگوریتم رگرسیون لجستیک و آنالایز تشخیص خطی نسبت به سایر الگوریتمها خروجی بهتری داشتهاند.
خلاصه
در این مطلب، چگونگی ارزیابی الگوریتمهای یادگیری ماشین گوناگون روی یک مجموعه داده با استفاده از کتابخانه سایکیت لرن بیان شده است. همچنین، چگونگی استفاده از چارچوب تست خودکار مشابه برای ارزیابی الگوریتمها و خلاصهسازی عددی نتایج و ترسیم نمودار جعبهای برای آنها بیان شد. میتوان از الگوی ارائه شده برای ارزیابی این الگوریتمها روی دیگر مسائل نیز استفاده کرد و یا، این الگو را برای دیگر الگوریتمها نیز توسعه داد.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- مجموعه آموزشهای دادهکاوی یا Data Mining در متلب
- مجموعه آموزشهای آمار و احتمالات
- زبان برنامهنویسی پایتون (Python) — از صفر تا صد
- آموزش یادگیری ماشین با مثالهای کاربردی — مجموعه مقالات جامع وبلاگ فرادرس
- روش انتخاب الگوریتم دادهکاوی — راهنمای کاربردی
^^
سلام. تشکر از مطالب خوبتون
مفهوم بذر (seed) را متوجه نشدم.دقیقا چه کاربردی دارد؟ و اینکه چرا بذر میگویند؟
با سلام؛
از همراهی شما با مجله فرادرس سپاسگزاریم. برای تولید اعداد تصادفی، راهکارهای خاصی وجود دارد. یکی از متداولترین روشها آن است که به یک تابع تولید کننده عدد تصادفی، یک عدد اولیه داده شود که بر اساس آن به تولید اعداد تصادفی بپردازد. این عدد اولیه را دانه، بذر یا Seed میگویند. زیرا که تولید سایر اعداد تصادفی بر اساس آن انجام میشود. برای مطالعه بیشتر پیرامون تولید اعداد تصادفی، مطالعه مطالب زیر پیشنهاد میشود.
اعداد تصادفی (Random Numbers) — تاریخچه و کاربردها
تولید اعداد تصادفی در پایتون — به زبان ساده (+ دانلود فیلم آموزش گام به گام)
عدد تصادفی در اکسل — راهنمای کاربردی
پیروز، شاد و تندرست باشید.