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