Расчет расстояния для ближайшего среднего классификатора - PullRequest
1 голос
/ 23 марта 2019

Greetins,

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

Я знаю, что набор данных IRIS имеет 4 функции, и каждая запись классифицируется по 3 различным меткам.

Согласно некоторым учебникам, расчет может быть выполнен следующим образом:

enter image description here

Однако я теряюсь в этих различных обозначениях и в том, что означает это уравнение.Например, что такое s ^ 2 в уравнении?

1 Ответ

1 голос
/ 23 марта 2019

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

Однако вам не следует обращать на это внимание.Самый важный момент, когда приоры равны.Это справедливое предположение, которое означает, что вы ожидаете, что распределение каждого класса в вашем наборе данных примерно одинаково.Делая это, классификатор просто сводится к тому, чтобы найти наименьшее расстояние от обучающей выборки x до каждого из других классов, представленных их средними векторами.

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

Поскольку вы выбрали MATLAB в качестве языка, позвольте мне продемонстрировать фактический набор данных iris.

load fisheriris; % Load iris dataset
[~,~,id] = unique(species); % Assign for each example a unique ID
means = zeros(3, 4); % Store the mean vectors for each class
for i = 1 : 3 % Find the mean vectors per class
    means(i,:) = mean(meas(id == i, :), 1); % Find the mean vector for class 1
end

x = meas(10, :); % Choose a random row from the dataset

% Determine which class has the smallest distance and thus figure out the class
[~,c] = min(sum(bsxfun(@minus, x, means).^2, 2));

Коддовольно просто.Загрузите набор данных, и поскольку метки находятся в массиве ячеек, удобно создать новый набор меток, которые перечислены как 1, 2 и 3, чтобы было легко выделить примеры обучения для каждого класса и вычислить их средние векторы.Вот что происходит в цикле for.Как только это будет сделано, я выбираю случайную точку данных из обучающего набора, а затем вычисляю расстояние от этой точки до каждого из средних векторов.Мы выбираем класс, который дает нам наименьшее расстояние.

Если вы хотите сделать это для всего набора данных, вы можете, но для этого потребуется некоторая перестановка измерений.

data = permute(meas, [1 3 2]);
means_p = permute(means, [3 1 2]);
P = sum(bsxfun(@minus, data, means_p).^2, 3);
[~,c] = min(P, [], 2);

data и means_p - это преобразованные элементы и средние векторы, которые представляют собой трехмерную матрицу с одноэлементным измерением.Третья строка кода вычисляет векторизованные расстояния, так что в итоге она генерирует 2D-матрицу, в которой каждая строка i вычисляет расстояние от обучающего примера i до каждого из средних векторов.Наконец, мы находим класс с наименьшим расстоянием для каждого примера.

Чтобы получить представление о точности, мы можем просто вычислить долю от общего числа правильных классифицированных нами раз:

>> sum(c == id) / numel(id)

ans =

    0.9267

С этим простым классификатором ближайшего среднего мы имеем точность 92,67% ... неплохо, но вы можете добиться большего.Наконец, чтобы ответить на ваш вопрос, вам понадобится K * d вычисления расстояния, при этом K - это число примеров, а d - это количество классов.Вы можете ясно увидеть, что это требуется, изучив приведенную выше логику и код.

...