من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

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

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

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

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

 

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

یکی از دلایل اصلی پرکاربرد بودن الگوریتم‌های طبقه‌بندی (Classification) آن است که «تصمیم‌گیری» یکی از چالش‌های اساسی موجود در اغلب پروژه‌های تحلیلی است. برای مثال، تصمیم‌گیری درباره اینکه آیا مشتری X پتانسیل لازم برای مورد هدف قرار داده شدن در کارزارهای دیجیتال یک کسب‌و‌کار را دارد یا خیر و یا اینکه آیا یک مشتری وفادار است یا نه از جمله مسائل تصمیم‌گیری به حساب می‌آیند که در فرآیند تحلیل قصد پاسخ‌دهی به آن‌ها وجود دارد. نتایج این تحلیل‌ها بسیار تأمل‌برانگیز هستند و به‌طور مستقیم به پیاده‌سازی نقشه راه در یک سازمان یا کسب‌و‌کار کمک می‌کنند. در این نوشتار، به یکی از روش‌های پرکاربرد طبقه‌بندی، یعنی روش k-نزدیک‌ترین همسایگی پرداخته شده و تمرکز آن بر چگونگی کار کردن الگوریتم و تأثیر پارامترهای ورودی بر خروجی و پیش‌بینی است.

 

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

پیاده‌سازی مدل k-نزدیک‌ترین همسایگی با استفاده از شبه کد زیر امکان‌پذیر است:

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

 

کدنویسی الگوریتم 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 با پایتون” را بنویسید. در ارتباط با شاخه‌های مختلف هوش مصنوعی در این لینک بیش‌تر بخوانید.

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