KNN描述
- KNN鄰近算法是簡單的分類與回歸方法,屬于監(jiān)督學(xué)習(xí)确垫,也屬于懶散學(xué)習(xí)法俄讹。給定一個訓(xùn)練集(包括訓(xùn)練數(shù)據(jù)和訓(xùn)練標(biāo)簽)和一個測試對象(只有測試數(shù)據(jù),需要預(yù)測測試標(biāo)簽)該算法計算測試對象和每個訓(xùn)練對象之間的距離或相似度邑商,這個測試對象在空間K個最近樣本中大多數(shù)屬于某個類別摄咆,那么這個測試對象的標(biāo)簽就屬于這個類別。
2.KNN工作原理:存在一個樣本數(shù)據(jù)集合人断,也稱為訓(xùn)練樣本集吭从,并且樣本集中每個數(shù)據(jù)都存在標(biāo)簽,即我們知道樣本集中每個數(shù)據(jù)所屬的類別恶迈。輸入沒有標(biāo)簽的新數(shù)據(jù)后涩金,將新數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應(yīng)的特征進行比較,算法提取樣本最相似(最鄰近)數(shù)據(jù)的分類標(biāo)簽暇仲。一般來說步做,只選取樣本集中前k個最相似的數(shù)據(jù),這就是KNN鄰近算法中k的出處熔吗,通常k不大于20的整數(shù)辆床。最后選擇k個最相似數(shù)據(jù)中出現(xiàn)最多的分類,作為新數(shù)據(jù)的分類
注釋:
k值較小桅狠,模型復(fù)雜度較高讼载,容易發(fā)生過擬合,學(xué)習(xí)的誤差會增大中跌,預(yù)測結(jié)果對鄰近實例點特別敏感咨堤;k值較大可以減少學(xué)習(xí)的誤差,但是學(xué)習(xí)的近似誤差會增大漩符,與輸入實例較遠的訓(xùn)練實例也會對預(yù)測取到左右一喘;因此,一般選擇k值較小且奇數(shù),也會用交叉驗證法選取最優(yōu)的k值凸克。
下面開始python sklearn的KNN算法
#讀取數(shù)據(jù)
import numpy as np
import pandas as pd
import os
os.chdir('/Users/xy/Desktop/機器學(xué)習(xí)/Digit Recognizer/digit-recognizer')
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
print(train.head(5),type(train),train.shape)#42000议蟆,785
print(test.head(5),type(test),test.shape)#28000,744
數(shù)據(jù)量很大
#提取訓(xùn)練數(shù)據(jù)特征
data = train.iloc[:,1:]
#提取訓(xùn)練標(biāo)簽
label = train.iloc[:,0]
#建立KNN模型
from sklearn import neighbors
model = neighbors.KNeighborsClassifier(n_neighbors=1)
model.fit(data,label)
pre = model.predict(test)
print(pre)
等著跑數(shù)兒中~~~~
經(jīng)過多次實驗萎战,k=1測試結(jié)果最接近