الگوریتم KNN در پایتون

الگوریتم KNN
الگوریتم KNN

k-نزدیک‌ترین همسایگی (k-Nearest Neighbors) یک روش ناپارامتری است که در داده‌کاوی، یادگیری ماشین و تشخیص الگو مورد استفاده قرار می‌گیرد.

در این مقاله به کدنویسی الگوریتم KNN در پایتون می‌پردازیم.

با ما همراه باشید.

 

یکی از دلایل اصلی پرکاربرد بودن الگوریتم‌های طبقه‌بندی (Classification) آن است که «تصمیم‌گیری» یکی از چالش‌های اساسی موجود در اغلب پروژه‌های تحلیلی است.

برای مثال، تصمیم‌گیری درباره اینکه آیا مشتری X پتانسیل لازم برای مورد هدف قرار داده شدن در کارزارهای دیجیتال یک کسب‌و‌کار را دارد یا خیر و یا اینکه آیا یک مشتری وفادار است یا نه از جمله مسائل تصمیم‌گیری به حساب می‌آیند که در فرآیند تحلیل قصد پاسخ‌دهی به آن‌ها وجود دارد.

نتایج این تحلیل‌ها بسیار تأمل‌برانگیز هستند و به‌طور مستقیم به پیاده‌سازی نقشه راه در یک سازمان یا کسب‌و‌کار کمک می‌کنند.

در این نوشتار، به یکی از روش‌های پرکاربرد طبقه‌بندی، یعنی روش k-نزدیک‌ترین همسایگی پرداخته شده و تمرکز آن بر چگونگی کار کردن الگوریتم و تأثیر پارامترهای ورودی بر خروجی و پیش‌بینی است.

شبه کد k-نزدیک‌ترین همسایگی

پیاده‌سازی مدل k-نزدیک‌ترین همسایگی با استفاده از شبه کد زیر امکان‌پذیر است:
  1. بارگذاری داده‌ها
  2. انتخاب اولیه مقدار k
  3. برای ایجاد کلاس‌های پیش‌بینی، از مقدار ۱ تا تعداد کل نقاط داده آموزش تکرار شود:
    1. فاصله داده‌های تست از هر سطر مجموعه داده آموزش محاسبه می‌شود.
      در اینجا از فاصله اقلیدسی به عنوان فاصله سنجش استفاده می‌شود که مرسوم‌ترین روش است و دیگر سنجه‌های قابل استفاده عبارت‌اند از فاصله چبیشف، کسینوس و دیگر موارد
    2. فاصله‌های محاسبه شده بر اساس مقدار فاصله به‌صورت صعودی مرتب شودند
    3. سطرهای k بالایی از آرایه مرتب شده انتخاب شود
    4. کلاس‌های دارای بیشترین تکرار در این سطرها دریافت شود
    5. مقدار کلاس پیش‌بینی‌شده بازگردانده شود

کدنویسی الگوریتم KNN در پایتون

از مجموعه داده معروف Iris برای ساخت مدل KNN استفاده شده است.

# Importing libraries
import pandas as pd
import numpy as np
import math
import operator
# Importing data
data = pd.read_csv("iris.csv")
#### End of STEP 1
data.head()

الگوریتم KNN در پایتون

# Defining a function which calculates euclidean distance between two data points
def euclideanDistance(data1, data2, length):
distance = 0
for x in range(length):
distance += np.square(data1[x] - data2[x])
return np.sqrt(distance)
# Defining our KNN model
def knn(trainingSet, testInstance, k):
distances = {}
sort = {}
length = testInstance.shape[1]
#### Start of STEP 3
# Calculating euclidean distance between each row of training data and test data
for x in range(len(trainingSet)):
#### Start of STEP 3.1
dist = euclideanDistance(testInstance, trainingSet.iloc[x], length)
distances[x] = dist[0]
#### End of STEP 3.1
#### Start of STEP 3.2
# Sorting them on the basis of distance
sorted_d = sorted(distances.items(), key=operator.itemgetter(1))
#### End of STEP 3.2
neighbors = []
#### Start of STEP 3.3
# Extracting top k neighbors
for x in range(k):
neighbors.append(sorted_d[x][0])
#### End of STEP 3.3
classVotes = {}
#### Start of STEP 3.4
# Calculating the most freq class in the neighbors
for x in range(len(neighbors)):
response = trainingSet.iloc[neighbors[x]][-1]
if response in classVotes:
classVotes[response] += 1
else:
classVotes[response] = 1
#### End of STEP 3.4
#### Start of STEP 3.5
sortedVotes = sorted(classVotes.items(), key=operator.itemgetter(1), reverse=True)
return(sortedVotes[0][0], neighbors)
#### End of STEP 3.5
# Creating a dummy testset
testSet = [[7.2, 3.6, 5.1, 2.5]]
test = pd.DataFrame(testSet)
#### Start of STEP 2
# Setting number of neighbors = 1
k = 1
#### End of STEP 2
# Running KNN model
result,neigh = knn(data, test, k)
# Predicted class
print(result)
-> Iris-virginica
# Nearest neighbor
print(neigh)
-> [141]
حالا با جایگزینی مقدار K می‌توان شاهد تغییرات نتایج پیش‌بینی‌ها باشیم:
# Setting number of neighbors = 3
k = 3
# Running KNN model
result,neigh = knn(data, test, k)
# Predicted class
print(result) -> Iris-virginica
# 3 nearest neighbors
print(neigh)
-> [141, 139, 120]
# Setting number of neighbors = 5
k = 5
# Running KNN model
result,neigh = knn(data, test, k)
# Predicted class
print(result) -> Iris-virginica
# 5 nearest neighbors
print(neigh)
-> [141, 139, 120, 145, 144]

 

نظرات خود را در ارتباط با مقاله ی آموزشی “کار با الگوریتم k-Nearest Neighbors با پایتون” را بنویسید.

در ارتباط با شاخه های مختلف هوش مصنوعی در این لینک بیشتر بخوانید.

موفق باشید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 3 میانگین: 4.3]