«Немедленно изменив врачей, [алгоритм] позволит нам ускорить своевременную диагностику потенциально опасного для жизни состояния». - Доктор Рэйчел Коллкут.

В этой статье сформулированы основные предпосылки, необходимые для понимания k-ближайшего соседа и настройки гиперпараметров.

Обучение на основе экземпляров (также известное как обучение на основе памяти) - это семейство алгоритмов обучения, которые вместо выполнения обобщения точек данных пытаются сравнить новые экземпляры проблемы. (данные тестирования) с предоставленными точками данных (данные обучения).

Одной из простейших форм алгоритма обучения на основе экземпляров является алгоритм ближайшего соседа (NN). Короче говоря, алгоритм ближайшего соседа имеет тенденцию классифицировать точку тестовых данных на основе ближайшего соседа к точке данных в проблемном пространстве. Одним из основных недостатков алгоритма ближайшего соседа является очень высокая восприимчивость к шуму. В настоящее время одним из широко используемых расширений алгоритма ближайшего соседа является алгоритм k-ближайшего соседа (k-NN). В отличие от ближайшего соседа в k-ближайшем соседе, мы склонны к нахождению k-ближайшего соседа точки тестовых данных, и большинство голосов среди этих k-ближайших соседей предсказывает класс точки тестовых данных. Один из лучших постов, в которых можно углубиться в k-NN, - Основы машинного обучения с алгоритмом K-ближайших соседей Онела Харрисона.

Постановка задачи

Маммография - самый эффективный метод скрининга рака груди, доступный сегодня. Однако низкая положительная прогностическая ценность биопсии молочной железы в результате интерпретации маммограммы приводит примерно к 70% ненужных биопсий с доброкачественными результатами. Чтобы уменьшить большое количество ненужных биопсий груди, в последние годы было предложено несколько систем компьютерной диагностики (CAD). Эти системы помогают врачам принять решение о проведении биопсии груди при подозрительном поражении, обнаруженном на маммограмме, или о проведении краткосрочного последующего осмотра на основе практического машинного обучения.

Можем ли мы найти лучший вариант системы k-NN, который можно использовать для прогнозирования тяжести (доброкачественной или злокачественной) маммографического массового поражения на основе атрибутов BI-RADS и возраста пациента?

Информация об особенностях

Ниже описаны 5 числовых функций и двоичный целевой класс:

Разделение данных на тестовую и обучающую выборки:

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

Варианты k-NN и гиперпараметры для оценки:

Варианты k-NN создаются путем изменения матрицы расстояний. Изменение матрицы расстояний также привело к появлению ряда гиперпараметров, связанных с этим расстоянием.

Используемые варианты k-NN описаны ниже:

  1. Евклидово расстояние. Это наиболее распространенная мера расстояния, которая измеряет расстояние по прямой между двумя точками. Математическая формула для вычисления евклидова расстояния до точек данных p и q представлена ​​ниже:

Код евклидова расстояния:

def calculateDistances(compArray, queryArray):
 “””
 Computes Euclidean distance-
 :param compArray: takes in 2d array i.e. training dataset 
 :param queryArray: takes in 1d array i.e. instance of test dataset
 :return: sqrtArray :distance between the querry point and each point in training dataset
 sortedIndex : sorted index based on the distance between the querry point and each point in training dataset
 “””
 subArray =np.subtract(compArray,queryArray)
 powArray = subArray**2
 sumArray = np.sum(powArray,axis =1)
 sqrtArray = np.sqrt(sumArray)
 #sorts index of array based on respective location value
 sortedIndex = np.argsort(sqrtArray)
 return sqrtArray,sortedIndex

2. Манхэттенское расстояние. Вторым по распространенности показателем расстояния является манхэттенское расстояние. Оно измеряет расстояние параллельно каждой оси, а не по диагонали, как это наблюдается на евклидовом расстоянии. Математическая формула для вычисления манхэттенского расстояния до точек данных p и q представлена ​​ниже:

Код для манхэттенского расстояния:

def calculateManhattanDistances(compArray, queryArray):
 “””
 Computes Manhattan distance-
 :param compArray: takes in 2d array i.e. training dataset 
 :param queryArray: takes in 1d array i.e. instance of test dataset
 :return: sumArray :distance between the querry point and each point in training dataset
 sortedIndex : sorted index based on the distance between the querry point and each point in training dataset
 “””
 subArray =np.subtract(compArray,queryArray)
 subArray= np.absolute(subArray)
 sumArray = np.sum(subArray,axis =1)
 #sorts index of array based on respective location value
 sortedIndex = np.argsort(sumArray)
 return sumArray,sortedIndex

3. Расстояние Минковского: расстояние Минковского представляет собой обобщенную формулу для поиска комплексных мер расстояния, подходящих для различных областей задач. Математическая формула для вычисления расстояния Минковского до точек данных p и q представлены ниже:

Для приведенного выше уравнения, если 'a' принять за 1, мы получим манхэттенское расстояние, а если 'a' будет считаться равным 2, мы получим евклидово расстояние расстояние.

