1. 程式人生 > >檢測使用者命令序列異常——使用LSTM分類演算法【使用樸素貝葉斯,類似垃圾郵件分類的做法也可以,將命令序列看成是垃圾郵件】

檢測使用者命令序列異常——使用LSTM分類演算法【使用樸素貝葉斯,類似垃圾郵件分類的做法也可以,將命令序列看成是垃圾郵件】

# -*- coding:utf-8 -*-

import sys

import re
import numpy as np


import nltk
import csv
import matplotlib.pyplot as plt
from nltk.probability import FreqDist
from sklearn.feature_extraction.text import CountVectorizer

from sklearn import cross_validation
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb
import tflearn

#測試樣本數
N=80

def load_user_cmd_new(filename):
    cmd_list=[]
    dist=[]
    with open(filename) as f:
        i=0
        x=[]
        for line in f:
            line=line.strip('\n')
            x.append(line)
            dist.append(line)
            i+=1
            if i == 100:
                cmd_list.append(x)
                x=[]
                i=0

    fdist = FreqDist(dist).keys()
    return cmd_list,fdist

def load_user_cmd(filename):
    cmd_list=[]
    dist_max=[]
    dist_min=[]
    dist=[]
    with open(filename) as f:
        i=0
        x=[]
        for line in f:
            line=line.strip('\n')
            x.append(line)
            dist.append(line)
            i+=1
            if i == 100:
                cmd_list.append(x)
                x=[]
                i=0

    fdist = FreqDist(dist).keys()
    dist_max=set(fdist[0:50])
    dist_min = set(fdist[-50:])
    return cmd_list,dist_max,dist_min

def get_user_cmd_feature(user_cmd_list,dist_max,dist_min):
    user_cmd_feature=[]
    for cmd_block in user_cmd_list:
        f1=len(set(cmd_block))
        fdist = FreqDist(cmd_block).keys()
        f2=fdist[0:10]
        f3=fdist[-10:]
        f2 = len(set(f2) & set(dist_max))
        f3=len(set(f3)&set(dist_min))
        x=[f1,f2,f3]
        user_cmd_feature.append(x)
    return user_cmd_feature

def get_user_cmd_feature_new(user_cmd_list,dist):
    user_cmd_feature=[]
    for cmd_list in user_cmd_list:
        x=[]
        for cmd in  cmd_list:
            v = [0] * len(dist)
            for i in range(0, len(dist)):
                if cmd == dist[i]:
                    v[i] = 1
            x.append(v)
        user_cmd_feature.append(x)
    return user_cmd_feature

def get_label(filename,index=0):
    x=[]
    with open(filename) as f:
        for line in f:
            line=line.strip('\n')
            x.append( int(line.split()[index]))
    return x


def do_knn(x_train,y_train,x_test,y_test):
    neigh = KNeighborsClassifier(n_neighbors=3)
    neigh.fit(x_train, y_train)
    y_predict=neigh.predict(x_test)
    score = np.mean(y_test == y_predict) * 100

    print  score


def do_rnn(x_train,x_test,y_train,y_test):
    global n_words
    # Data preprocessing
    # Sequence padding
    print "GET n_words embedding %d" % n_words


    #x_train = pad_sequences(x_train, maxlen=100, value=0.)
    #x_test = pad_sequences(x_test, maxlen=100, value=0.)
    # Converting labels to binary vectors
    y_train = to_categorical(y_train, nb_classes=2)
    y_test = to_categorical(y_test, nb_classes=2)

    # Network building
    net = tflearn.input_data(shape=[None, 100,n_words])
    net = tflearn.lstm(net, 10,  return_seq=True)
    net = tflearn.lstm(net, 10, )
    net = tflearn.fully_connected(net, 2, activation='softmax')
    net = tflearn.regression(net, optimizer='adam', learning_rate=0.1,name="output",
                             loss='categorical_crossentropy')

    # Training

    model = tflearn.DNN(net, tensorboard_verbose=3)
    model.fit(x_train, y_train, validation_set=(x_test, y_test), show_metric=True,
             batch_size=32,run_id="maidou")


