ترکیب دسته بند ها با رای اکثریت وزن دار - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

ترکیب دسته بند ها با رای اکثریت وزن دار

+1 امتیاز

سلام ببخشید من یه بردار از نتایح 24 دسته بند پایه دارم . چطوری با روش رای اکثریت وزن دار این هارو ترکیب کنم تا بهترین نتیجه به من بده ؟ من این کارو طیق این مقاله بایست انجام بدم فرمول دوم رای اکثریت وزن دار هست ولی متوجه نمیشم .کسی میتونه توضیح بده من باید چظور ترکیب ککنم؟؟ تشکر

سوال شده آبان 28, 1396  بوسیله ی seddimah (امتیاز 45)   6 12 15

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

در واقع به Ensemble کردن کلاسیفایر اشاره داره .

رای اکثریت :

فرض کنید شما 3 تا کلاسیفایر دارید و top1 را برای هر 3 کلاسیفایر محاسبه می کنید و سپس مد یا همان اکثریت را بر روی خروجی کلاسیفایر ها محاسبه می کنید.

فرض کنید مثال ما به صورت زیر باشه:

classifier 1 -> class 1
classifier 2 -> class 1
classifier 3 -> class 2

رای اکثریت در مثال بالا class1 را انتخاب می کنه به این روش hard voting هم گفته میشه.

یه مثال ساده هم روی دیتاست iris به شکل زیر میشه:

>>> from sklearn import datasets
>>> from sklearn.model_selection import cross_val_score
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.naive_bayes import GaussianNB
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.ensemble import VotingClassifier

>>> iris = datasets.load_iris()
>>> X, y = iris.data[:, 1:3], iris.target

>>> clf1 = LogisticRegression(random_state=1)
>>> clf2 = RandomForestClassifier(random_state=1)
>>> clf3 = GaussianNB()

>>> eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='hard')

>>> for clf, label in zip([clf1, clf2, clf3, eclf], ['Logistic Regression', 'Random Forest', 'naive Bayes', 'Ensemble']):
...     scores = cross_val_score(clf, X, y, cv=5, scoring='accuracy')
...     print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label))
Accuracy: 0.90 (+/- 0.05) [Logistic Regression]
Accuracy: 0.93 (+/- 0.05) [Random Forest]
Accuracy: 0.91 (+/- 0.04) [naive Bayes]
Accuracy: 0.95 (+/- 0.05) [Ensemble]

 

رای اکثریت وزن دار :

در مقابل روش بالا که بهش hard voting اطلاق میشه روش soft voting وجود داره که در این روش به جای استفاده از top1 میان از top n استفاده می کنند. در این روش هر کلاسیفایر علاوه بر شناسه کلاس یک توزیع احتمال هم برای آن کلاس ارائه میده .علاوه بر این هر کلاسیفایر در این روش وزن داره .(بر خلاف روش قبلی که وزن همه کلاسیفایر یکسان بود)که در این روش وزن هر کلاسیفایر را در توزیع احتمال کلاس  موردنظر در کلاسیفایر مربوطه ضرب می کنیم و میانگین را به صورت زیر محاسبه می کنیم.

 

classifier class 1 class 2 class 3
classifier 1 w1 * 0.2 w1 * 0.5 w1 * 0.3
classifier 2 w2 * 0.6 w2 * 0.3 w2 * 0.1
classifier 3 w3 * 0.3 w3 * 0.4 w3 * 0.3
weighted average 0.37 0.4 0.23

 

یه مثال دیگر از این روش در ski learn :

>>> from sklearn import datasets
>>> from sklearn.tree import DecisionTreeClassifier
>>> from sklearn.neighbors import KNeighborsClassifier
>>> from sklearn.svm import SVC
>>> from itertools import product
>>> from sklearn.ensemble import VotingClassifier

>>> # Loading some example data
>>> iris = datasets.load_iris()
>>> X = iris.data[:, [0,2]]
>>> y = iris.target

>>> # Training classifiers
>>> clf1 = DecisionTreeClassifier(max_depth=4)
>>> clf2 = KNeighborsClassifier(n_neighbors=7)
>>> clf3 = SVC(kernel='rbf', probability=True)
>>> eclf = VotingClassifier(estimators=[('dt', clf1), ('knn', clf2), ('svc', clf3)], voting='soft', weights=[2,1,2])

>>> clf1 = clf1.fit(X,y)
>>> clf2 = clf2.fit(X,y)
>>> clf3 = clf3.fit(X,y)
>>> eclf = eclf.fit(X,y)

 

پاسخ داده شده آبان 28, 1396 بوسیله ی عباس مولایی (امتیاز 2,754)   1 5 13
انتخاب شد خرداد 25, 1399 بوسیله ی farnoosh
بابت جوابتون سپاس گزارم. اما فکر کنم منظور این تصویر که گذاشتم یه خورده فرق میکنه.
من خودم این کارو کردم دقت هر دسته بند پایه رو جدا به دست آوردم و بعد از طبقه بندی مقادیر دقت رو در نتایج ضرب کردم و در آخر میانگین وزن دار گرفتم. جواباش یه خورده شبیه هست ولی هنوز دقتشو حساب نکردم. نظر شما چیه کاری که کردم درسته؟؟
ممنون
نه فکر نکنم فرقی داشته باشه.لطفاً مثال خودتون را به صورت عددی قرار بدید و مورد تفاوت را مشخص کنید.
...