кластеризация и матлаб - PullRequest
       86

кластеризация и матлаб

9 голосов
/ 10 октября 2011

Я пытаюсь объединить некоторые данные из набора кубков KDD 1999

вывод из файла выглядит так:

0,tcp,http,SF,239,486,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0.00,0.00,0.00,0.00,1.00,0.00,0.00,19,19,1.00,0.00,0.05,0.00,0.00,0.00,0.00,0.00,normal.

с 48 тысячами различных записей в этом формате. Я очистил данные и удалил текст, сохранив только цифры. Вывод теперь выглядит так:

enter image description here

Я создал файл с разделителями-запятыми в Excel и сохранил как CSV-файл, затем создал источник данных из CSV-файла в Matlab, я попытался запустить его через набор инструментов FCM в Matlab (findcluster выводит 38 типов данных, что ожидается с 38 колонны).

Однако кластеры не похожи на кластеры или не принимают и не работают так, как мне нужно.

Может ли кто-нибудь помочь найти кластеры? Я новичок в Matlab, так что не имею никакого опыта, и я также новичок в кластеризации.

Метод:

  1. Выберите количество кластеров (K)
  2. Инициализация центроидов (K образцов, случайно выбранных из набора данных)
  3. Назначить каждый шаблон кластеру с ближайшим центроидом
  4. Рассчитать среднее значение каждого кластера, чтобы он стал новым центроидом
  5. Повторять шаг 3 до тех пор, пока не будут выполнены критерии остановки (шаблон не перемещается в другой кластер)

Вот чего я пытаюсь достичь:

enter image description here

Вот что я получаю:

enter image description here

load kddcup1.dat
plot(kddcup1(:,1),kddcup1(:,2),'o')  
[center,U,objFcn] = fcm(kddcup1,2);
Iteration count = 1, obj. fcn = 253224062681230720.000000
Iteration count = 2, obj. fcn = 241493132059137410.000000
Iteration count = 3, obj. fcn = 241484544542298110.000000
Iteration count = 4, obj. fcn = 241439204971005280.000000
Iteration count = 5, obj. fcn = 241090628742523840.000000
Iteration count = 6, obj. fcn = 239363408546874750.000000
Iteration count = 7, obj. fcn = 238580863900727680.000000
Iteration count = 8, obj. fcn = 238346826370420990.000000
Iteration count = 9, obj. fcn = 237617756429912510.000000
Iteration count = 10, obj. fcn = 226364785036628320.000000
Iteration count = 11, obj. fcn = 94590774984961184.000000
Iteration count = 12, obj. fcn = 2220521449216102.500000
Iteration count = 13, obj. fcn = 2220521273191876.200000
Iteration count = 14, obj. fcn = 2220521273191876.700000
Iteration count = 15, obj. fcn = 2220521273191876.700000

figure
plot(objFcn)
title('Objective Function Values')
xlabel('Iteration Count')
ylabel('Objective Function Value')

    maxU = max(U);
    index1 = find(U(1, :) == maxU);
    index2 = find(U(2, :) == maxU);
    figure
    line(kddcup1(index1, 1), kddcup1(index1, 2), 'linestyle',...
    'none','marker', 'o','color','g');
    line(kddcup1(index2,1),kddcup1(index2,2),'linestyle',...
    'none','marker', 'x','color','r');
    hold on
    plot(center(1,1),center(1,2),'ko','markersize',15,'LineWidth',2)
    plot(center(2,1),center(2,2),'kx','markersize',15,'LineWidth',2)

1 Ответ

12 голосов
/ 11 октября 2011

Поскольку вы новичок в машинном обучении / интеллектуальном анализе данных, вам не следует заниматься такими сложными проблемами.В конце концов, данные, с которыми вы работаете, использовались на соревнованиях (KDD Cup'99), поэтому не ожидайте, что это будет легко!

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

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

Для начала вам нужно нормализовать атрибуты, чтобыбыть такого же масштаба: при вычислении евклидова расстояния как части шага 3 в вашем методе функции со значениями, такими как 239 и 486, будут доминировать над другими функциями с небольшими значениями, такими как 0.05, тем самым нарушаярезультат.

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

Наконец, я предлагаю вам ознакомиться с более простым набором данных ...

...