راهنمای مبتدیان برای یادگیری ماشین

منتشر شده در analyticsvidhya به تاریخ ۶ آگوست ۲۰۲۱لینک منبع A Beginners Guide to Machine Learning: Binary Classification of legendary Pokemon using multiple ML algorithmsمقدمهیادگیری ماشینی به طور گسترده‌ای در مسائل مختلف در سناریوهای دنیای واقعی مورد استفاده قرار می‌گیرد. یکی از مشکلات عمده شامل طبقه‌بندی است. طبقه‌بندی می‌تواند طبقه‌بندی دو به دو یا چند طبقه باشد. در این مقاله ما به طبقه‌بندی دودویی می‌پردازیم. ما در ابتدا طبقه‌بندی دودویی را درک خواهیم کرد و سپس الگوریتم‌هایML مختلف را به کار خواهیم گرفت تا ببینیم که چگونه با دقت می‌توانیم هدف را طبقه‌بندی کنیم.برای این برنامه آموزشی، من از مجموعه داده‌های پوکمان استفاده خواهم کرد. در اینجا ما آمار تمام پوکمان را داریم و سعی می‌کنیم به دقت طبقه‌بندی کنیم اگر پوکمان افسانه‌ای باشد یا نباشد. اگر نمی‌دانید، پوکمان افسانه‌ای آن‌هایی هستند که بسیار نادر و قدرتمند هستند. ما دوست داریم ببینیم آیا این ویژگی‌ها، آمار به ما کمک می‌کند تا آن‌ها را طبقه‌بندی کنیم.طبقه‌بندی چیست؟در دنیای یادگیری ماشینی، طبقه‌بندی به جداسازی داده‌ها برای جداسازی برچسب‌های کلاس اشاره دارد. برای یک ردیف خاص در مجموعه داده یا مقادیر ویژگی‌ها، ما علاقه‌مند به مرتبط کردن آن‌ها با یک مقدار هدف خاص هستیم. این به طور گسترده در بسیاری از کاربردها استفاده می‌شود مثلا این که آیا پست اسپم دارید یا نه. آیا تصویر جعلی است یا نه. اگر بیش از دو برچسب کلاس وجود داشته باشد ما آن‌ها را طبقه‌بندی چند کلاسی می‌نامیم.در مورد ما، ما تنها با دو کلاس افسانه‌ای یا غیرافسانه‌ای پوکمان سر و کار داریم. بنابراین ما یک مسئله طبقه‌بندی دودویی داریم. سوال این است که ما واقعا چگونه دقت را اندازه‌گیری می‌کنیم. ما در اینجا یک ماتریس درهم ریختگی توسط رابرت آلترمن داریم، که به ما کمک می‌کند تا تشخیص دهیم آیا طبقه‌بندی ما درست یا غلط است. این تصویر در اینجا یکی از بهترین راه‌ها برای تجسم ماتریس درهم ریختگی پوکمان افسانه‌ای است.در اولین قطر ماتریس در هم ریختگی ما، می‌توانیم مقادیری را بیابیم که کاملا پیش‌بینی شده‌اند. اضافه کردن آن‌ها و تقسیم کردن آن‌ها با تمام مقادیر درون ماتریس، دقت پیش‌بینی را به ما می‌دهد.حال بیایید به عمق الگوریتم‌های مختلف یادگیری ماشینی برویم. هدف من در این برنامه آموزشی نشان دادن کدگذاری هر الگوریتم است. پیش‌پردازش و رمزگذاری کامل با تمام کدها در این لینکCOlab در دسترس است.دیتاست ما:مجموعه داده در اینجا در دسترس است.برای مساله طبقه‌بندی، ما از این مجموعه داده استفاده کرده‌ایم که یک ستون افسانه‌ای دارد که به ما می‌گوید آیا پوکمان افسانه‌ای است یا نه با صحیح یا اشتباه. ما از کدگذاری برچسب استفاده کرده و آن‌ها را به صورت صحیح به صورت ۱ و غلط به صورت ۰ قبل از ورود به مراحل بعدی کدگذاری می‌کنیم. ستون‌های #، نام، نوع ۱، و نوع ۲ مورد نیاز نیستند و به عنوان بخشی از مرحله پیش‌پردازش از مجموعه داده‌ها حذف می‌شوند. مجموعه داده نهایی مورد استفاده برای الگوریتم‌های ML به این شکل است:در اینجا می‌توانیم ببینیم که ۸ ستون به عنوان ویژگی استفاده می‌شوند و ستون آخر افسانه‌ای ما است که به عنوان متغیر هدف برای پیش‌بینی است.تجزیه و تحلیل داده‌های اکتشافی:· ۱. توزیع انواع مختلف پوکمان چیست؟همانطور که در اینجا می‌بینیم واتر پوکمان در مقایسه با بقیه بسیار رایج است. راک و الکتریک پوکمان کم‌تر یافت می‌شوند.· ۲. هر ویژگی پوکمان چقدر هم‌بسته است؟از نقشه هدایت می توان دید که همبستگی زیادی بین ویژگی‌های پوکمان وجود ندارد. بالاترین چیزی که می‌توانیم ببینیم همبستگی بین حمله ویژه و کل است.· ۳. حمله در مقابل دفاع برای فایر پوکمان در هر نسل:نسل ۵ تمایل دارد که دفاع کمتری داشته باشد. یکی از پوکمان‌های نسل 5 بهترین مهاجم است.الگوریتم‌های یادگیری ماشینی:رگرسیون منطقی:رگرسیون منطقی به طور گسترده برای طبقه‌بندی دودویی استفاده می‌شود. از تابع لوجیت برای نتیجه استفاده می‌کند. یک احتمال در خروجی تولید می‌شود و با استفاده از تابع فعالسازی سیگموئید به ۰ یا ۱ طبقه‌بندی می‌شود. تابع سیگموئید به صورت زیر است:Y = 1 / 1+e -zfrom sklearn.metrics import accuracy_scorefrom sklearn.linear_model import LogisticRegressionlr = LogisticRegression()lr.fit(X_train,Y_train)Y_pred_lr = lr.predict(X_test)score_lr = round(accuracy_score(Y_pred_lr,Y_test)*100,2)print("The accuracy score we have achieved using Logistic Regression is: "+str(score_lr)+" %")امتیاز دقت به‌دست‌آمده با استفاده از رگرسیون منطقی برابر است با: ۹۳.۱۲٪بیز ساده گاوسی:الگوریتم ساده بیز یک الگوریتم احتمالی است که از قضیه بیز استفاده می‌کند. ما می‌توانیم آن را به شکل زیر ارائه دهیم:from sklearn.naive_bayes import GaussianNBnb = GaussianNB()nb.fit(X_train,Y_train)Y_pred_nb = nb.predict(X_test)score_nb = round(accuracy_score(Y_pred_nb,Y_test)*100,2)print(&quotThe accuracy score we have achieved using Naive Bayes is: &quot+str(score_nb)+&quot %&quot)اگرA درست باشد، احتمال A برابر است با احتمال B، اگر A درست باشد، ضرب در احتمالA درست است، تقسیم بر احتمال B درست است.امتیاز دقت به‌دست‌آمده با استفاده از بایز نایو برابر است با: ۹۱.۸۸٪ماشین‌های بردار پشتیبان:SVM الگوریتم‌هایML نظارت شده هستند که برای حل مشکلات طبقه‌بندی استفاده می‌شوند. ما یک ابر صفحه ترسیم می‌کنیم که سعی دارد دو کلاس مختلف را در اینجا از هم جدا کند. داده‌های پیچیده‌تر، ما می‌توانیم نتایج بهتری را با استفاده از الگوریتم SVM تولید کنیم. این الگوریتم می‌تواند مجموعه داده‌های بزرگ را آموزش دهد اما طبیعت آن کندتر است.from sklearn import svmsv = svm.SVC(kernel='linear')sv.fit(X_train, Y_train)Y_pred_svm = sv.predict(X_test)score_svm = round(accuracy_score(Y_pred_svm,Y_test)*100,2)print(&quotThe accuracy score we have achieved using Linear SVM is: &quot+str(score_svm)+&quot %&quot)امتیاز دقت به‌دست‌آمده با استفاده از SVM خطی برابر است با: ۹۴.۳۸٪همسایه‌های K-Nearest:الگوریتمK- NN یک الگوریتم طبقه‌بندی نزدیک‌ترین همسایه است. سعی می‌کند نزدیک‌ترین نقاط را به یک همسایه اختصاص دهد. رای‌گیری در KNN اتفاق می‌افتد و همسایه نزدیک به نقاط برنده می‌شود. K در اینجا تعداد همسایه‌های موجود در مدل ما را نشان می‌دهد.from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=7)knn.fit(X_train,Y_train)Y_pred_knn=knn.predict(X_test)score_knn = round(accuracy_score(Y_pred_knn,Y_test)*100,2)print(&quotThe accuracy score we have achieved using KNN is: &quot+str(score_knn)+&quot %&quot)امتیاز دقت به‌دست‌آمده با استفاده از KNN برابر است با: ۹۶.۲۵٪درخت تصمیم:درخت‌های تصمیم‌گیری شبیه به یک سیستم پاسخ به سوال هستند، که در آن تصمیم می‌گیرد کدام کودک باید نقاط را براساس یک شرایط خاص قرار دهد. اساسا، آن به عنوان یک نمودار جریان عمل می‌کند، نقاط داده را در یک زمان به دو دسته تقسیم می‌کند، از «تنه» تا «شاخه‌ها»، و سپس «برگ‌ها»، که در آن داده‌ها در هر دسته براساس شباهت تقسیم می‌شوند.from sklearn.tree import DecisionTreeClassifiermax_accuracy = 0for x in range(200):dt = DecisionTreeClassifier(random_state=x)dt.fit(X_train,Y_train)Y_pred_dt = dt.predict(X_test)current_accuracy = round(accuracy_score(Y_pred_dt,Y_test)*100,2)if(current_accuracy>max_accuracy):max_accuracy = current_accuracybest_x = x#print(max_accuracy)#print(best_x)dt = DecisionTreeClassifier(random_state=best_x)dt.fit(X_train,Y_train)Y_pred_dt = dt.predict(X_test)score_dt = round(accuracy_score(Y_pred_dt,Y_test)*100,2)print(&quotThe accuracy score we have achieved using Decision Tree is: &quot+str(score_dt)+&quot %&quot)امتیاز دقت به‌دست‌آمده با استفاده از درخت تصمیم ۹۶.۲۵٪ است.جنگل تصادفی:جنگل تصادفی گسترش درخت تصمیم‌گیری است و عمدتا نقص درخت تصمیم را در مورد اجبار غیر ضروری نقاط داده به یک دسته تا حدی نادرست برطرف می‌کند.این روش در ابتدا با ایجاد درخت‌های تصمیم‌گیری با آموزش داده در دسترس کار می‌کند، سپس داده‌های نادیده را در یکی از درختان به عنوان یک «جنگل تصادفی» قرار می‌دهد. این روش از داده‌های ما برای اتصال آن به نزدیک‌ترین درخت بر روی داده‌های مقیاس بندی شده میانگین می‌گیرد.from sklearn.ensemble import RandomForestClassifiermax_accuracy = 0for x in range(2000):rf = RandomForestClassifier(random_state=x)rf.fit(X_train,Y_train)Y_pred_rf = rf.predict(X_test)current_accuracy = round(accuracy_score(Y_pred_rf,Y_test)*100,2)if(current_accuracy>max_accuracy):max_accuracy = current_accuracybest_x = x#print(max_accuracy)#print(best_x)rf = RandomForestClassifier(random_state=best_x)rf.fit(X_train,Y_train)Y_pred_rf = rf.predict(X_test)score_rf = round(accuracy_score(Y_pred_rf,Y_test)*100,2)print(&quotThe accuracy score we have achieved using Decision Tree is: &quot+str(score_rf)+&quot %&quot)امتیاز دقت به‌دست‌آمده با استفاده از درخت تصمیم برابر است با: ۹۸.۱۲٪الگوریتم XG-Boost:الگوریتمXGBoost عمدتا پیاده‌سازی درخت‌های تصمیم‌گیری تقویت‌شده گرادیان است که برای افزایش سرعت عملکرد در طبقه‌بندی مورد استفاده قرار می‌گیرند.import xgboost as xgbxgb_model = xgb.XGBClassifier(objective=&quotbinary:logistic&quot, random_state=42)xgb_model.fit(X_train, Y_train)Y_pred_xgb = xgb_model.predict(X_test)score_xgb = round(accuracy_score(Y_pred_xgb,Y_test)*100,2)print(&quotThe accuracy score we have achieved using XGBoost is: &quot+str(score_xgb)+&quot %&quot)امتیاز دقت به‌دست‌آمده با استفاده از XGBoost برابر است با: ۹۶.۸۸٪شبکه عصبی:شبکه‌های عصبی شبکه‌هایی هستند که از مغز انسان تقلید می‌کنند. در اینجا ما یک شبکه عصبی با ۳۲ لایه مخفی ساختیم. از آنجا که ما ۸ ویژگی داریم به عنوان ابعاد ورودی در نظر می‌گیریم. در لایه آخر، ما از سیگموئید استفاده می‌کنیم چون یک مساله طبقه‌بندی دودویی است. در این میان، ما از ReLU به عنوان تابع فعالسازی استفاده می‌کنیم.from keras.models import Sequentialfrom keras.layers import Denseimport tensorflow as tfmodel = Sequential()model.add(Dense(32,activation='relu',input_dim=8))model.add(Dense(1,activation='sigmoid'))model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])model.fit(X_train,Y_train,epochs=100, callbacks = tf.keras.callbacks.EarlyStopping(monitor='loss', patience=3))Y_pred_nn = model.predict(X_test)rounded = [round(x[0]) for x in Y_pred_nn]Y_pred_nn = roundedscore_nn = round(accuracy_score(Y_pred_nn,Y_test)*100,2)print(&quotThe accuracy score we have achieved using Neural Network is: &quot+str(score_nn)+&quot %&quot)امتیاز دقت بدست‌آمده با استفاده از شبکه عصبی برابر است با: ۹۰.۶۲٪نتایج:پس از اجرای ویژگی‌های پوکمان بر روی الگوریتم‌های ML مختلف ما می‌توانیم دریابیم که الگوریتم XG-boost در مورد ما با دقت ۹۶.۸۸٪ و به دنبال آن جنگل تصادفی با ۹۶.۱۲٪ به خوبی کار می‌کند. شبکه‌های عصبی برای این مشکل فعلی چندان خوب نیستند. اما ممکن است با بازی با لایه‌های پنهان مختلف یا رفتن به برخی مدل‌های پیچیده، نتایج بهتری به دست آوریم.این متن با استفاده از ربات ترجمه مقالات علم داده ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.