機器學習之KNN K近鄰演算法(二 演算法案例)

2021-10-07 18:58:34 字數 3501 閱讀 9996

目錄

一、knn的簡單實現案例

二、sklearn的knn應用:鳶尾花資料分類

三、sklearn中knn的重要引數

假設我們有兩類樣本:a和b,均為二維資料,a類包括:(2,8)(2.5,10)(2,9),b類包括:(4,2)(4,1)(4.5,3),測試樣本點為(3,9)。首先匯入資料,資料分布如下圖: 

import matplotlib.pyplot as plt

import numpy as np

import operator

# 已知分類的資料

x1 = np.array([2,2.5,2])

y1 = np.array([8,10,9])

x2 = np.array([4,4,4.5])

y2 = np.array([2,1,3])

scatter1 = plt.scatter(x1,y1,c='r')

scatter2 = plt.scatter(x2,y2,c='b')

# 未知資料

x = np.array([3])#不要numpy也可以

y = np.array([9])

scatter3 = plt.scatter(x,y,c='g')

#畫圖例

劃分訓練樣本與測試樣本:

# 已知分類的資料

x_data = np.array([[2,8],

[2.5,10],

[2,9],

[4,2],

[4,1],

[4.5,3]])

y_data = np.array(['a','a','a','b','b','b'])

x_test = np.array([3,9])

計算樣本點與每個點的歐式距離:

diffmat = np.tile(x_test, (x_data_size,1)) - x_data #計算每個維度座標的差值

sqare = diffmat**2 #差值的平方

sqdis = sqare.sum(axis=1)#兩維平方相加,最後得到一維資料

distances = sqdis**0.5#開根號得到歐式距離

這裡np.tile()的作用是將x_test複製6遍並組成乙個新的矩陣,每一行均為x_test。

對距離進行排序按多數表決法決定最終輸出:

sorteddistances = distances.argsort()

classcount = {}

# 設定k

k = 5

for i in range(k):

# 獲取標籤

votelabel = y_data[sorteddistances[i]]

# 統計標籤數量

classcount[votelabel] = classcount.get(votelabel,0) + 1

sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1), reverse=true)

#按類別的個數進行排序

knnclass = sortedclasscount[0][0]

print('(3,9)屬於的類別是:',knnclass)

匯入包並匯入sklearn自帶的irsi資料集: 

# 匯入演算法包以及資料集

import numpy as np

from sklearn import neighbors

from sklearn import datasets

from sklearn.model_selection import train_test_split

from sklearn.metrics import classification_report

import random

iris = datasets.load_iris()#匯入iris資料集

打亂資料集,切分訓練集和測試集,匯入模型並訓練,最後列印模型評價:

# 打亂資料切分資料集

# x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target, test_size=0.2) #分割資料0.2為測試資料,0.8為訓練資料

#打亂資料

data_size = iris.data.shape[0]

index = [i for i in range(data_size)]

random.shuffle(index)

iris.data = iris.data[index]

iris.target = iris.target[index]

#切分資料集

test_size = 40

x_train = iris.data[test_size:]

x_test = iris.data[:test_size]

y_train = iris.target[test_size:]

y_test = iris.target[:test_size]

# 構建模型

model = neighbors.kneighborsclassifier(n_neighbors=3,weights='uniform')

model.fit(x_train, y_train)

prediction = model.predict(x_test)

print(classification_report(y_test, prediction))

n_neighbors:k值,預設為5。weights:分為uniform和distance,預設為uniform,即所有點的權重一樣。distance認為更近的點影響更大,所以會為近的點分配較大的權值,較遠的點分配較小的權值。algorithm:距離的搜尋方式,預設為auto,還包括『ball_tree』, 『kd_tree』, 『brute』, 『ball_tree』, 『kd_tree』,為構建相應的樹進行距離的搜尋,brute為暴力線性搜尋。knn分類演算法的引數與函式

機器學習之KNN(K近鄰演算法)

knn k nearest neighbor 演算法利用的數學思想極少 思想 對於乙個新來的點,根據判斷k個最近的點,來判斷新來的點的類別。過程 1 先計算新來的點與樣本中每乙個點的距離 尤拉距離 2 找到最近的k個點 可以用np.argsort 3 找到k個點中類別最多的點的類 所以k鄰近演算法可...

機器學習之KNN k最近鄰演算法 機器學習

knn演算法是機器學習中入門級演算法,屬於監督性學習演算法。supervisedlearning.通過plinko遊戲來介紹該演算法。就是隨機在上面投球,然後球進下面的哪個地方就得多少分。然後在規定得投次數得到最高得分數,應該怎麼投?然後 每次投能得到多少分?首先應該通過訓練資料集,看看在每個位置投...

機器學習筆記 1 KNN K 近鄰演算法

k近鄰法 k nearest neighbor.k nis 是一種基本分類與回歸方法,k值的選擇 距離度量及分類決策規則 多數表決 是k近鄰法的三個基本要素。工作原理 將沒有標籤的新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後提取樣本集中特徵最相似資料 最近鄰 的分類標籤。1.假設有乙個帶有...