這裏記錄一下繪製分類邊界的方法。記錄一下meshgrid,pcolormesh的使用方法
import numpy as np
# 抓取數據
iris = datasets.load_iris()
x = iris.data[:, 1:3]
y = iris.target[:]
k = 15 # 設置KNN k=15,計算周圍臨近的15個點
# 圖片,x,y每一步的步長
h = 0.02
# 顏色分類
cmap_light = ListedColormap(["#FFAAAA", "#AAFFAA", "#AAAAFF"])
cmap_bold = ListedColormap(["#FF0000", "#00FF00", "#0000FF"])
model = KNeighborsClassifier(n_neighbors=15) # 設置訪問周圍15個點
model.fit(x, y) # 自適應, 訓練數據
# 四個數描述圖片顯示範圍
xmin, xmax = x[:, 0].min() , x[:, 0].max()
ymin, ymax = x[:, 1].min() , x[:, 1].max()
# 生成網格
xx, yy = np.meshgrid(np.arange(xmin, xmax, h),np.arange(ymin, ymax, h))
# 預測
# np.c_是按照列合併,列數相等,np.r_按照行合併,行數相等
z = model.predict(np.c_[xx.ravel(), yy.ravel()])
z = z.reshape(xx.shape)
# 顯示背景顏色
plt.pcolormesh(xx, yy, z, cmap=cmap_light)
# 顯示點
plt.scatter(x[:,0], x[:,1], c=y, cmap=cmap_bold)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title(u"分類")
plt.show()
對於代碼中的np.c_,其並不是一個方法,更像是一個數組元素的訪問方式,因爲其使用[],而不是()。
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
print(a)
print(np.c_[a, b])
這裏可以看到,反悔了一個新數組,並且將兩個數組中的元素通過列合併。
同上,np.r_則在行上合併,
這裏從兩行數據,變成了四行數據。
總結:
np.r_是按行連接兩個矩陣,就是把兩矩陣上下相加,要求列數相等=>因爲是在行合併,所以列數相等
這裏列數不相等就直接報錯。
np.c_是按列連接兩個矩陣,就是把兩矩陣左右相加,要求行數相等
這裏行數不相等的話就直接報錯。