logo

K tuvākā kaimiņa (KNN) algoritms mašīnmācībai

  • K-Nearest Neighbor ir viens no vienkāršākajiem mašīnmācīšanās algoritmiem, kura pamatā ir uzraudzītās mācīšanās tehnika.
  • K-NN algoritms pieņem līdzību starp jauno gadījumu/datiem un pieejamajiem gadījumiem un iekļauj jauno lietu kategorijā, kas ir vislīdzīgākā pieejamajām kategorijām.
  • K-NN algoritms saglabā visus pieejamos datus un klasificē jaunu datu punktu, pamatojoties uz līdzību. Tas nozīmē, ka, parādoties jauniem datiem, tos var viegli klasificēt labi komplekta kategorijā, izmantojot K-NN algoritmu.
  • K-NN algoritmu var izmantot gan regresijai, gan klasifikācijai, bet galvenokārt tas tiek izmantots klasifikācijas problēmām.
  • K-NN ir a neparametrisks algoritms , kas nozīmē, ka tas neizdara nekādus pieņēmumus par pamatā esošajiem datiem.
  • To sauc arī par a slinka apmācāmā algoritms jo tā nemācās no apmācības kopas uzreiz, tā vietā tā saglabā datu kopu un klasifikācijas laikā veic darbību ar datu kopu.
  • KNN algoritms apmācības fāzē tikai saglabā datu kopu un, kad tas iegūst jaunus datus, klasificē šos datus kategorijā, kas ir daudz līdzīga jaunajiem datiem.
  • Piemērs:Pieņemsim, ka mums ir radījuma attēls, kas izskatās līdzīgs kaķim un sunim, bet mēs vēlamies zināt, vai tas ir kaķis vai suns. Tāpēc šai identifikācijai mēs varam izmantot KNN algoritmu, jo tas darbojas uz līdzības mēra. Mūsu KNN modelis atradīs līdzīgas jaunās datu kopas funkcijas kaķu un suņu attēliem un, pamatojoties uz līdzīgākajām funkcijām, iekļaus to kaķu vai suņu kategorijā.
K tuvākā kaimiņa (KNN) algoritms mašīnmācībai

Kāpēc mums ir nepieciešams K-NN algoritms?

Pieņemsim, ka ir divas kategorijas, t.i., A un B kategorija, un mums ir jauns datu punkts x1, tāpēc šis datu punkts atradīsies kurā no šīm kategorijām. Lai atrisinātu šāda veida problēmas, mums ir nepieciešams K-NN algoritms. Ar K-NN palīdzību mēs varam viegli noteikt konkrētas datu kopas kategoriju vai klasi. Apsveriet tālāk redzamo diagrammu:

K tuvākā kaimiņa (KNN) algoritms mašīnmācībai

Kā darbojas K-NN?

K-NN darbību var izskaidrot, pamatojoties uz tālāk norādīto algoritmu:

    1. darbība:Izvēlieties kaimiņu numuru K2. darbība:Aprēķiniet Eiklīda attālumu K kaimiņu skaits 3. darbība:Paņemiet K tuvākos kaimiņus atbilstoši aprēķinātajam Eiklīda attālumam.4. darbība:Starp šiem k kaimiņiem saskaitiet datu punktu skaitu katrā kategorijā.5. darbība:Piešķiriet jaunos datu punktus tai kategorijai, kurai kaimiņu skaits ir maksimālais.6. darbība:Mūsu modelis ir gatavs.

Pieņemsim, ka mums ir jauns datu punkts un tas jāievieto vajadzīgajā kategorijā. Apsveriet tālāk redzamo attēlu:

selēna pamati
K tuvākā kaimiņa (KNN) algoritms mašīnmācībai
  • Pirmkārt, mēs izvēlēsimies kaimiņu skaitu, tāpēc izvēlēsimies k=5.
  • Tālāk mēs aprēķināsim Eiklīda attālums starp datu punktiem. Eiklīda attālums ir attālums starp diviem punktiem, ko mēs jau esam pētījuši ģeometrijā. To var aprēķināt šādi:
K tuvākā kaimiņa (KNN) algoritms mašīnmācībai
  • Aprēķinot Eiklīda attālumu, mēs ieguvām tuvākos kaimiņus kā trīs tuvākos kaimiņus A kategorijā un divus tuvākos kaimiņus B kategorijā. Apsveriet tālāk redzamo attēlu:
K tuvākā kaimiņa (KNN) algoritms mašīnmācībai
  • Kā redzam, 3 tuvākie kaimiņi ir no A kategorijas, tāpēc šim jaunajam datu punktam ir jāpieder A kategorijai.

Kā izvēlēties K vērtību K-NN algoritmā?

Tālāk ir norādīti daži punkti, kas jāatceras, atlasot K vērtību K-NN algoritmā.

  • Nav īpaša veida, kā noteikt “K” labāko vērtību, tāpēc mums ir jāizmēģina dažas vērtības, lai atrastu labāko no tām. Vispiemērotākā K vērtība ir 5.
  • Ļoti zema K vērtība, piemēram, K = 1 vai K = 2, var būt trokšņaina un izraisīt modeļa novirzes.
  • Lielas K vērtības ir labas, taču tās var radīt zināmas grūtības.

KNN algoritma priekšrocības:

  • To ir vienkārši īstenot.
  • Tas ir izturīgs pret trokšņainiem treniņu datiem
  • Tas var būt efektīvāks, ja apmācības dati ir lieli.

KNN algoritma trūkumi:

  • Vienmēr ir jānosaka K vērtība, kas kādu laiku var būt sarežģīta.
  • Aprēķinu izmaksas ir augstas, jo tiek aprēķināts attālums starp datu punktiem visiem apmācības paraugiem.

KNN algoritma Python ieviešana

Lai veiktu K-NN algoritma Python ieviešanu, mēs izmantosim to pašu problēmu un datu kopu, ko izmantojām loģistikas regresijā. Bet šeit mēs uzlabosim modeļa veiktspēju. Zemāk ir problēmas apraksts:

Problēma K-NN algoritmam: Ir automašīnu ražotāja uzņēmums, kas ir izgatavojis jaunu SUV automašīnu. Uzņēmums vēlas rādīt reklāmas lietotājiem, kuri ir ieinteresēti iegādāties šo SUV. Tāpēc šai problēmai mums ir datu kopa, kas satur vairāku lietotāju informāciju, izmantojot sociālo tīklu. Datu kopā ir daudz informācijas, bet Paredzamā alga un Vecums mēs apsvērsim neatkarīgo mainīgo un Iegādāts mainīgais ir par atkarīgo mainīgo. Zemāk ir datu kopa:

K tuvākā kaimiņa (KNN) algoritms mašīnmācībai

K-NN algoritma ieviešanas soļi:

  • Datu priekšapstrādes solis
  • K-NN algoritma pielāgošana apmācības komplektam
  • Pārbaudes rezultāta prognozēšana
  • Rezultāta precizitātes pārbaude (apjukuma matricas izveide)
  • Testa kopas rezultāta vizualizācija.

Datu pirmapstrādes solis:

Datu priekšapstrādes solis paliks tieši tāds pats kā loģistikas regresija. Zemāk ir tā kods:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv('user_data.csv') #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test) 

Izpildot iepriekš minēto kodu, mūsu datu kopa tiek importēta mūsu programmā un labi iepriekš apstrādāta. Pēc funkciju mērogošanas mūsu testa datu kopa izskatīsies šādi:

K tuvākā kaimiņa (KNN) algoritms mašīnmācībai

No iepriekš redzamā izvades attēla mēs varam redzēt, ka mūsu dati ir veiksmīgi mērogoti.

    K-NN klasifikatora pielāgošana apmācības datiem:
    Tagad mēs pielāgosim K-NN klasifikatoru apmācības datiem. Lai to izdarītu, mēs importēsim KNeighborsClassifier klase Sklearn Kaimiņi bibliotēka. Pēc klases importēšanas mēs izveidosim Klasifikators klases objekts. Šīs klases parametrs būs
      n_neighbors:Lai definētu nepieciešamos algoritma kaimiņus. Parasti tas aizņem 5.metric='minkowski':Šis ir noklusējuma parametrs, un tas nosaka attālumu starp punktiem.p=2:Tas ir līdzvērtīgs standarta Eiklīda metrikai.
    Un tad mēs pielāgosim klasifikatoru treniņu datiem. Zemāk ir tā kods:
 #Fitting K-NN classifier to the training set from sklearn.neighbors import KNeighborsClassifier classifier= KNeighborsClassifier(n_neighbors=5, metric='minkowski', p=2 ) classifier.fit(x_train, y_train) 

