日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

KNN算法 使用KNN对iris数据集分类

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 KNN算法 使用KNN对iris数据集分类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、KNN算法 (K近鄰算法) 簡述

可以簡單粗暴的認為在判斷一個未知事物時,可以觀察離它最近的幾個樣本。

步驟:

尋找樣本數(shù)據(jù)集K個最近的元素

計算K個元素中各種類別的占比

占比最高的類別即為新數(shù)據(jù)的類別

K的取值對結(jié)果有很大的影響

如下圖,中間的圓要被賦予哪個類?是三角形還是正方形?如果K=3,由于三角形所占比例為2/3,圓將被賦予三角形那個類;如果K=7,由于正方形所占比例為4/7,圓將被賦予正方形那個類

計算復(fù)雜度優(yōu)化

  • 計算新數(shù)據(jù)(未知樣本)和K個訓(xùn)練樣本的距離dist;
  • 得到目前K個最鄰近樣本中的最大距離maxdist;
  • 如果第K+1個訓(xùn)練樣本......(剩余的所有訓(xùn)練樣本)的dist小于maxdist,則將該訓(xùn)練樣本作為K-最近鄰樣本(即替換掉上述K個最鄰近樣本中最大距離的那個訓(xùn)練樣本)。

邊界清晰--選取中心點 純度?

數(shù)據(jù)傾斜問題-- 增加權(quán)重

二、使用KNN對iris數(shù)據(jù)集分類

1、導(dǎo)入numpy、Matplotlib、sklearn類庫及其模塊

import numpy as np # Puplot 提供了一套和MATLAB類似的繪圖API,使得Matplotlib的機制更像MATLAB。 # 我們只需要調(diào)用Pyplot模塊所提供的函數(shù)就可以快速繪圖并設(shè)置圖表的各個細節(jié) import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn.neighbors import KNeighborsClassifier # 導(dǎo)入sklearn類庫及KNN模型 from sklearn.datasets import load_iris

?2、加載鳶尾花數(shù)據(jù)集

# 加載鳶尾花數(shù)據(jù)集,并分割成樣本特征X和樣本標簽Y iris = load_iris() X = iris.data[:,:2] # print(X) # print(X[:,0]) Y = iris.target

3、設(shè)置繪圖背景色和散點顏色映射表

# 繪制背景顏色和散點顏色映射表 cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF']) cmap_bold = ListedColormap(['#FF0000','#00FF00','#0000FF'])

4、 構(gòu)建KNN模型

clf = KNeighborsClassifier(n_neighbors= 10,weights='uniform')

5、?調(diào)用模型的fit函數(shù)進行訓(xùn)練

clf.fit(X,Y)

6、畫出決策邊界

# 畫出決策邊界 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.02),np.arange(y_min,y_max,0.02))Z = clf.predict(np.c_[xx.ravel(),yy.ravel()]).reshape(xx.shape)plt.figure() plt.pcolormesh(xx,yy,Z,cmap=cmap_light)

?7、繪制預(yù)測結(jié)果圖

# 繪制預(yù)測結(jié)果圖 plt.scatter(X[:,0],X[:,1],c = Y,cmap=cmap_bold) plt.xlim(xx.min(),xx.max()) # xlim:當前圖形X軸的范圍 plt.ylim(yy.min(),yy.max()) plt.title('3_Class(k=10,weights=uniform)') plt.show

?8、結(jié)果展示

部分解釋

1、numpy.meshgrid()

(參考https://www.cnblogs.com/black-mamba/p/9186965.html)

x = np.array([0, 0.5, 1]) print('x: ',x) print('--------------') y = np.array([0,1]) xv,yv = np.meshgrid(x, y) # numpy.meshgrid(x軸上的坐標向量, y軸上的坐標向量) print('xv: \n',xv) print('--------------') print('y: ',y) print('--------------') print('yv: \n',yv) print("xv的維度:{},shape:{}".format(xv.ndim, xv.shape)) print("yv的維度:{},shape:{}".format(yv.ndim, yv.shape))plt.plot(xv, yv, 'o--') plt.grid(True) plt.show()

?

# 此處為了好觀看結(jié)果,將步長設(shè)置為1 print((np.arange(x_min,x_max,1)))

?

print((np.arange(y_min,y_max,1)))

?

?

2、numpy.c_?

# numpy.c_ 將一維數(shù)組作為列堆疊到二維數(shù)組中。 arr = np.c_[np.array([1,2,3]), np.array([4,5,6])] print(arr)

?

3、ravel()

ravel()方法將數(shù)組維度拉成一維數(shù)組

print((np.c_[xx.ravel(),yy.ravel()]))

代碼:

import numpy as np # Puplot 提供了一套和MATLAB類似的繪圖API,使得Matplotlib的機制更像MATLAB。 # 我們只需要調(diào)用Pyplot模塊所提供的函數(shù)就可以快速繪圖并設(shè)置圖表的各個細節(jié) import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn.neighbors import KNeighborsClassifier # 導(dǎo)入sklearn類庫及KNN模型 from sklearn.datasets import load_iris# 加載鳶尾花數(shù)據(jù)集,并分割成樣本特征X和樣本標簽Y iris = load_iris() X = iris.data[:,:2] # print(X) # print(X[:,0]) Y = iris.target# 繪制背景顏色和散點顏色映射表 cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF']) cmap_bold = ListedColormap(['#FF0000','#00FF00','#0000FF'])clf = KNeighborsClassifier(n_neighbors= 10,weights='uniform') clf.fit(X,Y)# 畫出決策邊界 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.02),np.arange(y_min,y_max,0.02))Z = clf.predict(np.c_[xx.ravel(),yy.ravel()]).reshape(xx.shape)plt.figure() plt.pcolormesh(xx,yy,Z,cmap=cmap_light) # 這兩部分代碼一塊執(zhí)行# 繪制預(yù)測結(jié)果圖 plt.scatter(X[:,0],X[:,1],c = Y,cmap=cmap_bold) plt.xlim(xx.min(),xx.max()) # xlim:當前圖形X軸的范圍 plt.ylim(yy.min(),yy.max()) plt.title('3_Class(k=10,weights=uniform)') plt.show

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的KNN算法 使用KNN对iris数据集分类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。