日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

可以簡單粗暴的認(rèn)為在判斷一個(gè)未知事物時(shí),可以觀察離它最近的幾個(gè)樣本。

步驟:

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

計(jì)算K個(gè)元素中各種類別的占比

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

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

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

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

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

邊界清晰--選取中心點(diǎn) 純度?

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

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

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

import numpy as np # Puplot 提供了一套和MATLAB類似的繪圖API,使得Matplotlib的機(jī)制更像MATLAB。 # 我們只需要調(diào)用Pyplot模塊所提供的函數(shù)就可以快速繪圖并設(shè)置圖表的各個(gè)細(xì)節(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和樣本標(biāo)簽Y iris = load_iris() X = iris.data[:,:2] # print(X) # print(X[:,0]) Y = iris.target

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

# 繪制背景顏色和散點(diǎn)顏色映射表 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ù)進(jìn)行訓(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ù)測(cè)結(jié)果圖

# 繪制預(yù)測(cè)結(jié)果圖 plt.scatter(X[:,0],X[:,1],c = Y,cmap=cmap_bold) plt.xlim(xx.min(),xx.max()) # xlim:當(dāng)前圖形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軸上的坐標(biāo)向量, y軸上的坐標(biāo)向量) 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的機(jī)制更像MATLAB。 # 我們只需要調(diào)用Pyplot模塊所提供的函數(shù)就可以快速繪圖并設(shè)置圖表的各個(gè)細(xì)節(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和樣本標(biāo)簽Y iris = load_iris() X = iris.data[:,:2] # print(X) # print(X[:,0]) Y = iris.target# 繪制背景顏色和散點(diǎn)顏色映射表 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ù)測(cè)結(jié)果圖 plt.scatter(X[:,0],X[:,1],c = Y,cmap=cmap_bold) plt.xlim(xx.min(),xx.max()) # xlim:當(dāng)前圖形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)容還不錯(cuò),歡迎將生活随笔推薦給好友。