Dit machinale leeralgoritme is eenvoudig en eenvoudig te begrijpen. U kunt regressie- en classificatieproblemen oplossen met machineleermethoden. Om het concept van de K-nearest-buurman te begrijpen, moet u eerst weten hoe een techniek van machinaal leren onder toezicht werkt. Bij begeleid leren voorzie je het model van gelabelde gegevens. De machine analyseert vervolgens de gelabelde gegevens en stuurt een geschikte output aan.
Als kinderen bijvoorbeeld jong zijn, hebben ze begeleiding nodig om het verschil tussen verschillende kleuren, dieren, alfabetten, enz. te begrijpen. U labelt alle items voor hen, zodat ze ze snel kunnen identificeren. Zo werkt het machinaal leren onder toezicht. Dit leren helpt bij het oplossen van classificatieproblemen. Bij dit soort problemen voorspel je de waarde van de invoergegevens en vervolgens schikt het algoritme de waarden in verschillende klassen op basis van het gewicht van de functies en hun invoerfuncties.

K-Dichtstbijzijnde buren

Om de regressie en classificatie op te lossen, kunt u dit algoritme gebruiken voor de begeleide machinale leermethode. KNN omvat geen enkele leerfase. Ze berekenen de voorspellende methode niet zoals lineaire of logistieke regressie. Dit algoritme vindt de overeenkomsten tussen de variabelen. Ze meten hoe dichtbij of veraf de variabelen liggen op basis van de gegeven gegevens. Met andere woorden, dit algoritme denkt dat hoe dichter de dingen bij elkaar liggen, hoe meer ze op elkaar lijken.

Hoe het KNN-algoritme werkt

Je moet de volgende methode volgen om het K-Buurman-algoritme goed te implementeren (voor Python):
– Laad de invoer of de gegevens op de machine van de dataset
– Wijzig de waarde van K uit de variabelen
– Bereken de afstand van de variabelen ten opzichte van elk voorbeeld van de gegevens.
– Voeg nu de afstand toe in een geordende vorm
– Sorteer nu de bestelde collectie in oplopende volgorde op basis van hun afstand.
– Kies de K uit de collectie
– Vind nu de labels van die K-waarde
– Als het regressie is, moet je het gemiddelde van het label “K.” teruggeven.
– Als het de classificatie is, dan moet je de modus van het label “K.” teruggeven.

Uitvoering van de codering op

van verzamelingen importCounter
invoerrekenen

defknn(data, query, k, distance_fn, choice_fn):
buurman_afstanden_en_indices = []

# 3. Voor elk voorbeeld in de gegevens
voor index, bijvoorbeeld inenumereren(gegevens):
# 3.1 Bereken de afstand tussen het queryvoorbeeld en de huidige
# voorbeeld uit de gegevens.
afstand = afstand_fn(voorbeeld[:-1], query)

# 3.2 Voeg de afstand en de index van het voorbeeld toe aan een geordende verzameling
buurman_omstandigheden_en_indices.append((afstand, index))

# 4. Sorteer de geordende verzameling van afstanden en indices van
# kleinste tot grootste (in oplopende volgorde) door de afstanden
gesorteerde_buren_afstanden_en_indices = gesorteerd (buurman_afstanden_en_indices)

# 5. Kies de eerste K-items uit de gesorteerde collectie
k_nearest_distances_and_indices = gesorteerde_neighbor_distances_and_indices[:k].

# 6. Krijg de labels van de geselecteerde K-items
k_nearest_labels = [data[i][1] voor afstand, i in k_nearest_distances_en_indices].

# 7. Indien regressie (keuze_fn = gemiddelde), geef dan het gemiddelde van de K-labels terug
# 8. Als de classificatie (keuze_fn = modus), de modus van de K-etiketten teruggeven
terugkeer k_nearest_distances_and_indices , keuze_fn(k_nearest_labels)

defmean(etiketten):
retourmateriaal (etiketten) /len (etiketten)

defmode(labels):
returnCounter(labels).most_common(1)[0][0][0]

defeuclideaan_afstand (punt 1, punt 2):
sum_squared_distance =0
voor i inrange (len(punt1)):
sum_squared_distance += math.pow(punt1[i] – punt2[i], 2)
terugkeer math.sqrt(sum_squared_distance)

