2016-02-17 2 views
1

У меня есть следующий результат от weka по классификации SVM. Я хотел построить вывод классификатора SVM в аномалии или в обычном режиме. Как можно получить SVM scoring function из этого вывода?SVM - функция подсчета очков

=== Запуск === информация

Scheme:  weka.classifiers.functions.SMO -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V -1 -W 1 -K "weka.classifiers.functions.supportVector.PolyKernel -E 1.0 -C 250007" 
Relation:  KDDTrain 
Instances: 125973 
Attributes: 42 
       duration 
       protocol_type 
       service 
       flag 
       src_bytes 
       dst_bytes 
       land 
       wrong_fragment 
       urgent 
       hot 
       num_failed_logins 
       logged_in 
       num_compromised 
       root_shell 
       su_attempted 
       num_root 
       num_file_creations 
       num_shells 
       num_access_files 
       num_outbound_cmds 
       is_host_login 
       is_guest_login 
       count 
       srv_count 
       serror_rate 
       srv_serror_rate 
       rerror_rate 
       srv_rerror_rate 
       same_srv_rate 
       diff_srv_rate 
       srv_diff_host_rate 
       dst_host_count 
       dst_host_srv_count 
       dst_host_same_srv_rate 
       dst_host_diff_srv_rate 
       dst_host_same_src_port_rate 
       dst_host_srv_diff_host_rate 
       dst_host_serror_rate 
       dst_host_srv_serror_rate 
       dst_host_rerror_rate 
       dst_host_srv_rerror_rate 
       class 
Test mode: 10-fold cross-validation 

=== модель Классификатор (полный комплект обучения) ===

SMO 

Kernel used: 
    Linear Kernel: K(x,y) = <x,y> 

Classifier for classes: normal, anomaly 

BinarySMO 

Machine linear: showing attribute weights, not support vectors. 

     -0.0498 * (normalized) duration 
