簡體   English   中英

繪制決策邊界python(充分了解輪廓線matplotlib函數的工作原理)

[英]Plotting a decision boundary python ( give a good idea of how contourf matplotlib function works )

大多數情況下,可以將其視為另一個線程的副本,但這只是為了進行細粒度的解釋而已。

在機器學習算法中(讓我們考慮一個感知器),我擁有一組數據點,這些數據點跨越2個特征。 因此,輸入要素的形式為

## Assume classifier has already been trained for simplicity
X = [[a1,b1] , [a2,b2] , .... , [an,bn]]

x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
                   np.arange(x2_min, x2_max, resolution))

Z = classifier.net_input(np.array([xx1.ravel(), xx2.ravel()]).T)

### Here Z is set of prediction which has values +1 or -1 , for the data points in X
Z = Z.reshape(xx1.shape).

# plot class samples

for idx, cl in enumerate(np.unique(y)):
     plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],
            alpha=0.8, c=cmap(idx),
            marker=markers[idx], label=cl)
plt.show()

截至目前,一切都很好。 我的真正問題是,當我們將數據點xx1xx2以及預測值Z (除了+1和-1一堆)傳遞給數據時,以下函數將如何工作或如何工作。 我不熟悉輪廓。 誰能解釋我們如何通過contourf函數獲得決策邊界?

plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)

在此處輸入圖片說明

這是將兩個類別分開的生成的決策邊界。 有人能解釋什么是內部發生countourf功能或我們得出這一決策邊界與xx1xx2Z (一堆+1和-1)?

xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
                       np.arange(x2_min, x2_max, resolution))

您將創建一個跨越數據范圍並具有給定分辨率的網格。 該網格與實際數據點沒有任何關系,只是一個放置在輸入空間上的網格。

然后,在

Z = classifier.net_input(np.array([xx1.ravel(), xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)

您讓分類器為網格的每個點計算輸出。 這將為網格上的每個點提供+1或-1,並且還可以調整輸出數組的形狀以使其與網格的形狀匹配。

最后,是contourf函數。 是其文檔。 contourf基本上所做的是,它采用由網格指定的3D表面(即一堆XY點以及這些點的Z值)並通過顯示其輪廓來繪制該表面。 輪廓是表面具有相同值的線。 由於Z數組僅包含+ 1s和-1s,因此唯一的實際輪廓位於+ 1s和-1s“之間”的點,即決策邊界。

簡而言之 ,通過對特征空間進行精細采樣並繪制每個樣本的輸出值來提取決策邊界。 當輸出值在整個特征空間中變化時,邊界就會隱式地出現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM