Рубрики
Без рубрики

Алгоритмы машинного обучения: классификатор KNN

Привет! Добро пожаловать в этот пост, где мы говорим об популярном алгоритме машинного обучения: Классификатор KNN …. Tagged с помощью Python, MachineLearning, Classification, алгоритмов.

Привет! Добро пожаловать в этот пост, где мы говорим об популярном алгоритме машинного обучения: KNN Classifier. Мы рассмотрим, что это такое, и напишем это сами, используя Python.

Вы можете найти код в этом посте здесь: https://github.com/ashwins-code/machine-learning-algorithms/blob/main/knn-classifier.py

Что такое классификатор KNN и как он работает ??

KNN означает K-nearest-neighbours. Классификатор KNN – это общий алгоритм машинного обучения, который классифицирует части данных.

Классификация Данные означает размещение этих данных в определенные категории. Примером может быть классификация текстовые данные как счастливые, грустные или нейтральные.

То, как работает классификатор KNN, заключается в том, чтобы иметь некоторое начальное Обучение Данные, которые содержат несколько точек данных и их соответствующие классификации. Когда его просят классифицировать некоторые новые данные, он смотрит на k Ближайшие точки данных в учебных данных (это обычно рассчитывается с использованием евклидового расстояния , которое вычисляет прямую линию между 2 точками).

После того, как он получил 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

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))

Оригинал: “https://dev.to/ashwinscode/machine-learning-algorithms-knn-classifier-41k4”