+  0.5131 * (normalized) protocol_type=tcp 
+  -0.6236 * (normalized) protocol_type=udp 
+  0.1105 * (normalized) protocol_type=icmp 
+  -1.1861 * (normalized) service=auth 
+  0  * (normalized) service=bgp 
+  0  * (normalized) service=courier 
+  1  * (normalized) service=csnet_ns 
+  1  * (normalized) service=ctf 
+  1  * (normalized) service=daytime 
+  -0  * (normalized) service=discard 
+  -1.2505 * (normalized) service=domain 
+  -0.6878 * (normalized) service=domain_u 
+  0.9418 * (normalized) service=echo 
+  1.1964 * (normalized) service=eco_i 
+  0.9767 * (normalized) service=ecr_i 
+  0.0073 * (normalized) service=efs 
+  0.0595 * (normalized) service=exec 
+  -1.4426 * (normalized) service=finger 
+  -1.047 * (normalized) service=ftp 
+  -1.4225 * (normalized) service=ftp_data 
+  2  * (normalized) service=gopher 
+  1  * (normalized) service=hostnames 
+  -0.9961 * (normalized) service=http 
+  0.7255 * (normalized) service=http_443 
+  0.5128 * (normalized) service=imap4 
+  -6.3664 * (normalized) service=IRC 
+  1  * (normalized) service=iso_tsap 
+  -0  * (normalized) service=klogin 
+  0  * (normalized) service=kshell 
+  0.7422 * (normalized) service=ldap 
+  1  * (normalized) service=link 
+  0.5993 * (normalized) service=login 
+  1  * (normalized) service=mtp 
+  1  * (normalized) service=name 
+  0.2322 * (normalized) service=netbios_dgm 
+  0.213 * (normalized) service=netbios_ns 
+  0.1902 * (normalized) service=netbios_ssn 
+  1.1472 * (normalized) service=netstat 
+  0.0504 * (normalized) service=nnsp 
+  1.058 * (normalized) service=nntp 
+  -1  * (normalized) service=ntp_u 
+  -1.5344 * (normalized) service=other 
+  1.3595 * (normalized) service=pm_dump 
+  0.8355 * (normalized) service=pop_2 
+  -2  * (normalized) service=pop_3 
+  0  * (normalized) service=printer 
+  1.051 * (normalized) service=private 
+  -0.3082 * (normalized) service=red_i 
+  1.0034 * (normalized) service=remote_job 
+  1.0112 * (normalized) service=rje 
+  -1.0454 * (normalized) service=shell 
+  -1.6948 * (normalized) service=smtp 
+  0.1388 * (normalized) service=sql_net 
+  -0.3438 * (normalized) service=ssh 
+  1  * (normalized) service=supdup 
+  0.8756 * (normalized) service=systat 
+  -1.6856 * (normalized) service=telnet 
+  -0  * (normalized) service=tim_i 
+  -0.8579 * (normalized) service=time 
+  -0.726 * (normalized) service=urh_i 
+  -1.0285 * (normalized) service=urp_i 
+  1.0347 * (normalized) service=uucp 
+  0  * (normalized) service=uucp_path 
+  0  * (normalized) service=vmnet 
+  1  * (normalized) service=whois 
+  -1.3388 * (normalized) service=X11 
+  0  * (normalized) service=Z39_50 
+  1.7882 * (normalized) flag=OTH 
+  -3.0982 * (normalized) flag=REJ 
+  -1.7279 * (normalized) flag=RSTO 
+  1  * (normalized) flag=RSTOS0 
+  2.4264 * (normalized) flag=RSTR 
+  1.5906 * (normalized) flag=S0 
+  -1.952 * (normalized) flag=S1 
+  -0.9628 * (normalized) flag=S2 
+  -0.3455 * (normalized) flag=S3 
+  1.2757 * (normalized) flag=SF 
+  0.0054 * (normalized) flag=SH 
+  0.8742 * (normalized) src_bytes 
+  0.0542 * (normalized) dst_bytes 
+  -1.2659 * (normalized) land=1 
+  2.7922 * (normalized) wrong_fragment 
+  0.0662 * (normalized) urgent 
+  8.1153 * (normalized) hot 
+  2.4822 * (normalized) num_failed_logins 
+  0.2242 * (normalized) logged_in=1 
+  -0.0544 * (normalized) num_compromised 
+  0.9248 * (normalized) root_shell 
+  -2.363 * (normalized) su_attempted 
+  -0.2024 * (normalized) num_root 
+  -1.2791 * (normalized) num_file_creations 
+  -0.0314 * (normalized) num_shells 
+  -1.4125 * (normalized) num_access_files 
+  -0.0154 * (normalized) is_host_login=1 
+  -2.3307 * (normalized) is_guest_login=1 
+  4.3191 * (normalized) count 
+  -2.7484 * (normalized) srv_count 
+  -0.6276 * (normalized) serror_rate 
+  2.843 * (normalized) srv_serror_rate 
+  0.6105 * (normalized) rerror_rate 
+  3.1388 * (normalized) srv_rerror_rate 
+  -0.1262 * (normalized) same_srv_rate 
+  -0.1825 * (normalized) diff_srv_rate 
+  0.2961 * (normalized) srv_diff_host_rate 
+  0.7812 * (normalized) dst_host_count 
+  -1.0053 * (normalized) dst_host_srv_count 
+  0.0284 * (normalized) dst_host_same_srv_rate 
+  0.4419 * (normalized) dst_host_diff_srv_rate 
+  1.384 * (normalized) dst_host_same_src_port_rate 
+  0.8004 * (normalized) dst_host_srv_diff_host_rate 
+  0.2301 * (normalized) dst_host_serror_rate 
+  0.6401 * (normalized) dst_host_srv_serror_rate 
+  0.6422 * (normalized) dst_host_rerror_rate 
+  0.3692 * (normalized) dst_host_srv_rerror_rate 
-  2.5266 

Number of kernel evaluations: -1049600465 

прогнозирования Выход - выход образца

inst#  actual predicted error prediction 
     1 1:normal 1:normal  1 
     2 1:normal 1:normal  1 
     3 2:anomaly 2:anomaly  1 
     4 1:normal 1:normal  1 
     5 1:normal 1:normal  1 
     6 2:anomaly 2:anomaly  1 
     7 2:anomaly 2:anomaly  1 
     8 2:anomaly 2:anomaly  1 
     9 2:anomaly 2:anomaly  1 
     10 2:anomaly 2:anomaly  1 
     11 2:anomaly 2:anomaly  1 
     12 2:anomaly 2:anomaly  1 
     13 1:normal 1:normal  1 
     14 2:anomaly 1:normal + 1 
     15 2:anomaly 2:anomaly  1 
     16 2:anomaly 2:anomaly  1 
     17 1:normal 1:normal  1 
     18 2:anomaly 2:anomaly  1 
     19 1:normal 1:normal  1 
     20 1:normal 1:normal  1 
     21 2:anomaly 2:anomaly  1 
     22 2:anomaly 2:anomaly  1 
     23 1:normal 1:normal  1 
     24 1:normal 1:normal  1 
     25 2:anomaly 2:anomaly  1 
     26 1:normal 1:normal  1 
     27 2:anomaly 2:anomaly  1 
     28 1:normal 1:normal  1 
     29 1:normal 1:normal  1 
     30 1:normal 1:normal  1 
     31 2:anomaly 2:anomaly  1 
     32 2:anomaly 2:anomaly  1 
     33 1:normal 1:normal  1 
     34 2:anomaly 2:anomaly  1 
     35 1:normal 1:normal  1 
     36 1:normal 1:normal  1 
     37 1:normal 1:normal  1 
     38 2:anomaly 2:anomaly  1 
     39 1:normal 1:normal  1 
     40 2:anomaly 2:anomaly  1 
     41 2:anomaly 2:anomaly  1 
     42 2:anomaly 2:anomaly  1 
     43 1:normal 1:normal  1 
     44 1:normal 1:normal  1 
     45 1:normal 1:normal  1 
     46 2:anomaly 2:anomaly  1 
     47 2:anomaly 2:anomaly  1 
     48 1:normal 1:normal  1 
     49 2:anomaly 1:normal + 1 
     50 2:anomaly 2:anomaly  1 

=== Детальная точность по классам ===

    TP Rate FP Rate Precision Recall F-Measure MCC  ROC Area PRC Area Class 
       0.986 0.039 0.967  0.986 0.976  0.948 0.973  0.960  normal 
       0.961 0.014 0.983  0.961 0.972  0.948 0.973  0.963  anomaly 
Weighted Avg. 0.974 0.028 0.974  0.974 0.974  0.948 0.973  0.962 

=== Путаница Матрица ===

 a  b <-- classified as 
66389 954 |  a = normal 
    2301 56329 |  b = anomaly 
+0

Думаю, вам нужно что-то прояснить для нас. Вы продолжаете спрашивать, как это сделать. Тем не менее, вы не описали, как вы представляете этот сюжет для конечного пользователя. Какие оси вы намерены использовать, какой стиль сюжета (скажем, график против гистограммы) и т. Д. – Prune

+0

@Prune, мне жаль, но я хочу построить график как один из следующих. Все, что я хотел сделать, это «аномалия против обычного» https://www.google.com/search?д = SVM + классификация и BIW = 1440 & БиГ = 766 & TBM = Isch & ТВО = и & источник = унив & са = X & вед = 0ahUKEwjo6JKD77XKAhXrkXIKHROaB9sQsAQIPQ # TBM = Isch & TBS = rimg% 3ACdbcxyvUpMdlIjgYq01Ia4ffgaYcnN1DdvlIn8jdcWX5BPst51OmvolMKGPDOnPa7fH6G4A6Aefujktjb9GxIkiZnioSCRirTUhrh9-BEZtX4ldeByD9KhIJphyc3UN2-UgR9uTgU_1GWh1gqEgmfyN1xZfkE-xGOGDZ02A8sgSoSCS3nU6a-iUwoEbECmqMAfc_1-KhIJY8M6c9rt8foR5ONB3_1dzUWIqEgkbgDoB5-6OSxEF-rUr573v4CoSCWNv0bEiSJmeEQpLfLC9Vtot & д = SVM% 20classification – Brown

+0

Я понимаю, что вы хотят иметь, скажем, зеленые круги для «нормального» и красного X для «ненормального»; но что вы представляете для физического размещения этих символов? Изображения на этом сайте - это 2D и 3D-примеры. У вас есть 42 размера, 3 из которых являются предметами классификации. Я пока не понимаю, как «одна из следующих» карт в ваш набор данных. – Prune

ответ

2

Этот выход является функция оценки. Прочитайте знак равенства как простой булевой оператор, оценивая значение 1 для true, 0 для false. Таким образом, из всех вариантов классификационных атрибутов только один из коэффициентов будет влиять на значение оценки.

Например, давайте рассмотрим только первые три атрибута, с этими нормированных входов и результирующие значения:

duration  2.0  -0.0498 * 2.0 => -0.0996 
protocol_type icmp  0.1105 
service  eco_i 1.1964 

Обратите внимание, что другой protocol_type и услуг термины (например,

-0,6236 * protocol_type = udp

) имеют сравнения, которые оцениваются до 0 (protocol_type = upd становится), поэтому эти коэффициенты не влияют на общую сумму.

Из этих трех атрибутов оценка до сих пор является суммой этих трех терминов, или 1.2073. Продолжайте с другими 39 атрибутами, плюс константа -2.5266 в конце, и есть оценка вашего вектора.

Это объясняет это достаточно хорошо?


Критическая фраза в блоге вы процитировать это:

если выход функции выигрыша является отрицательным, то вход классифицируются как принадлежащие к классу у = -1. Если оценка положительна, вход классифицируется как принадлежащий к классу у = 1.

Да, это так просто: реализовать эту хорошую, линейную функцию подсчета очков (42 переменных, 116 терминов). Подключите вектор. Если функция оказывается положительной, вектор является нормальным; если он встречается отрицательно, вектор является аномалией.

