在大学的时候参与了一个学校的项目,自己做的工作就是仿冒网站中的数据清洗、特征选择、以及后续的机器学习模型的选择等相关的方面,作为一个入门级别的菜鸟新手来说,中间经历的东西恐怕只有自己懂的,做了很多事情,大学的那段时间大多时间都在实验室里面来摸索,写在这里可能也都是班门弄斧了,我是一个半路出家的progammer,说的这些话写的这些东西是希望能够帮到很多跟我一样在考研的选择上选择了跨度的同学,尽量可以快一点进入自己的状态少走一点不必要的弯路

我在研究生生涯也度过了将近两年的时间,总会有一点体会和感悟,但是不可能全部都有用都能够讲出来,在这里简单写一下自己参与这个事情的前后经历吧:

几年前就进入实验室,在我看来,无论交给你什么任务,最开始接触的往往都是论文,可能在一开始的时候你会感觉没有什么太大的用处,每天看很多的文献,从刚开始的综述层面的文献到后来的实验方法实验数据层面的文献再到后来的创新点方法的文献最后就是你自己的创新设计了,这个可能你听完也会感觉这是一个毕业生硕士论文的流程,的确是的,但是工程层面的东西要求是简单高效,那么自然就不可能跟论文相提并论,但是有一点是不可否认的:工程上面高效有效的实现方法往往来源于文献中,这也就是你为什么一开始不能绕过去读论文,度枯燥的文献的原因了,在最开始看的时候相关的综述、问题背景、已有的方法以及优缺点可以多看看,在明白了自己为什么要做这个事情,以及该怎么着手去做的时候说明问题你心里已经很明确了,接下来的就是怎么计划去实践。

现在不管做什么都有一大堆的方法和文献,要选择的也很多,就比如让你计算两个字符串的相似度,你会怎么计算呢?可以有很多方法:使用有名的编辑距离可以实现计算两个字符串的编辑距离,从而得到两个字符串的相似程度、使用shingle或者slice这样的切片的方法,借助于滑窗的策略可以将字符串切片处理之后使用Jaccard系数来计算相似度、使用最长公共子序列来计算等等,这些方法都是在实践中历经考验被创造出来的,但是不同的实现又会有不同的时间不同的空间复杂度,在不同的问题上就会有针对性的选择需要的方法。

都说现在已经进入了一个数据或者是一个大数据的时代,2012年是中国的数据元年,到现在也已经经历了数年的时间和发展了,在现在的角度看待问题就需要能够保持一定的角度和高度才行,比如最传统的相似度计算方法是否还能够应对海量数据信息的冲击呢?互联网上每天产生的数据是海量的,需要处理的数据也会是海量的,这个时候不可能想着可以一味地去依靠提升机器的性能,要站在数据的角度考虑问题的产生原因和处理方法:对于原始的数据进行清洗和处理是必不可少的一项工作,这样可以有效地在数据的源头降低数据的量级,机器学习和深度学习等方法现在成功主流的研究方法,很完整的实现也都有很多,这些是必须会熟练去运用这些解决自己的问题的,机器学习和深度学习本质上最核心的东西在于特征的选择上面,说道特征选择不得不说完整的工作流程中极为核心的一个步骤就是:特征工程。

这是一个没有办法去讲得很明白的问题,网上大神们写的有很多的方法和经历,我就不多说什么了,对于初学者来说我的建议就是:可以多参加一下比赛,这些比赛可能本身就是针对一个具体的问题或者背景事件给出来的数据让你去解决,大都离不开机器学习的方法,当然中间就必须做好特征工程,在实践中积累,在积累中才能产生应用。在这里简单推荐几个自己觉得很不错的比赛:

Kaggle    Kaggle入门

天池

JData

SMP Cup

当然,比赛还有很多种,可以根据自己的时间、兴趣量力而行,最好的是完整做完一次,明白整个的流程是怎么样的。

好了,上面说着了这么多,现在该回归正题了,简单说一下自己在看论文的时间一篇论文中提到的简单的实现仿冒网站的轻量级的分类模型的实现,这个已经是很早的事情了,今天正好在整理资料整理出来了就想着写一下自己当初简单的经过吧,可能已经很不适用了,只是想抛砖引玉,自己的路还有很长要走,当然要学的东西还有很多很多,希望这些能帮到需要的人或者有一点提示

具体的论文没有找到所以没有办法贴出来具体的文章,简单说一下:论文中把恶意页面的识别看作是一个二分类的问题,这里的话就可以使用经典的特征工程+SVM组合的方式来做,效果的话也都是很不错的,毕竟SVM对于解决小样本数据的性能几乎是无可比拟的。论文的方法是仅仅考虑恶意页面和正常页面在url上面的区别,基于这些统计和观察来提取特征,比如:url中的点的个数,正常页面一般都是三个左右不会超过五个,而恶意页面可能就是需要迷惑用户所以使用很杂乱分级很多的路径作为url;url中是否包含ip,正常网站的话都是使用域名来访问的很少使用ip地址,那么恶意页面可能就是因为注册时间短或者没有合法的域名而世界使用或者包含ip在url中;url或者路径中是否包含敏感词如:bank、account等,因为恶意页面的目的就是诱导用户访问输入个人的隐私数据进而盗取账号获取非法利益,所以一般都是利益或者登陆相关的页面。基于这些特征可以对已有的数据进行清洗、特征提取和选择、机器学习模型的分类,大体的流程就是这样的,接下来看一下具体的实现:

# !/usr/bin/python
#-*-coding:utf-8-*-import codecs
import sys
import re
import chardet
import warnings
from lxml import etree
from os.path import join as pjoin
import os
from bs4 import BeautifulSoup
from urllib2 import urlparseRED_KEYWORDS = ["account", "admin", "administrator","auth", "bank", "client", "confirm", "email", "host","password", "pay", "private", "safe", "secure", "security","sign", "user", "validation", "verification", "icbc"]
PATH_KEYWORDS = ["www", "net", "com", "cn"]def geturlat(url):'''判断URL中是否含有@,?,-,_等符号'''re_script = re.compile(r'@|-|_|\?|~')return 1 if re_script.search(url) else 0def get_has_ip(url):'''判断url中是否包含ip,包含返回1,不包含返回0'''compile_rule_ip = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])')ip_list=re.findall(compile_rule_ip, url)if ip_list:return 1else:return 0def geturldot(url):'''判断URL中.的个数'''dotnum = 0for u in url:if u == '.':dotnum += 1return dotnumdef get_url_length(url):'''获得URL的总长度'''return len(url)def get_url_number_length(url):'''获得URL的最长的数字串长度'''result = 0match = re.findall(r"\d+", url)if match:match.sort(key=lambda x: len(x), reverse=True)result = len(match[0])return resultdef get_red_keyword(url):'''判断URL中是否包含敏感词汇'''url = url.lower()for key in RED_KEYWORDS:if url.find(key) != -1:return 1return 0def get_path_key(url):'''判断URL的路径中是否包含敏感词汇 '''url_parse = urlparse(url)path = url_parse.pathif path:for key in PATH_KEYWORDS:if path.lower().find(key) != -1:return 1return 0def get_url_vector(url):'''输入:URL,网页存储路径,关键字列表输出:当前网页的结果list 包含所有特征的返回值'''heuristic_vector = []#heuristic_vector.append(geturlip(url))heuristic_vector.append(geturlat(url))heuristic_vector.append(geturldot(url))heuristic_vector.append(get_url_length(url))heuristic_vector.append(get_url_number_length(url))heuristic_vector.append(get_red_keyword(url))heuristic_vector.append(get_path_key(url))return heuristic_vectorif __name__ == '__main__':white_urlresult = open('result/white_urlresult.txt', 'wb')#存储白名单数据white_urlresult.write('url_sign, url_dot, url_length, url_number_length, red_keyword, label')white_urlresult.write('\n')urlfile = open('dataset/white.txt', 'r')urlfile_list = urlfile.readlines()for one_url in urlfile_list:heuristic_vector = get_url_vector(one_url.strip())heuristic_url_str = [str(vector) for vector in heuristic_vector]#fw.write(url + ',Y,1,' + ','.join(heuristic_vector_str) + '\n')white_urlresult.write(','.join(heuristic_url_str) + ',' + '0' + '\n')#存储黑名单数据black_urlresult = open('black_urlresult.txt', 'wb')id = 1black_urlresult.write('id, url_sign, url_dot, url_length, url_number_length, red_keyword, label')black_urlresult.write('\n')urlfile = open('dataset/all.txt', 'r')urlfile_list = urlfile.readlines()url_list_len = len(urlfile_list)i = 0for one1_url in urlfile_list:heuristic_vector = get_url_vector(one1_url.strip())heuristic_url_str = [str(vector) for vector in heuristic_vector]#fw.write(url + ',Y,1,' + ','.join(heuristic_vector_str) + '\n')i += 1if i == url_list_len:black_urlresult.write(str(id) + ',' + ','.join(heuristic_url_str) + ',' + '1' )id += 1else:black_urlresult.write(str(id) + ',' + ','.join(heuristic_url_str) + ',' + '1' + '\n')id += 1

接下来的事情就是一个纯粹的机器学习模型解决的了,使用分类模型来解决,可以使用的模型有很多,可以使用:SVM、Decision Tree,RandomForest、GBDT等,在这里就选择了使用SVM,关于SVM的介绍网上也有很多,在这里就不具体讲实现了给出几个推荐参考的资料,可以借助这些很容易的实现分类模型的使用,推荐使用python机器学习库scikit-learn,具体的用法用例和参考文档都在参考链接中:

参考链接:

http://scikit-learn.org/stable/

http://www.cnblogs.com/taceywong/p/4568806.html

http://blog.csdn.net/pipisorry/article/details/52251305

http://www.cnblogs.com/CheeseZH/p/5250997.html

中间讲的很多都是自己的个人见解,有理解不对的欢迎指教。

python实现完整的特征工程,实践论文中的分类模型和方法用于恶意页面的分类与识别相关推荐

  1. python二值化特征_R与Python手牵手:特征工程(数值型变换)

    原标题:R与Python手牵手:特征工程(数值型变换) 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:h ...

  2. Python之pandas:特征工程中数据类型(object/category/bool/int32/int64/float64)的简介、数据类型转换四大方法、案例应用之详细攻略

    Python之pandas:特征工程中数据类型(object/category/bool/int32/int64/float64)的简介.数据类型转换四大方法.案例应用之详细攻略 目录 特征工程中数据 ...

  3. ML之FE:特征工程中常用的五大数据集划分方法(特殊类型数据分割,如时间序列数据分割法)讲解及其代码

    ML之FE:特征工程中常用的五大数据集划分方法(特殊类型数据分割,如时间序列数据分割法)讲解及其代码 目录 特殊类型数据分割 5.1.时间序列数据分割TimeSeriesSplit 特殊类型数据分割 ...

  4. python特征工程有序变量处理_R与Python手牵手:特征工程(分类变量)

    作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在业界的应用.邮箱:huang.tian-yuan@qq.com.欢迎交流! 这次给大家分享的是对分类变量进行特征工程.很多时候我们会遇到一 ...

  5. python基于不同方法实现特征工程常用的归一化技术Normalization对比分析

    在很多机器学习数据挖掘的项目中,都免不了要去构建特征工程,在面临特征选择的时候经常会出现我们所提取到的不同的特征维度的数据本身的量纲或者是取值范围是不同的,比如我们在对人的属性建模的时候,人的体温取值 ...

  6. 特征工程之非线性特征提取和模型堆叠

    当在数据一个线性子空间像扁平饼时 PCA 是非常有用的.但是如果数据形成更复杂的形状呢?一个平面(线性子空间)可以推广到一个 流形 (非线性子空间),它可以被认为是一个被各种拉伸和滚动的表面. 如果线 ...

  7. python文本分类模型_下载 | 最全中文文本分类模型库,上手即用

    原标题:下载 | 最全中文文本分类模型库,上手即用 本文转自『大数据文摘』 如何选择合适的模型上手进行中文文本分类呢? 别慌,福利来了,GitHub上一位名为"huwenxing" ...

  8. python分箱_特征工程 - 分箱

    卡方分箱 python自带分箱函数  --  无法实现对分类型数据的分箱,可借助卡方分箱算法实现 import numpy as np import pandas as pd data = np.ra ...

  9. 特征工程和数据预处理常用工具和方法

    import pandas as pdtrain_data = pd.read_csv("train.csv")train_data.shape #应该是给了property (8 ...

  10. 【特征工程】词袋模型/TF-IDF模型/词汇表模型的代码实现(文本特征提取)

    文章目录 1.词袋模型 2.TF-IDF模型 3.词汇表模型 1.词袋模型 词集模型:单词构成的集合,集合中仅统计单词的有无,不统计具体单词的出现的次数 词袋模型:在词集模型的基础上,统计单词出现的次 ...

最新文章

  1. 微信小程序下拉刷新和上拉加载的实现
  2. softsign激活函数
  3. vba中的查找匹配函数
  4. 6 个核心理念!诠释了吴恩达新书《Machine Learning Yearning》
  5. python基础教程(第二版)
  6. “双击Pycharm无响应”解决方案
  7. JS、PHP、Python等五大编程语言爆漏洞;中兴 70 后程序员坠亡;雷军平定迅雷内乱 | 一周业界事
  8. Spark SQL实战
  9. java filter bme_节点红色,想截断BME280传感器的结果
  10. AJAX访问JSON数据
  11. .NET如何对接PayPal支付
  12. [转] 脉宽调制实现LED显示屏灰度的方法
  13. Kotlin初学者笔记
  14. 【Traffmonetizer】利用闲置电脑/VPS/安卓手机/树莓派来挂机
  15. 网络分层(7层)以及每层的设备和协议
  16. 10个Python爬虫实战项目
  17. 倍福--两台TwinCAT3之间做Ethernet IP通信
  18. 微信3d小游戏(three)-逻辑设计与场景添加
  19. 经验整理-win10安装ubuntu18.04.2双系统(NVIDIA Geforce GTX 1060独显)
  20. Python中的单例模式的几种实现方式的及优化

热门文章

  1. LVM逻辑卷管理总结
  2. table中background背景图片自动拉伸
  3. 响应式布局之网站头部导航
  4. WdatePicker的一些用法
  5. 微软MED-V虚拟化实战教程之二映像准备和测试
  6. python 可变参数示例
  7. http中响应状态码表示的意义?
  8. 无法获取有关 Windows NT 组/用户 'WIN-*******\********' 的信息,错误代码 0x534。 [SQLSTATE 42000] (错误 15404))....
  9. PHP7 学习笔记(十二)gRPC
  10. Okhttp3 使用和原理(DEMO)