KNN-K近鄰 分類算法原理
# 從訓(xùn)練集中找到和新數(shù)據(jù)最接近的K條記錄,然后根據(jù)他們的主要分類來決定新的數(shù)據(jù)的類別
# 圖中的數(shù)據(jù)集是良好的數(shù)據(jù),即都打好了label,一類是藍色的正方形,一類是紅色的三角形,那個綠色的圓形是我們待分類的數(shù)據(jù)。
# 具體是每次來一個未知的樣本點,就在附近找K個最近的點進行投票
# 如果K=3,那么離綠色點最近的有2個紅色三角形和1個藍色的正方形,這3個點投票,于是綠色的這個待分類點屬于紅色的三角形。
# 如果K=5,那么離綠色點最近的有2個紅色三角形和3個藍色的正方形,這5個點投票,于是綠色的這個待分類點屬于藍色的正方形。
# KNN本質(zhì)是基于一種數(shù)據(jù)統(tǒng)計的方法!其實很多機器學(xué)習(xí)算法也是基于數(shù)據(jù)統(tǒng)計的。
# K的含義:來了一個樣本x,要給它分類,即求出它的y,就從數(shù)據(jù)集中,在x附近找離它最近的K個數(shù)據(jù)點,這K個數(shù)據(jù)點,類別c占的個數(shù)最多,就把x的label設(shè)為c
# 抽樣方法
# 打亂順序后的隨機數(shù)組 = numpy.random.permutation(n_隨機樣本的個數(shù))
# API neighbors.KNeighborsClassifier KNN建模的方法
# knnModel = neighbors.KNeighborsClassifier(n_neigbors = 5)
# n_neighbors n的個數(shù)
# 返回 KNN模型
# knnModel.fit(tData_訓(xùn)練數(shù)據(jù)的屬性數(shù)據(jù),tTarget_訓(xùn)練數(shù)據(jù)的目標(biāo)數(shù)據(jù)) KNN訓(xùn)練方法
# sklearn包
# knnModel.score(sData_測試數(shù)據(jù)的屬性數(shù)據(jù),sTarget測試數(shù)據(jù)的目標(biāo)數(shù)據(jù)) KNN評分方法
# knnModel.predict(pdata_需要預(yù)測的屬性數(shù)據(jù)) --》模型預(yù)測的結(jié)果
KNN-K近鄰 源代碼
import numpy
from sklearn import datasets
#引入數(shù)據(jù)集
iris = datasets.load_iris()
#查看數(shù)據(jù)的規(guī)模
iris.data.shape # shape數(shù)據(jù)的規(guī)模
#查看訓(xùn)練目標(biāo)的總類
numpy.unique(iris.target) # count(distinct target)
#隨機重排列
permutation = numpy.random.permutation(iris.target.size) # iris.target.size -->len(iris.target)
iris.data = iris.data[permutation] # 隨機的分類對應(yīng)的數(shù)據(jù)
iris.target = iris.target[permutation] # 重排
from sklearn import neighbors
#搭建KNN模型
knnModel = neighbors.KNeighborsClassifier(n_neighbors=3) # 訓(xùn)練目標(biāo)為三類
#訓(xùn)練模型
knnModel.fit(iris.data[:100], iris.target[:100]) # 前100列
from sklearn import cross_validation
#對模型進行評價
knnModel.score(iris.data[100:], iris.target[100:])
cross_validation.cross_val_score(
knnModel,
iris.data[100:],
iris.target[100:]
) # 交叉評分,三個分類的命中率,0,1,2 的命中率
#使用模型進行預(yù)測
knnModel.predict([[0.1, 0.2, 0.3, 0.4]])
參考文獻
作者A:ken