Izvade: izpildot iepriekš minēto kodu, mēs saņemsim izvadi kā:

 Out[10]: KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=None, n_neighbors=5, p=2, weights='uniform') 
    Pārbaudes rezultāta prognozēšana:Lai prognozētu testa kopas rezultātu, mēs izveidosim a y_pred vektoru, kā to darījām loģistikas regresijā. Zemāk ir tā kods:
 #Predicting the test set result y_pred= classifier.predict(x_test) 

Izvade:

Iepriekš minētā koda izvade būs:

K tuvākā kaimiņa (KNN) algoritms mašīnmācībai
    Apjukuma matricas izveide:
    Tagad mēs izveidosim mūsu K-NN modelim Confusion Matrix, lai redzētu klasifikatora precizitāti. Zemāk ir tā kods:
 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

Iepriekš minētajā kodā mēs esam importējuši funkciju confusion_matrix un nosaukuši to, izmantojot mainīgo cm.

Izvade: Izpildot iepriekš minēto kodu, mēs iegūsim matricu, kā norādīts tālāk:

K tuvākā kaimiņa (KNN) algoritms mašīnmācībai

Iepriekš redzamajā attēlā redzams, ka ir 64+29= 93 pareizas prognozes un 3+4= 7 nepareizas prognozes, savukārt loģistikas regresijā bija 11 nepareizas prognozes. Tātad var teikt, ka modeļa veiktspēja tiek uzlabota, izmantojot K-NN algoritmu.

    Apmācības komplekta rezultāta vizualizācija:
    Tagad mēs vizualizēsim treniņu komplekta rezultātu K-NN modelim. Kods paliks tāds pats kā loģistikas regresijā, izņemot diagrammas nosaukumu. Zemāk ir tā kods:
 #Visulaizing the trianing set result from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap(('red','green' ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('red', 'green'))(i), label = j) mtp.title('K-NN Algorithm (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

Izvade:

Izpildot iepriekš minēto kodu, mēs iegūsim zemāk redzamo grafiku:

K tuvākā kaimiņa (KNN) algoritms mašīnmācībai

Izvades grafiks atšķiras no grafika, ko mēs esam izveidojuši loģistikas regresijā. To var saprast tālāk norādītajos punktos:

jquery noklikšķinot
    • Kā redzam, diagramma parāda sarkano punktu un zaļo punktu. Zaļie punkti ir par Pirkts(1) un Sarkanie punkti par Nav Purchased(0) mainīgo.
    • Grafikā ir parādīta neregulāra robeža, nevis taisna līnija vai līkne, jo tas ir K-NN algoritms, t.i., tuvākā kaimiņa atrašana.
    • Diagrammā lietotāji ir klasificēti pareizajās kategorijās, jo lielākā daļa lietotāju, kuri nav iegādājušies SUV, atrodas sarkanajā reģionā, un lietotāji, kas iegādājās SUV, atrodas zaļajā reģionā.
    • Diagrammā ir redzams labs rezultāts, taču joprojām ir daži zaļie punkti sarkanajā apgabalā un sarkanie punkti zaļajā apgabalā. Taču tā nav liela problēma, jo, rīkojoties ar šo modeli, tiek novērstas problēmas ar pārmērīgu uzstādīšanu.
    • Tāpēc mūsu modelis ir labi apmācīts.
    Testa kopas rezultāta vizualizācija:
    Pēc modeļa apmācības mēs tagad pārbaudīsim rezultātu, ievietojot jaunu datu kopu, t.i., Testa datu kopu. Kods paliek nemainīgs, izņemot dažas nelielas izmaiņas: piemēram, x_train un y_train tiks aizstāts ar x_test un y_test .
    Zemāk ir tā kods:
 #Visualizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap(('red','green' ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('red', 'green'))(i), label = j) mtp.title('K-NN algorithm(Test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

Izvade:

K tuvākā kaimiņa (KNN) algoritms mašīnmācībai

Iepriekš redzamajā diagrammā ir parādīta testa datu kopas izvade. Kā redzams grafikā, prognozētā izvade ir laba, jo lielākā daļa sarkano punktu atrodas sarkanajā reģionā un lielākā daļa zaļo punktu ir zaļajā reģionā.

Tomēr sarkanajā apgabalā ir maz zaļo punktu, bet zaļajā - daži sarkanie punkti. Tātad šie ir nepareizi novērojumi, ko esam novērojuši neskaidrības matricā (7 Nepareiza izvade).