K近鄰的決策邊界以及K的影響


決策邊界:例子引出

比如我的決策是:當華為Mate降價到2000元的時候購買一個。對於這個問題,我的決策邊界是2000元,也就是大於2000元的時候我不會購買,但小於2000元時我會選擇購買。類似的生活中的例子很多。

決策邊界分成兩大類,分別是線性決策邊界和非線性決策邊界。擁有線性決策邊界的模型我們稱為線性模型,反之非線性模型。

模型的泛化能力:可以簡單理解成“它在新的環境中的適應能力”,當然這個環境需要跟已有的環境類似才行。

上手實踐讓你理解的更快

1.導入模塊

import matplotlib.pyplot as plt 
import numpy as np
# product,這主要是用在可視化模塊。
from itertools import product
from sklearn.neighbors import KNeighborsClassifier

 

2.生成數據樣本

# 在這里我們隨機生成了樣本。np.random.multivariate_normal是從多元正態分布中隨機抽取樣本的函數
# 其中一半的數據來源於第一個高斯分布,另一半的數據來自於第二個高斯分布。
n_points=100
X1=np.random.multivariate_normal([1,50],[[1,0],[0,10]],n_points)
X2=np.random.multivariate_normal([2,50],[[1,0],[0,10]],n_points)
# print(X1)
# print(X2)
X=np.concatenate([X1,X2])
y=np.array([0]*n_points+[1]*n_points)
print(X.shape,y.shape)

 

3.訓練不同的KNN模型來進行K值評估

# 訓練了9個不同的KNN模型。
# KNN模型的訓練過程
clfs=[]
neighbors=[1,3,5,9,11,13,15,17,19]
for i in range(len(neighbors)):
    clfs.append(KNeighborsClassifier(n_neighbors=neighbors[i]).fit(X,y))
# print(clfs)

 

4.可視化過程:

# 可視化結果
x_min,x_max=X[:,0].min()-1,X[:,0].max()+1
y_min,y_max=X[:,1].min()-1,X[:,1].max()+1
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.1),
                    np.arange(y_min,y_max,0.1))
# print(xx)
f,axarr = plt.subplots(3,3,sharex='col',sharey='row',figsize=(15,12))
for idx,clf, tt in zip(product([0,1,2],[0,1,2]),
                       clfs,
                       ['KNN(k=%d)'%k for k in neighbors]):
                  Z = clf.predict(np.c_[xx.ravel(),yy.ravel()])
                  Z = Z.reshape(xx.shape)
                  
                  axarr[idx[0],idx[1]].contourf(xx,yy,Z,alpha = 0.4)
                  axarr[idx[0],idx[1]].scatter(X[:,0],X[:,1],c = y,
                                            s = 20,edgecolor = 'k')
                  axarr[idx[0],idx[1]].set_title(tt)
plt.show()

 

結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM