使用python训练随机森林模型辨别可疑流量

标签: | 发表时间:2017-11-14 09:54 | 作者:
出处:http://bluewhale.cc

通过数据分析辨别可疑和虚假流量的方法我们在之前的文章中曾经介绍过。本篇文章我们对这个方法进行自动化,介绍如何通过随机森林分类预测模型对流量进行分类,从中发现可疑流量的影子。需要特殊说明的是本篇文章中的数据并非真实数据,我们只使用三个简单用户行为特征指标对方法和过程进行说明。真实世界中情况会更加复杂。

website-traffic1

随机森林是一个包含多颗决策树的分类预测算法。通过随机抽样的方式从数据表中生成多张抽样的数据表,对每个抽样的数据表生成一棵决策树。将多颗决策树组成一个随机森林。当有一条新的数据产生时,让森林里的每一颗决策树分别进行判断,以投票最多的结果作为最终的判断结果。下面我们来介绍如何在python中使用机器学习库sklearn建立随机森林模型并进行分类和预测。

random-forest

准备工作

首先导入需要使用的库文件,依次为数值计算库numpy,科学计算库pandas,交叉验证库cross_validation和随机森林分类算法库RandomForestClassifier。

#导入数值计算库
import numpy as np
#导入科学计算库
import pandas as pd
#导入交叉验证库
from sklearn import cross_validation
#导入随机森林算法库
from sklearn.ensemble import RandomForestClassifier

读取并查看数据表

读取流量数据表,其中包括流量的新访比例,跳出率和浏览深度三个关键指标。其中一部分已经被证明为可疑流量并进行了标注,另一部分则为正常流量。我们将使用这些数据对随机森林分类模型进行训练和测试。

#读取流量数据并创建名为traffic的数据表
traffic=pd.DataFrame(pd.read_excel('traffic_type.xlsx'))
#查看数据表内容
traffic.head()

%e6%b5%8f%e8%a7%88%e9%87%8f%e6%95%b0%e6%8d%ae%e8%a1%a8

#查看数据表列标题
traffic.columns
Index(['New_Sessions', 'Bounce_Rate', 'Pages_Session', 'Type'], dtype='object')

设置模型特征X及目标Y

将流量数据表中的新访占比,跳出率和浏览深度数据设置为特征值X。流量的类别是我们要进行分类预测的结果,因此将流量类别设置为目标值Y。

#设置特征值X
X = np.array(traffic[['New_Sessions','Bounce_Rate','Pages_Session']])
#设置目标值Y
Y = np.array(traffic['Type'])
#查看数据集的维度
X.shape,Y.shape
((100, 3), (100,))

将数据分割为训练集和测试集

采用随机的方式将数据表分割为训练集和测试集,其中60%的训练集数据用来训练模型,40%的测试集数据用来检验模型准确率。

X_train,X_test,y_train,y_test = cross_validation.train_test_split(X, Y, test_size=0.4, random_state=0)

60%的数据为训练数据集,用来对随机森林分类器进行训练。

#查看训练集的维度
X_train.shape, y_train.shape
((60, 3), (60,))

40%的数据为测试数据集,用来对随机森林模型的分类效果进行测试。

#查看测试集的维度
X_test.shape, y_test.shape
((40, 3), (40,))

建立随机森林模型并进行训练

设置好数据集后,开始建立随机森林模型,并使用测试数据集对模型进行训练,并使用测试数据集对模型的训练结果进行评估。

#建立模型
clf = RandomForestClassifier()

#对模型进行训练
clf = clf.fit(X_train, y_train)

#对模型进行测试
clf.score(X_test, y_test)
0.875

模型准确率为87.5%

检验并进行分类预测

我们可以使用随机森林模型对数据进行分类和预测,首先查看下模型的分类标签,这将帮助我们更好的理解后面的分类预测结果。使用clf.classes_获得两个分类标签的名称,第一个类别为doubt,第二个类别为normal。

clf.classes_
array(['doubt', 'normal'], dtype=object)

首先使用测试集数据对模型的分类结果做个检验,测试集数据是历史数据,因此我们已经知道了流量所属的类别结果。提取测试集数据的第一个流量类别,结果为normal。

y_test[0]
'normal'

将测试集数据代入到模型中进行拟合,获得的分类结果为normal,与正确的结果一致。

clf.predict(X_test[0])
array(['normal'], dtype=object)

进一步查看随机森林模型对流量数据分类的概率,第一个流量20%的概率为doubt类,80%的概率为normal类,因此将这条流量数据归为normal类别。

clf.predict_proba(X_test[0])
array([[ 0.2, 0.8]])

换一组数据进行预测,新访比例80%,跳出率60%,浏览深度1.3。通过模型预测这条流量数据为doubt类别的可疑流量。

clf.predict([[0.8,0.6,1.3]])
array(['doubt'], dtype=object)

这条流量数据被预测为doubt的概率为80%,预测为normal的概率为20%。因此被归为doubt分类。

clf.predict_proba([[0.8,0.6,1.3]])
array([[ 0.8, 0.2]])

—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“ 蓝鲸网站分析博客”。】—

相关 [python 训练 随机森林] 推荐:

使用python训练随机森林模型辨别可疑流量

- -
通过数据分析辨别可疑和虚假流量的方法我们在之前的文章中曾经介绍过. 本篇文章我们对这个方法进行自动化,介绍如何通过随机森林分类预测模型对流量进行分类,从中发现可疑流量的影子. 需要特殊说明的是本篇文章中的数据并非真实数据,我们只使用三个简单用户行为特征指标对方法和过程进行说明. 随机森林是一个包含多颗决策树的分类预测算法.

使用python训练贝叶斯模型预测贷款逾期

- - 蓝鲸的网站分析笔记
朴素贝叶斯(Naive Bayes)是一种简单的分类预测模型,本篇文章将使用机器学习库scikit-learn中的Gaussian Naive Bayes算法对贷款历史数据进行建模. 并通过模型对新贷款用户的逾期情况进行模拟预测. 首先是开始前的准备工作,导入所需的库文件. 依次为数值计算库numpy,科学计算库pandas,交叉验证库cross_validation和朴素贝叶斯算法库GaussianNB.

在真实数据集上的随机森林模型参数调优 - 简书

- -
搞机器学习的人,都会有自己偏爱的某种算法,有的喜欢支持向量机(SVM),因为它公式表达的优雅和可利用方法实现的高质量;有的人喜欢决策树,因为它的简洁性和解释能力;还有人对神经网络非常痴狂,因为它解决问题的灵活性(一般在超大规模的数据集上,使用神经网络,效果会好于其他所有的机器学习算法). 但是就我本人而言,我最喜欢的算法是随机森林,理由如下:.

dropbox讲python

- chuang - Initiative
dropbox定制优化CPython虚拟机,自己搞了个malloc调度算法. 那个 !!!111cos(0). 期待这次PyCon China 2011.

Python调试

- - 企业架构 - ITeye博客
原文地址: http://blog.csdn.net/xuyuefei1988/article/details/19399137. 1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧:. IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试:.

Python WSGI 初探

- - 坚实的幻想
在构建 Web 应用时,通常会有 Web Server 和 Application Server 两种角色. 其中 Web Server 主要负责接受来自用户的请求,解析 HTTP 协议,并将请求转发给 Application Server,Application Server 主要负责处理用户的请求,并将处理的结果返回给 Web Server,最终 Web Server 将结果返回给用户.

Python实现逻辑回归(Logistic Regression in Python)

- - 神刀安全网
Logistic Regression in Python ,作了中文翻译,并相应补充了一些内容. 本文并不研究逻辑回归具体算法实现,而是使用了一些算法库,旨在帮助需要用Python来做逻辑回归的训练和预测的读者快速上手. 逻辑回归是一项可用于预测二分类结果(binary outcome)的统计技术,广泛应用于金融、医学、犯罪学和其他社会科学中.

python 下载文件

- Eric - python相关的python 教程和python 下载你可以在老王python里寻觅
之前给大家分享的python 多线程抓取网页,我觉的大家看了以后,应该会对python 抓取网页有个很好的认识,不过这个只能用python 来抓取到网页的源代码,如果你想用做python 下载文件的话,上面的可能就不适合你了,最近我在用python 做文件下载的时候就遇到这个问题了,不过最终得以解决,为了让大家以后碰过这个问题有更好的解决办法,我把代码发出来:.

python代码调试

- - 阿里古古
【转自: http://blog.csdn.net/luckeryin/article/details/4477233】. 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序. 例如,有模拟税收计算的程序:. debug_demo函数计算4500的入账所需的税收. 在需要插入断点的地方,加入红色部分代码:如果_DEBUG值为True,则在该处开始调试(加入_DEBUG的原因是为了方便打开/关闭调试).

python编程规范

- - 互联网 - ITeye博客
@FileName: @Author:xx@ic.net.cn @Create date: @description:用一行文字概述模块或脚本,用句号结尾. 不影响编码的效率,不与大众习惯冲突.. 使代码的逻辑更清晰,更易于理解..   *所有的 Python 脚本文件都应在文件头标上如下标识或其兼容格式的标识.