기계 학습 알고리즘: KNN 분류기
이 게시물에서 코드를 찾을 수 있습니다: https://github.com/ashwins-code/machine-learning-algorithms/blob/main/knn-classifier.py
KNN 분류기는 무엇이며 어떻게 작동합니까??
KNN은 K-Nearest-Neighbours의 약자입니다. KNN 분류기는 데이터 조각을 분류하는 일반적인 기계 학습 알고리즘입니다.
데이터 분류는 해당 데이터를 특정 범주에 넣는 것을 의미합니다. 예를 들어 텍스트 데이터를 행복, 슬픔 또는 중립으로 분류할 수 있습니다.
KNN 분류기가 작동하는 방식은 여러 데이터 포인트와 각각의 분류를 포함하는 일부 초기 훈련 데이터를 갖는 것입니다. 새로운 데이터를 분류하라는 요청을 받으면 교육 데이터에서 k개의 가장 가까운 데이터 포인트를 찾습니다(일반적으로 두 포인트 사이의 직선 거리를 계산하는 유클리드 거리를 사용하여 계산됨).
k개의 가장 가까운 데이터 포인트를 얻은 후 이러한 데이터 포인트의 가장 일반적인 분류를 찾아 분류하려는 새 데이터의 분류로 반환합니다.
분류 문제
다음은 우리가 만들려는 KNN 분류기를 사용하여 해결하고자 하는 분류 문제입니다.
RGB 값이 주어지면 빨간색, 파란색 또는 녹색으로 분류하려고 합니다.
RGB 값이 무엇인지 모르는 경우 색상에 빨강, 녹색 및 파랑이 얼마나 많이 포함되어 있는지 보여줍니다. RGB 값에 포함될 수 있는 최대 숫자는 255입니다. 예를 들면 다음과 같습니다.
(255, 200, 140)
첫 번째 숫자는 색상의 빨간색 정도, 두 번째 숫자는 녹색 정도, 세 번째 숫자는 색상의 파란색 정도입니다. 이제 다음이 이해가 되어야 합니다.
(255, 0, 0) #Red
(0, 255, 0) #Green
(0, 0, 255) #Blue
문제의 맥락에서 (195, 50, 0)과 같은 값은 (255, 0, 0)에 가장 가깝기 때문에 빨간색으로 간주합니다.
코드!
먼저 수학적 계산을 위해 numpy를 가져오겠습니다.
import numpy as np
이제 주어진 목록의 모드를 반환하는 함수를 만들어 봅시다.
def get_mode(l):
mode = ""
max_count = 0
count = {}
for i in l:
if i not in count:
count[i] = 0
count[i] += 1
if count[i] > max_count:
max_count = count[i]
mode = i
return mode
KNN Classifier 클래스를 생성해 봅시다.
class knn_classifier:
def __init__(self):
self.data_points = []
self.classifications = []
def add_example(self, data_point, classification):
#Adding training data points
#self.data_points contain the data points themseleves, self.classification contain their respective classifications
self.data_points.append(data_point)
self.classifications.append(classification)
def classify(self, input, k = 3):
#Classifies new data
classification = sorted(self.classifications, key = lambda x: np.linalg.norm(np.subtract(input, self.data_points[self.classifications.index(x)])))[:k]
#The above line may seem confusing. It sorts self.classification by the euclidean distance between each classification's respective data point and the input data point
#"classification" is ultimately sliced to contain the classifications of the k closest data points
# Returns the final classification
return get_mode(classification)
마지막으로 새로운 분류기를 설정하고 일부 값을 분류해 봅시다!
classifier = knn_classifier()
training_data_points = [
[[255, 0, 0], "red"],
[[0, 255, 0], "green"],
[[0, 0, 255], "blue"],
[[250, 5, 5], "red"],
[[5, 250, 5], "green"],
[[5, 5, 250], "blue"],
[[245, 10, 10], "red"],
[[10, 245, 10], "green"],
[[10, 10, 245], "blue"],
]
for point in training_data_points:
classifier.add_example(point[0], point[1])
print (classifier.classify([250, 0, 0], k = 3))
print (classifier.classify([100, 180, 50], k = 3))
print (classifier.classify([50, 50, 190], k = 3))
우리의 산출물
red
green
blue
효과가있다! 여기에 모든 코드가 함께 있습니다.
import numpy as np
def get_mode(l):
mode = ""
max_count = 0
count = {}
for i in l:
if i not in count:
count[i] = 0
count[i] += 1
if count[i] > max_count:
max_count = count[i]
mode = i
return mode
class knn_classifier:
def __init__(self):
self.data_points = []
self.classifications = []
def add_example(self, data_point, classification):
#Adding training data points
#self.data_points contain the data points themseleves, self.classification contain their respective classifications
self.data_points.append(data_point)
self.classifications.append(classification)
def classify(self, input, k = 3):
#Classifies new data
classification = sorted(self.classifications, key = lambda x: np.linalg.norm(np.subtract(input, self.data_points[self.classifications.index(x)])))[:k]
#The above line may seem confusing. It sorts self.classification by the euclidean distance between each classification's respective data point and the input data point
#"classification" is ultimately sliced to contain the classifications of the k closest data points
# Returning the final classification
return get_mode(classification)
classifier = knn_classifier()
training_data_points = [
[[255, 0, 0], "red"],
[[0, 255, 0], "green"],
[[0, 0, 255], "blue"],
[[250, 5, 5], "red"],
[[5, 250, 5], "green"],
[[5, 5, 250], "blue"],
[[245, 10, 10], "red"],
[[10, 245, 10], "green"],
[[10, 10, 245], "blue"],
]
for point in training_data_points:
classifier.add_example(point[0], point[1])
print (classifier.classify([250, 0, 0], k = 3))
print (classifier.classify([100, 180, 50], k = 3))
print (classifier.classify([50, 50, 190], k = 3))
Reference
이 문제에 관하여(기계 학습 알고리즘: KNN 분류기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ashwinscode/machine-learning-algorithms-knn-classifier-41k4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)