defmain():
”’
# Regressiegegevens
#
# Kolom 0: hoogte (inches)
# Kolom 1: gewicht (ponden)
”’
reg_data = [
[65.75, 112.99],
[71.52, 136.49],
[69.40, 153.03],
[68.22, 142.34],
[67.79, 144.30],
[68.70, 123.30],
[69.80, 141.49],
[70.01, 136.46],
[67.90, 112.37],
[66.49, 127.45],
]

# Vraag:
# Gezien de gegevens die we hebben, wat is de beste gok op iemands gewicht als ze 60 inches groot zijn?
reg_query = [60]
reg_k_nearest_neighbors, reg_prediction =knn(
reg_data, reg_query, k=3, distance_fn=euclidean_distance, choice_fn=mean
)

”’
# Classificatiegegevens
#
# Kolom 0: leeftijd
# Kolom 1: houdt van ananas
”’
clf_data = [
[22, 1],
[23, 1],
[21, 1],
[18, 1],
[19, 1],
[25, 0],
[27, 0],
[29, 0],
[31, 0],
[45, 0],
]
# Vraag:
# Gezien de gegevens die we hebben, past de niet-gespecificeerde M&M in de rode of groene M&M’s set?
clf_query = [33]
clf_k_nearest_neighbors, clf_prediction =knn(
clf_data, clf_query, k=3, distance_fn=euclidean_distance, choice_fn=mode
)

als __naam__ ==’__main__’:
hoofdd()

Inzicht in het voorbeeld

Laten we nu de bovenstaande stappen in eenvoudige bewoordingen begrijpen. Stel je voor dat er groene en rode M&M’s op een bord staan. Hier vind je nog een M&M die je niet kent. Om de klasse te vinden, moet je een waarde van K instellen. Laten we zeggen dat in deze toestand K = 4. Nu teken je een cirkel rond de ongeïdentificeerde M&M op een manier dat het middelpunt van de cirkel is dat M&M zelf, en alleen de vier andere M&M’s zijn in de cirkel. Nu gaan we kijken welke klasse van M&M’s de cirkel meer heeft. Laten we zeggen dat als er vier rode M&M’s waren, dan zullen we de ongeïdentificeerde M&M beschouwen als een rode klasse.

Wanneer kun je het KNN-Algoritme gebruiken?

Je kunt het K-Nearest Neighbor Algorithm gebruiken om het regressie- of classificatieprobleem op te lossen. Veel industrieën maken gebruik van dit systeem van machinaal leren onder toezicht voor classificatieproblemen. Hier zijn drie belangrijke factoren bij het evalueren van een techniek:
– Hoe gemakkelijk kun je de output interpreteren?
– Hoe kunt u de output berekenen?
– Wat is het voorspellend vermogen?
KNN is perfect voor alle bovenstaande parameters om een techniek te meten. De KNN-techniek wordt echter vaak toegepast omdat deze eenvoudig te interpreteren en te berekenen is.

Hoe kunt u de K-waarde kiezen?

Om de beste K-waarde te vinden, moeten we het algoritme vele malen draaien en controleren welk getal de fouten vermindert en toch het vermogen van het algoritme behouden en voorspellingen doen. Hier zijn enkele dingen die u in gedachten moet houden:
– Het eerste wat je niet moet doen is er een selecteren als een K-waarde. Als u er één als K-waarde kiest, krijgen we onstabiele voorspellingen. Bijvoorbeeld, als we de klasse van een M&M moeten vinden die volledig omringd is door rode M&M’s maar slechts één groene M&M in de buurt van de niet-geïdentificeerde M&M ligt. In deze toestand zullen we denken dat het querypoint groen is, dus onze voorspelling zal verkeerd zijn.
– Wanneer we de K-waarde verhogen, zullen we zien dat de voorspelling stabiel wordt door de meerderheid van de kiezers. Wanneer we echter meer fouten vinden, gaan we te ver van de K-waarde.
– Wanneer er een verband is tussen de voorspellingen, moeten we het oneven getal kiezen.
De keuze van de K-waarde hangt af van de dataset die je probeert te gebruiken. U moet echter weten dat hoe meer buren we toevoegen, hoe nauwkeuriger de resultaten zullen zijn.

Conclusie

In dit artikel hebben we geprobeerd om een basis en gemakkelijk te begrijpen concept van het K-Dichtbijzijnde Buurman-algoritme te bieden. We leerden dat KNN helpt bij het voorspellen van de indeling met de gegeven dataset. Dit is een eenvoudige en snelle methode voor de berekening.