【機(jī)器學(xué)習(xí)】 K-近鄰算法(KNN)基本理論及代碼
大家好,我是機(jī)器俠~
我們知道,鳶尾花分為不同的種類(lèi),但種類(lèi)是如何被劃分的呢?同一種類(lèi)的鳶尾花具有哪些公共特征?某個(gè)類(lèi)型的鳶尾花的某些特征是否更加頻繁?基于此,本章將介紹k-近鄰算法,它十分的有效且易于掌握。通過(guò)k-近鄰法構(gòu)建程序,我們可以自動(dòng)劃分鳶尾花的類(lèi)型。接下來(lái),我們將通過(guò)探討k-近鄰算法的基本理論以及實(shí)際例子進(jìn)行講解。
K-近鄰算法基本理論
算法概述
k-近鄰算法就是采用測(cè)量不同特征值之間的距離進(jìn)行分類(lèi)的方法。它的思路是:如果一個(gè)樣本在特征空間中的k個(gè)最相似(鄰近)的樣本中大多數(shù)屬于一個(gè)類(lèi)別,則該樣本也屬于這個(gè)類(lèi)別。在K-近鄰算法當(dāng)中,所選擇的鄰近點(diǎn)都已經(jīng)是正確分類(lèi)的對(duì)象。我們只依據(jù)k個(gè)(通常不大于20)鄰近樣本的類(lèi)別來(lái)決定待分樣本的類(lèi)別。
算法流程
k-近鄰算法的一般流程是:
1. 收集數(shù)據(jù)
2. 計(jì)算待測(cè)數(shù)據(jù)與訓(xùn)練數(shù)據(jù)之間的距離(一般采用歐式距離)
3. 將計(jì)算的距離排序
4. 找出距離最小的k個(gè)值
5. 計(jì)算找出值中每個(gè)類(lèi)別的頻次
6. 返回最高頻次的類(lèi)別
算法特點(diǎn)
優(yōu)點(diǎn):精度高、對(duì)異常值不敏感
缺點(diǎn):計(jì)算復(fù)雜度高、空間復(fù)雜度高
如何使用代碼實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入并分析數(shù)據(jù)
以鳶尾花數(shù)據(jù)集為例,鳶尾花數(shù)據(jù)集內(nèi)包括3類(lèi)鳶尾,包括山鳶尾、變色鳶尾和維吉尼亞鳶尾,每個(gè)記錄都有4個(gè)特征:花萼長(zhǎng)度、花萼寬度、花瓣長(zhǎng)度、花瓣寬度。
數(shù)據(jù)集導(dǎo)入與分析
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
# 加載數(shù)據(jù)集
dataset = load_iris()
# 劃分?jǐn)?shù)據(jù)
X_train, X_test, y_train, y_test = train_test_split(dataset['data'],dataset['target'],random_state= 0)
# random_state的作用相當(dāng)于隨機(jī)種子,是為了保證每次分割的訓(xùn)練集和測(cè)試集都是一樣的
# 設(shè)置鄰居數(shù),即n_neighbors的大小
knn = KNeighborsClassifier(n_neighbors = 5)
# 構(gòu)建模型
knn.fit(X_train,y_train)
# 得出分?jǐn)?shù)
print("score:{:.2f}".format(knn.score(X_test,y_test)))
# 我們也可以單獨(dú)對(duì)某一數(shù)據(jù)進(jìn)行測(cè)試
# 嘗試一條測(cè)試數(shù)據(jù)
X_try = np.array([[5,4,1,0.7]])
# 對(duì)X_try預(yù)測(cè)結(jié)果
prediction = knn.predict(X_try)
print("prediction = ",prediction)
得出結(jié)果:
prediction = [0]
即這朵花是山鳶尾
- EOF -
往期精彩回顧
適合初學(xué)者入門(mén)人工智能的路線及資料下載 (圖文+視頻)機(jī)器學(xué)習(xí)入門(mén)系列下載 中國(guó)大學(xué)慕課《機(jī)器學(xué)習(xí)》(黃海廣主講) 機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印 《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專(zhuān)輯 機(jī)器學(xué)習(xí)交流qq群955171419,加入微信群請(qǐng)掃碼(讀博請(qǐng)說(shuō)明)
評(píng)論
圖片
表情

