入侵检测

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38273578/article/details/80899956

文本预处理


合并稀疏特征


  • service的某些属性值会恒对应某一种攻击类型
  • 这些特征值对应的攻击类型相同,说明这些特征之间是不存在区别的,合并属性值可以降低计算成本和错误分类的可能性
def merge_sparse_feature(df):
    df.loc[(df['service'] == 'ntp_u')
           | (df['service'] == 'urh_i')
           | (df['service'] == 'tftp_u')
           | (df['service'] == 'red_i')
    , 'service'] = 'normal_service_group'

    df.loc[(df['service'] == 'pm_dump')
           | (df['service'] == 'http_2784')
           | (df['service'] == 'harvest')
           | (df['service'] == 'aol')
           | (df['service'] == 'http_8001')
    , 'service'] = 'satan_service_group'
    return df

One-hot编码


  • 模型一般默认是连续型数值进行处理
  • 需要把离散性特征数字化,算法才可以处理
  • 决策树这种不计算距离的,可以用1,2,3,4……进行转换
  • SVM、逻辑回归不仅需要将离散特征转化为连续特征,也需要保证不同取值之间的距离是相等的
  • 什么是独热编码?
protocol_type 取值1 取值2
tcp 1 001
icmp 2 010
udp 3 100

- 既保证了离散特征转化为连续特征,也保证了不同取值之间的距离相等
- 采用独热编码对protocol_type、service、flag用来处理离散特征

def one_hot(df):
    service_one_hot = pd.get_dummies(df["service"])
    df = df.drop('service', axis=1)
    df = df.join(service_one_hot)
    if 'icmp' in df.columns:
        df = df.drop('icmp', axis=1)

    protocol_type_one_hot = pd.get_dummies(df["protocol_type"])
    df = df.drop('protocol_type', axis=1)
    df = df.join(protocol_type_one_hot)

    flag_type_one_hot = pd.get_dummies(df["flag"])
    df = df.drop('flag', axis=1)
    df = df.join(flag_type_one_hot)
    return df

五分类


37种攻击类别综合为4种大的攻击类别

提取主成分


独热编码会提高数据集的维数
将42维变为了115维
降维:通过随机森林进行选取44个显著特征

训练集去均值和方差归一化


  • 去均值和方差归一化?
  • 消除大数吃小数的问题,并且一定程度上可以加速训练所以对每个算法的文本预处理部分都进行了去均值和方差归一化
  • 去均值就是将数据减去平均值,即进行中心化处理
  • 归一化保证所有的维度上数据都在一个变化幅度上
Standarder = StandardScaler().fit(X)
X = Standarder.transform(X)

猜你喜欢

转载自blog.csdn.net/qq_38273578/article/details/80899956