繪制通過投票分類器計算的類概率?

繪制toy數據集中第一個樣本的類概率,由三個不同的分類器預測,并由VotingClassifier平均。

首先,初始化了三個示例性的分類器 (LogisticRegression, GaussianNB, 和 RandomForestClassifier),并使用它們初始化了一個權重為[1,1,5]的軟投票VotingClassifier,這意味著在計算平均概率時,隨機森林分類器的預測概率的權重是其他分類器的5倍。

為了可視化概率權重,我們在訓練集上對每個分類器進行擬合,并為本示例數據集中的第一個樣本繪制預測的類概率。

print(__doc__)

import numpy as np
import matplotlib.pyplot as plt

from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier

clf1 = LogisticRegression(max_iter=1000, random_state=123)
clf2 = RandomForestClassifier(n_estimators=100, random_state=123)
clf3 = GaussianNB()
X = np.array([[-1.0-1.0], [-1.2-1.4], [-3.4-2.2], [1.11.2]])
y = np.array([1122])

eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)],
                        voting='soft',
                        weights=[115])

# predict class probabilities for all classifiers
probas = [c.fit(X, y).predict_proba(X) for c in (clf1, clf2, clf3, eclf)]

# get class probabilities for the first sample in the dataset
class1_1 = [pr[00for pr in probas]
class2_1 = [pr[01for pr in probas]


# plotting

N = 4  # number of groups
ind = np.arange(N)  # group positions
width = 0.35  # bar width

fig, ax = plt.subplots()

# bars for classifier 1-3
p1 = ax.bar(ind, np.hstack(([class1_1[:-1], [0]])), width,
            color='green', edgecolor='k')
p2 = ax.bar(ind + width, np.hstack(([class2_1[:-1], [0]])), width,
            color='lightgreen', edgecolor='k')

# bars for VotingClassifier
p3 = ax.bar(ind, [000, class1_1[-1]], width,
            color='blue', edgecolor='k')
p4 = ax.bar(ind + width, [000, class2_1[-1]], width,
            color='steelblue', edgecolor='k')

# plot annotations
plt.axvline(2.8, color='k', linestyle='dashed')
ax.set_xticks(ind + width)
ax.set_xticklabels(['LogisticRegression\nweight 1',
                    'GaussianNB\nweight 1',
                    'RandomForestClassifier\nweight 5',
                    'VotingClassifier\n(average probabilities)'],
                   rotation=40,
                   ha='right')
plt.ylim([01])
plt.title('Class probabilities for sample 1 by different classifiers')
plt.legend([p1[0], p2[0]], ['class 1''class 2'], loc='upper left')
plt.tight_layout()
plt.show()

腳本的總運行時間:(0分0.403秒)

Download Python source code: plot_voting_probas.py

Download Jupyter notebook: plot_voting_probas.ipynb