if __name__ == '__main__':
    user_cmd_list,dist=load_user_cmd_new("../data/MasqueradeDat/User7")
    #print  "Dist:(%s)" % dist
    n_words=len(dist)
    user_cmd_feature=get_user_cmd_feature_new(user_cmd_list,dist)

    labels=get_label("../data/MasqueradeDat/label.txt",6)
    y=[0]*50+labels

    x_train=user_cmd_feature[0:N]
    y_train=y[0:N]

    x_test=user_cmd_feature[N:150]
    y_test=y[N:150]

    #print x_train

    do_rnn(x_train,x_test,y_train,y_test)

相關推薦

分類演算法樸素分類

原文http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html 0、寫在前面的話       我個人一直很喜歡演算法一類的東西,在我看

機器學習分類演算法樸素

一、概念 樸素貝葉斯模型(Naive Bayesian Model,NBM)是以條件概率為基礎的分類器,是一種監督演算法,常被用於文字分類和垃圾郵件過濾。貝葉斯理論解決的是逆向概率問題,即通過已經發生的已知的概率來推測未發生的事將會發生的概率。    二、計算 樸素貝葉斯各個事件發

分類演算法樸素NB

演算法原理 設x={a1,a2,a3,...,am}為一個待分類項,aj為x的一個特徵屬性。 c={y1,y2,...,yn}為類別的集合 那麼計算x所屬的類別就是計算:已知x,求P(yi|x)。哪一種類別yi使P(yi|x)最大,x就屬

分類演算法樸素演算法

一、問題的提出 使用Wikipedia上的一個例子: “一所學校裡面有 60% 的男生,40% 的女生。男生總是穿長褲,女生則一半穿長褲一半穿裙子。有了這些資訊之後我們可以容易地計算“隨機選取一個學生,他(她)穿長褲的概率和穿裙子的概率是多大”,這個就是前面說的“正向概率”

機器學習-分類演算法樸素

條件概率公式:P(A|B) = P(AB)/P(B) 貝葉斯定理:P(A|B) = P(B|A)P(A)/P(B) 樸素貝葉斯演算法思想:給定一個待分類的資料 X={a1,a2,……,aN},即N個特徵項,目標分類集合Y={y1,y2,……,yK},即有K個分類 通過計算P

資料探勘十大經典演算法(九) 樸素分類器 Naive Bayes

分類演算法--------貝葉斯定理: 樸素貝葉斯的基本思想:對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別。 可以看到,整個樸素貝葉斯分類分為三個階段:       第一階段——準備工作階段,這個階段的任務是為樸

資料探勘經典演算法總結-樸素分類

貝葉斯定理(Bayes theorem),是概率論中的一個結果,它跟隨機變數的條件概率以及邊緣概率分佈有關。在有些關於概率的解說中,貝葉斯定理(貝葉斯更新)能夠告知我們如何利用新證據修改已有的看法。 通常,事件A在事件B(發生)的條件下的概率,與事件B在事件A的條件下的概率

機器學習經典演算法樸素分類