Код для дистанции Минковского:

def calculateMinkowskiDistances(compArray, queryArray, alpha):
 “””
 Computes Euclidean distance-
 :param compArray: takes in 2d array i.e. training dataset 
 :param queryArray: takes in 1d array i.e. instance of test dataset
 :param alpha: this value allow us to play with multiple values in which 1 =manhattan distance and 2= euclidean distance
 :return: sqrtArray :distance between the querry point and each point in training dataset
 sortedIndex : sorted index based on the distance between the querry point and each point in training dataset
 “””
 subArray =np.subtract(compArray,queryArray)
 np.absolute(subArray)
 powArray = subArray**alpha
 sumArray = np.sum(powArray,axis =1)
 sqrtArray = np.power(sumArray, (1./float(alpha)))
 #sorts index of array based on respective location value
 sortedIndex = np.argsort(sqrtArray)
 return sqrtArray,sortedIndex

4. Взвешенное евклидово расстояние. Самым большим недостатком вышеупомянутой меры расстояния является то, что они не принимают во внимание, насколько далеко или близко расположены k-ближайшие соседи друг от друга, что приводит к ошибочной классификации на k- Модель NN. В k-NN, взвешенном по расстоянию, голоса каждого соседа накапливаются, и их вклад в голосование рассчитывается на основе расстояния от ближайшего соседа до точки тестовых данных, поэтому более близкие точки соседства больше влияют на предсказание класса. Математическая формула для вычисления взвешенного евклидова расстояния до точек данных x и y представлена ​​ниже:

Код для взвешенного евклидова расстояния:

def getWtPrediction(computedListValue, k, n): 
 “””
 This functions helps in generating prediction for each test data point-
 :param computedListValue: takes in list in which distance of that respective test point to all training datapoint are available
 :param k: It is hyper parameter which decides how many nearest neighbour should be kept in consideration while doing prediction.
 :param n: It is another hyper-parameter which decides the power to the inverse distance.
 :return: ndComputedList : which contains prediction based on the given input
 “””
 ndComputedList= np.array(computedListValue)
 ndComputedList.sort(axis=1)
 ndComputedList= ndComputedList[:, :k]
 ndComputedList = 1/pow(ndComputedList,n)
 ndComputedList = np.sum(ndComputedList, axis =1) 
 return ndComputedList

Гиперпараметры, связанные с каждым из вариантов k-NN на основе меры расстояния, представлены ниже:

  1. Евклидово расстояние: k обозначает количество кластеров в наборе данных.

2. Манхэттенское расстояние: k обозначает количество кластеров в наборе данных.

3. Расстояние Минковского: «k» обозначает количество кластеров в наборе данных. «альфа» обозначает целое число, регулирующее меру расстояния.

4. Взвешенное евклидово расстояние: k обозначает количество кластеров в наборе данных. «n» обозначает вклад ближайшего соседа в зависимости от расстояния между ними.

Варианты k-NN и наблюдение гиперпараметров:

Варианты k-NN оцениваются по гиперпараметру, как описано выше. Для более чем одного гиперпараметра тест был усовершенствован, чтобы включить ParameterGrid из библиотеки sklearn для оптимизации поиска по сетке. Ниже мы визуализируем гиперпараметры, связанные с различными мерами расстояния и точностью.

  1. Евклидово расстояние на основе k-NN:

Поскольку существует только один гиперпараметр при использовании евклидова расстояния. Поэтому диаграмма разброса ‘k’ относительно точности показана ниже:

2. Манхэттенское расстояние на основе k-NN:

Поскольку при использовании манхэттенского расстояния существует только один гиперпараметр. Поэтому диаграмма разброса ‘k’ относительно точности показана ниже:

3. Расстояние Минковского на основе k-NN:

Поскольку существует два гиперпараметра при использовании расстояния Минковского. Поэтому диаграмма разброса «k» и «альфа» относительно точности показана ниже:

4. Взвешенное евклидово расстояние на основе k-NN:

Поскольку существует два гиперпараметра при использовании расстояния Минковского. Поэтому диаграмма разброса ‘k’ и ‘n’ относительно точности показана ниже:

Варианты k-NN Общее наблюдение:

Здесь, в этом разделе, оценивается лучшая производительность вариантов k-NN.

Визуализируем то же самое на гистограмме:

Вывод:

Из вышеизложенного наблюдения можно сделать вывод, что матрица на основе взвешенного евклидова расстояния действительно хорошо работает для прогнозирования серьезности (доброкачественной или злокачественной) маммографического массового поражения на основе атрибутов BI-RADS и возраста пациента.

Ссылки:

Курс Практическое машинное обучение от CIT:

Ссылка на набор данных: https://archive.ics.uci.edu/ml/datasets/Mammographic+Mass

Ссылка на код: https://github.com/praveenjoshi01/cork-institute-of-technology-Practical-Machine-Learning/blob/master/Predicting%20the%20severity%20of%20a% 20mammographic% 20mass% 20lesion / Predicting% 20the% 20severity% 20of% 20a% 20mammographic% 20mass% 20lesion.py