Да, ваша модель значительно длиннее, чем пример блога. Этот пример основан на двух непрерывных функциях; у вас есть 42 функции, три из которых являются классификационными особенностями (следовательно, дополнительные 73 терминов). Пример имеет 3 вектора поддержки; у вас будет 43 (для N измерений требуются векторы поддержки N + 1). Однако даже эта 42-мерная модель работает по тому же принципу: положительный = нормальный, отрицательный = аномалия.


Что касается Вашего желания к карте на 2-мерное изображение ... это возможно ... но я не знаю, что вы найдете содержательной в данном случае. Отображение 42 переменных в 3 создает много заторов в нашем пространстве. Я видел некоторые интересные трюки здесь и там, особенно с градиентными полями, где векторы силы находятся в той же пространственной интерпретации, что и точки данных. Погодной карте удается представить координаты x, y, z измерения, добавляя скорость ветра (3D), облачный покров и, возможно, пару других показателей на дисплее. Это может быть 10 символических размеров.

В вашем случае мы могли бы просто отбросить размеры с коэффициентами меньше 0,07 как несущественные; который сохраняет 6 функций. Три классификации, которые мы могли бы представить с цветом, пунктиром/пунктиром/сплошным символом и крошечным наложением текста на O или X (нормальные/аномальные данные). Это 9 без использования декартовой позиции (x, y, z координат, предполагая, что сюжет имеет смысл в 3D).

Однако, я не знаю ваших данных достаточно хорошо, чтобы предложить, где мы могли бы перерезать оставшиеся 33 функции в 2 или 3 измерения. Можете ли вы каким-то образом объединить все эти входы? Ли линейная комбинация нескольких функций дает вам результат, который по-прежнему имеет смысл в прогнозировании?

Если нет, то мы придерживаемся канонического подхода: выбираем интересные комбинации функций (обычно пары). Постройте график для каждого, полностью игнорируя остальные функции. Если ни один из них не имеет визуального смысла ... есть наш ответ: нет, мы не сможем хорошо построить данные. Извините, но реальность часто делает это для нас в сложной среде, и мы обрабатываем данные в таблицах, корреляциях и других методах. Мы можем использовать с нашими 3D-умами.

+0

Ваш ответ очень ясен. Но формула в этом блоге, похоже, меня смущает. Все, что я хочу, это построить svm для аномалии против нормального. Не могли бы вы посмотреть, как он это сделал в этом блоге и дать мне несколько советов? https://chrisjmccormick.wordpress.com/2013/04/16/trivial-svm-example/ – Brown

+0

Потому что 2.0 было значением, которое я полагал для продолжительности. Остальные атрибуты выбраны либо 1, либо 0, в зависимости от булевой оценки. Все функции от src_bytes до конца также будут иметь разные значения (не 0 или 1) – Prune

+0

Да. Для каждой строки вы суммируете условия уравнения оценки. Обратите внимание, что вам необходимо нормализовать входные данные. И ВАКА дает вам эту трансформацию? Если нет, вы можете поменять код, чтобы пересчитать его. – Prune

2

Тип причины не совсем другой, но я думаю, он может решить вашу основную проблему. Я предполагаю, что вы использовали Weka Explorer для создания модели. Если вы перейдете на страницу Classify tab, нажмите на More опции ... и поставьте галочку Output predictions. Вы получаете вероятности каждой классификации. Это позволит вам построить нормальный vs. ненормального

Для iris я получаю что-то вроде

inst#, actual, predicted, error, probability distribution 
    1 3:Iris-vir 3:Iris-vir   0  0.333 *0.667 
    2 3:Iris-vir 3:Iris-vir   0  0.333 *0.667 
    3 3:Iris-vir 3:Iris-vir   0  0.333 *0.667 
    4 3:Iris-vir 3:Iris-vir   0  0.333 *0.667 
    5 3:Iris-vir 3:Iris-vir   0  0.333 *0.667 
    6 1:Iris-set 1:Iris-set   *0.667 0.333 0  
    7 1:Iris-set 1:Iris-set   *0.667 0.333 0  
    8 1:Iris-set 1:Iris-set   *0.667 0.333 0  
    9 1:Iris-set 1:Iris-set   *0.667 0.333 0  
    10 1:Iris-set 1:Iris-set   *0.667 0.333 0  

Он содержит вероятность для каждого класса.

+0

Я не вижу выбора или что-то еще. Я добавляю экстракт для радужки в качестве ссылки. Единственное место, где я вижу 'select', - это для классификатора. – CAFEBABE

+0

НЕТ FN (False Negative) Показатели оценки на выходе, и я не знаю почему. Любые подсказки дорогие? – Brown

+0

Это есть. На выходе есть две строки. каждый из которых имеет TP/FP для одного класса. Если вы берете FP для первого класса, у вас есть FN для другого. Это может быть немного запутанным, но из-за того, что он должен обобщаться на мультиклассу. – CAFEBABE

Смежные вопросы