很多人都聽說過貝葉斯原理,在哪聽說過?基本上是在學概率統計的時候知道的。有些人可能會說,我記不住這些概率論的公式,沒關係,我儘量用通俗易懂的語言進行講解。 /*請尊重作者勞動成果,轉載請標明原文連結:*/ /* https://www.cnblogs.com/jpcflyer/p/11069659

利用sklearn 樸素進行評論短語的分類

功能: 對評論短語,比如一個文章下的評論短語進行分類通過或者刪除,也就是是垃圾 、不是垃圾。 工具: Spyder,jieba分詞,numpy,joblib,sklearn 程式: # -*- coding: utf-8 -*- """ Created on Mon May 14 10

機器學習--樸素與SVM進行病情分類預測

     貝葉斯定理由英國數學家托馬斯.貝葉斯(Thomas Baves)在1763提出,因此得名貝葉斯定理。貝葉斯定理也稱貝葉斯推理,是關於隨機事件的條件概率的一則定理。 對於兩個事件A和B,事件A發生則B也發生的概率記為P(B|A),事件B發生則A也發生的概率記為P

基於樸素算法的情感分類

set 求最大值 記錄 變焦 def ... rop ros 結果 環境 win8, python3.7, jupyter notebook 正文 什麽是情感分析?(以下引用百度百科定義) 情感分析(Sentiment analysis),又稱傾向性分析,意見抽取(Opi

python實現隨機森林、邏輯回歸和樸素的新聞文本分類

ati int ces 平滑 讀取 inf dict http tor 實現本文的文本數據可以在THUCTC下載也可以自己手動爬蟲生成, 本文主要參考:https://blog.csdn.net/hao5335156/article/details/82716923 nb表

基於邏輯迴歸/決策樹/隨機森林/多層感知分類器/xgboost/樸素分類的資訊多分類效能對比

在上一篇(https://blog.csdn.net/baymax_007/article/details/82748544)中,利用邏輯迴歸實現資訊多分類。本文在之前基礎上,又引入決策樹、隨機森林、多層感知分類器、xgboost和樸素貝葉斯分類演算法,並對驗證集和測試集分類

《機器學習西瓜書》學習筆記——第七章_分類器_樸素分類

樸素:特徵條件獨立;貝葉斯:基於貝葉斯定理。 樸素貝葉斯是經典的機器學習演算法之一,也基於概率論的分類演算法,屬於監督學習的生成模型。樸素貝葉斯原理簡單,也很容易實現,多用於文字分類,比如垃圾郵件過濾。 1.演算法思想——基於概率的預測 貝葉斯決策論是概率框架下

機器學習(3):基於概率論的分類方法:樸素

概述 優點:在資料較少的情況下仍然有效,可以處理多類別問題。 缺點:對於輸入資料的準備方式較為敏感。 使用資料型別:標稱型資料。 貝葉斯決策理論的核心思想:選擇具有最高概率的決策。 使用條件概率來分類 對於某個資料點x,y: 如果,那麼屬於類別 如果,那麼屬於類

樸素(Naive Bayes)分類和Gaussian naive Bayes

樸素貝葉斯(Naive Bayes)   參考資料:https://www.cnblogs.com/pinard/p/6069267.html   樸素貝葉斯最關鍵的就是 (強制認為每種指標都是獨立的)。   不同於其它分類器,樸素貝葉斯是一種基於概率理論的分類

資料探勘領域十大經典演算法之—樸素演算法(超詳細附程式碼)

簡介 NaïveBayes演算法,又叫樸素貝葉斯演算法,樸素:特徵條件獨立;貝葉斯:基於貝葉斯定理。屬於監督學習的生成模型,實現簡單,沒有迭代,並有堅實的數學理論(即貝葉斯定理)作為支撐。在大量樣本下會有較好的表現,不適用於輸入向量的特徵條件有關聯的場景。 基本思想 (1)

機器學習實戰——基於概率論的分類方法:樸素(二)

                                      使用貝葉斯過濾垃圾郵件 1.準備資料:切分文字 將字串切分為詞列表時,倘若沒有split引數,則標點符號也會被當成詞的一部分,可以使用正則表示式來切分句子,其中分隔符是除了單詞,數字之外的任意字串

機器學習實戰—第4章:基於概率論的分類方法:樸素程式碼報錯(python3)

1、報錯:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xae in position 199: illegal multibyte sequence 原因:這是檔案編碼的問題,檔案中有非法的多位元組字元。 解決辦法:開啟Ch04\

機器學習演算法樸素(Naive Bayes)--第二篇

引言 這篇文章主要介紹將樸素貝葉斯模型應用到文字分類任務的技巧和方法。 詞袋模型(The Bag of Words Model) 對於機器學習演算法來說,特徵的選擇是一個很重要的過程。那麼如何從文字訓練集中選出好的特徵呢?在自然語言處理中,一個常見