返回顶部
首页 > 资讯 > 后端开发 > Python >web安全之机器学习入门——3.2 决策
  • 161
分享到

web安全之机器学习入门——3.2 决策

入门机器web 2023-01-31 00:01:19 161人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录 简介 决策树简单用法 决策树检测P0P3爆破 决策树检测FTP爆破 随机森林检测FTP爆破   简介 决策树和随机森林算法是最常见的分类算法; 决策树,判断的逻辑很多时候和人的思维非常接近。 随机森林算法,利用多棵决策树对样本进行

目录

简介

决策树简单用法

决策树检测P0P3爆破

决策树检测FTP爆破

随机森林检测FTP爆破


 

简介

决策树和随机森林算法是最常见的分类算法;

决策树,判断的逻辑很多时候和人的思维非常接近。

随机森林算法,利用多棵决策树对样本进行训练并预测的一种分类器,并且其输出的类别是由个别决策树输出的类别的众数决定。


 

决策树简单用法

使用sklearn自带的iris数据集

# -*- coding: utf-8 -*-
from sklearn.datasets import load_iris
from sklearn import tree
import pydotplus
"""
如果报错GraphViz's executables not found,手动添加环境变量
"""
import os
os.environ["PATH"] += os.pathsep + 'D:/Program Files (x86)/Graphviz2.38/bin/' #注意修改你的路径

iris = load_iris()

clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)

#可视化训练得到的决策树
dot_data = tree.export_graphviz(clf, out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("../photo/6/iris.pdf")

 

 


 

决策树算法检测P0P3爆破

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

import re
from sklearn import cross_validation
from sklearn import tree
import pydotplus
import os
os.environ["PATH"] += os.pathsep + 'D:/Program Files (x86)/Graphviz2.38/bin/'  #注意修改你的路径

"""
收集并清洗数据
"""
def load_kdd99(filename):
    x=[]
    with open(filename) as f:
        for line in f:
            line=line.strip('\n')
            line=line.split(',')
            x.append(line)
    return x

def get_guess_passwdandNORMal(x):
    v=[]
    w=[]
    y=[]
"""
筛选标记为guess-passwd和normal且是P0P3协议的数据
"""
    for x1 in x:
        if ( x1[41] in ['guess_passwd.','normal.'] ) and ( x1[2] == 'pop_3' ):
            if x1[41] == 'guess_passwd.':
                y.append(1)
            else:
                y.append(0)
"""
特征化
挑选与p0p3密码破解相关的网络特征以及TCP协议内容的特征作为样本特征
"""
            x1 = [x1[0]] + x1[4:8]+x1[22:30]
            v.append(x1)
    for x1 in v :
        v1=[]
        for x2 in x1:
            v1.append(float(x2))
        w.append(v1)
    return w,y

if __name__ == '__main__':
    v=load_kdd99("../data/kddcup99/corrected")
    x,y=get_guess_passwdandNormal(v)
"""
训练样本
实例化决策树算法
"""
    clf = tree.DecisionTreeClassifier()
    #十折交叉验证
    print(cross_validation.cross_val_score(clf, x, y, n_jobs=-1, cv=10))

    clf = clf.fit(x, y)
    dot_data = tree.export_graphviz(clf, out_file=None)
    graph = pydotplus.graph_from_dot_data(dot_data)
    graph.write_pdf("../photo/6/iris-dt.pdf")

准确率达到99%

[ 0.98637602  1.          1.          1.          1.          1.          1.
  1.          1.          1.        ]

可视化结果


 

决策树算法检测FTP爆破

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

import re
import os
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import cross_validation
import os
from sklearn import tree
import pydotplus

"""

"""
def load_one_flle(filename):
    x=[]
    with open(filename) as f:
        line=f.readline()
        line=line.strip('\n')
    return line

"""
加载ADFA-LD中的正常样本数据
"""
def load_adfa_training_files(rootdir):
    x=[]
    y=[]
    list = os.listdir(rootdir)
    for i in range(0, len(list)):
        path = os.path.join(rootdir, list[i])
        if os.path.isfile(path):
            x.append(load_one_flle(path))
            y.append(0)
    return x,y

"""
定义遍历目录下文件的函数,作为load_adfa_hydra_ftp_files的子函数
"""
def dirlist(path, allfile):
    filelist = os.listdir(path)

    for filename in filelist:
        filepath = os.path.join(path, filename)
        if os.path.isdir(filepath):
            dirlist(filepath, allfile)
        else:
            allfile.append(filepath)
    return allfile

"""
从攻击数据集中筛选和FTP爆破相关的数据
"""
def load_adfa_hydra_ftp_files(rootdir):
    x=[]
    y=[]
    allfile=dirlist(rootdir,[])
    for file in allfile:
        """
        rootdir下有多个文件,多个文件里又有多个文件
        """
        if re.match(r"../data/ADFA-LD/Attack_Data_Master/Hydra_FTP_\d+\\UAD-Hydra-FTP*",file):
            x.append(load_one_flle(file))
            y.append(1)
    return x,y



if __name__ == '__main__':
    """
    特征化
    由于ADFA-LD数据集都记录了函数调用的序列,每个文件包含的函数调用序列的个数都不一致
    """
    x1,y1=load_adfa_training_files("../data/ADFA-LD/Training_Data_Master/")
    #x1{2184×833}  y1{833}
    x2,y2=load_adfa_hydra_ftp_files("../data/ADFA-LD/Attack_Data_Master/")
    #x2{524×162} y2{162}

    x=x1+x2
    y=y1+y2
    #x{2184×995} y{955}
    vectorizer = CountVectorizer(min_df=1)
    #min_df如果某个词的document frequence小于min_df,则这个词不会被当作关键词
    x=vectorizer.fit_transform(x)
    x=x.toarray()
    #x{142×955}
    #实例化决策树算法
    clf = tree.DecisionTreeClassifier()
    #效果验证
    print(cross_validation.cross_val_score(clf, x, y, n_jobs=-1, cv=10))


    clf = clf.fit(x, y)
    dot_data = tree.export_graphviz(clf, out_file=None)
    graph = pydotplus.graph_from_dot_data(dot_data)
    graph.write_pdf("../photo/6/ftp.pdf")
[ 1.          0.98019802  0.95        0.97979798  0.96969697  0.88888889
  0.98989899  0.95959596  0.92929293  0.95959596]

 

 


随机森林算法检测FTP爆破

# -*- coding:utf-8 -*-
#pydotplus只支持决策树 import re import os from sklearn.feature_extraction.text import CountVectorizer from sklearn import cross_validation import os from sklearn import tree from sklearn.ensemble import RandomForestClassifier import numpy as np def load_one_flle(filename): x=[] with open(filename) as f: line=f.readline() line=line.strip('\n') return line def load_adfa_training_files(rootdir): x=[] y=[] list = os.listdir(rootdir) for i in range(0, len(list)): path = os.path.join(rootdir, list[i]) if os.path.isfile(path): x.append(load_one_flle(path)) y.append(0) return x,y def dirlist(path, allfile): filelist = os.listdir(path) for filename in filelist: filepath = os.path.join(path, filename) if os.path.isdir(filepath): dirlist(filepath, allfile) else: allfile.append(filepath) return allfile def load_adfa_hydra_ftp_files(rootdir): x=[] y=[] allfile=dirlist(rootdir,[]) for file in allfile: if re.match(r"../data/ADFA-LD/Attack_Data_Master/Hydra_FTP_\d+\\UAD-Hydra-FTP*",file): x.append(load_one_flle(file)) y.append(1) return x,y if __name__ == '__main__': x1,y1=load_adfa_training_files("../data/ADFA-LD/Training_Data_Master/") x2,y2=load_adfa_hydra_ftp_files("../data/ADFA-LD/Attack_Data_Master/") x=x1+x2 y=y1+y2 #print(x) vectorizer = CountVectorizer(min_df=1) x=vectorizer.fit_transform(x) x=x.toarray() #print(y) #选用决策树分类器 clf1 = tree.DecisionTreeClassifier() score=cross_validation.cross_val_score(clf1, x, y, n_jobs=-1, cv=10) print('决策树',np.mean(score)) #选用随机森林分类器 clf2 = RandomForestClassifier(n_estimators=10, max_depth=None,min_samples_split=2, random_state=0) score=cross_validation.cross_val_score(clf2, x, y, n_jobs=-1, cv=10) print('随机森林',np.mean(score))
决策树 0.955736173617
随机森林 0.984888688869

 

--结束END--

本文标题: web安全之机器学习入门——3.2 决策

本文链接: https://lsjlt.com/news/181875.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • web安全之机器学习入门——3.2 决策
    目录 简介 决策树简单用法 决策树检测P0P3爆破 决策树检测FTP爆破 随机森林检测FTP爆破   简介 决策树和随机森林算法是最常见的分类算法; 决策树,判断的逻辑很多时候和人的思维非常接近。 随机森林算法,利用多棵决策树对样本进行...
    99+
    2023-01-31
    入门 机器 web
  • Python机器学习之决策树
    目录一、要求二、原理三、信息增益的计算方法四、实现过程五、程序六、遇到的问题一、要求 二、原理 决策树是一种类似于流程图的结构,其中每个内部节点代表一个属性上的“测试”,每个分支代...
    99+
    2024-04-02
  • 机器学习python实战之决策树
    决策树原理:从数据集中找出决定性的特征对数据集进行迭代划分,直到某个分支下的数据都属于同一类型,或者已经遍历了所有划分数据集的特征,停止决策树算法。   每次划分数据集的特征都有很多,那么我们怎么来选择到底...
    99+
    2022-06-04
    实战 机器 决策树
  • 机器学习——决策树
    决策树是一种用于分类和回归的非参数监督学习方法。目标是创建一个模型,通过从数据特性中推导出简单的决策规则来预测目标变量的值 1 import numpy as np 2 import pandas as pd 3 from skl...
    99+
    2023-01-30
    机器 决策树
  • MNIST机器学习入门
    当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。 MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。它也包含每一张图片对应的标签...
    99+
    2023-01-31
    入门 机器 MNIST
  • Python机器学习之决策树和随机森林
    目录什么是决策树决策树组成节点的确定方法决策树基本流程决策树的常用参数代码实现决策树之分类树网格搜索在分类树上的应用分类树在合成数据的表现什么是随机森林随机森林的原理随机森林常用参数决策树和随机森林效果实例用随机森林...
    99+
    2022-06-02
    Python 决策树 Python 随机森林
  • 分析机器学习之决策树Python实现
    目录一、环境准备二、决策树是什么三、快速入门分类树四、详细分析入门案例五、分类树参数解释5.1、criterion5.2、random_state & splitter5.3、剪枝参数5.4、目标权重参数:c...
    99+
    2022-06-02
    Python 决策树 Python 机器学习
  • 机器学习之决策树算法怎么实现
    决策树是一种常用的机器学习算法,主要用于分类和回归问题。下面是决策树算法的实现步骤:1. 数据预处理:将原始数据进行清洗和转换,包括...
    99+
    2023-10-11
    机器学习
  • Python机器学习入门(五)之Python算法审查
    目录1.审查分类算法1.1线性算法审查1.1.1逻辑回归1.1.2线性判别分析1.2非线性算法审查1.2.1K近邻算法1.2.2贝叶斯分类器1.2.3分类与回归树1.2.4支持向量机...
    99+
    2024-04-02
  • Python机器学习入门(六)之Python优化模型
    目录1.集成算法1.1袋装算法1.1.1袋装决策树1.1.2随机森林1.1.3极端随机树1.2提升算法1.2.1AdaBoost1.2.2随机梯度提升1.3投票算法2.算法调参2.1...
    99+
    2024-04-02
  • Python机器学习入门(四)之Python选择模型
    目录1.数据分离与验证1.1分离训练数据集和评估数据集1.2K折交叉验证分离1.3弃一交叉验证分离1.4重复随机分离评估数据集与训练数据集2.算法评估2.1分类算法评估2.1.1分类...
    99+
    2024-04-02
  • Python机器学习入门(二)之Python数据理解
    目录1.数据导入1.1使用标准Python类库导入数据1.2使用Numpy导入数据1.3使用Pandas导入数据2.数据理解2.1数据基本属性2.1.1查看前10行数据2.1.2查看...
    99+
    2024-04-02
  • Python机器学习入门(三)之Python数据准备
    目录1.数据预处理1.1调整数据尺度1.2正态化数据1.3标准化数据1.4二值数据2.数据特征选定2.1单变量特征选定2.2递归特征消除2.3数据降维2.4特征重要性总结特征选择时困...
    99+
    2024-04-02
  • Python机器学习入门(一)序章
    目录前言写在前面1.什么是机器学习?1.1 监督学习1.2无监督学习2.Python中的机器学习3.必须环境安装Anacodna安装总结前言 每一次变革都由技术驱动。纵观人类历史,上...
    99+
    2024-04-02
  • 如何开始入门机器学习
    这篇文章主要介绍“如何开始入门机器学习”,在日常操作中,相信很多人在如何开始入门机器学习问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何开始入门机器学习”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!为什...
    99+
    2023-06-27
  • MySQL入门学习之——MySQL错误解决汇总
    以下都是工作中使用MySQL过程中遇到的一些错误,特记录之。 错误1:在执行mysql时 提示如下错误: ERROR 1580 (HY000) at line 1: You cannot 'DROP...
    99+
    2024-04-02
  • 环境搭建-机器学习入门(一)
    机器学习不建议直接自行配置python环境,各种第三方库的版本相当难处理。所以需要安装Anaconda3直接搭建一个完整的机器学习环境 Linux环境配置(centos7.4) 执行下列命令安装Anaconda3 # 惯例升级yum y...
    99+
    2023-01-31
    入门 机器 环境
  • 【机器学习】Python 快速入门笔记
    Python 快速入门笔记Xu An   2018-3-7 1、Python print#在Python3.X中使用print()进行输出,而2.x中使用()会报错 print("hello world")  print('I\'m app...
    99+
    2023-01-31
    入门 机器 快速
  • 机器学习教程,Python3天快速入门机
    人工智能,现今已经是好多程序员都想学习的技能,毕竟人工智能这么火,对不对?你是否也想学习呢?今天就分享一个机器学习教程,Python3天快速入门机器学习! 该课程是机器学习的入门课程,主要介绍一些经典的传统机器学习算法,如分类算法:KNN算...
    99+
    2023-01-31
    入门 机器 快速
  • 机器学习之基础知识(全)
    目录 1.机器学习概述 1.1 人工智能概述 1.1.1 人工智能使用场景 1.1.2 人工智能小案例 1.2 人工智能发展历程 1.2.1 图灵测试 1.2.2 发展历程 1.2.3 小结 1.3 人工智能主要分支 1.3.1 人工智能、...
    99+
    2023-08-31
    机器学习
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作