我与Python | 从Hacker到探索Deep Learning
作者,李良,中国海洋大学、SEI实验室B519NLP小组长组长。
为什么是Python
人生苦短,我用Python...
'Life is short, you need Python!'
进入大学之后,我们逐渐“被教授”了C、C++、Java等编程语言,但为什么我会选择python作为最喜欢的编程语言呢?
Python是最好的编程语言之一,在科学计算中用途广泛:计算机视觉、人工智能、数学、天文等。它同样适用于机器学习也是意料之中的事。
总之:简短[库多]、不用自己造轮子[库多]、能解决各种问题[库多多...]
python是一种简单但功能强大的解释性编程语言,便与交互编程,作为一种动态语言,允许程序运行时候才被添加到对象,变量自动类型转换,提高开发效率。
最重要的一点:python自带强大的标准库,而且可以很方便的使用其它的第三方库,这就大大的简化了我们编程的复杂度。
依稀记得大学期间,我对Hacke相关的技术非常着迷,觉得面对漆黑的终端界面,快速的输入一些奇怪的命令,啪啪啪...女神的QQ密码搞到手了,想想还有点小激动!(纯属意淫),经常捣鼓一下XSS、SQL注入这些“高级”技巧来意淫一番。
就喜欢这个feel的壁纸...
作为一个梦想成为Hacker的男人,总不能一直玩'儿童玩具',所以想参与一些网络安全的竞赛玩玩,探索中发现比赛中用的比较多的语言是Python,逛FreeBuf的时候看到一遍文章这样推荐使用Python:
“如果你热爱漏洞研究、逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言。它包含大量实用的库和工具......”
拥有大量的库以及工具,意味着只需要自己写少许的代码,就可以实现那些看似很厉害的Hacker姿势,这不正是我这类小白梦寐以求的东西嘛!
遥想当年,怀揣着Hacker梦想的我,一直希望自己能够有机会向FreeBuf提交一个自己发现的漏洞......
本着入门新语言“7天”就够了的原则,开始了学习python之路,这一路从追逐Hacker梦想开始,一直到现在探究Deep Learning的深渊。进入研究生阶段后,跟随实验室的研究方向,未来的职业定位也随之改变,Hacker梦渐行渐远.....但是Python却从未离开过我,因为在研究深度学习中,Python仍旧还是我的左膀右臂。
深度学习界的屠龙刀—Python
深度学习无疑是最近几年最炙手可热的研究领域之一,从2012年ImgNet上的一鸣惊人,到AlphaGo的横扫围棋界...深度学习的成果不断的从实验室走到了工业界,逐步融入进我们的日常生活。
深度学习的深渊
为什么说Python是深度学习界的屠龙刀呢?额.....因为倚天剑是属于灭绝师太的!综其原因,我认识还是:库多。如果自己手动完成一个机器学习的算法,代码量还是挺多的,这对于刚入门的新手来说,毫无疑问是当头喝棒,而借助于第三方库,其封装了一些好用的算法,大大简化我们需要做的工作,我们可以把更多的精力放在解决问题本身上。
研究生阶段,我逐渐的开始接触深度学习,开始尝试自己动手基于深度学习模型尝试解决一些NLP领域的问题,这时候python又成为了我的首选编程语言。
我的研究方向是NLP,此外个人对机器学习以及其它的子领域也非常浓厚的兴趣,例如:数据挖掘、推荐系统等,而这些兴趣爱好的相关编程工作,Python基本都可以很好的胜任。
Python语言作为一个多面手,我认为它的核心竞争力就体现在它拥有丰富多彩的库:
我常用的Python库
深度学习界Java、C++、Scala等语言也是各有千秋,自己用啥兵器顺手,就选什么兵器呗,反正,最终目的都是要能解决手头的问题!
如果你不了解Python但是很擅长其他语言?不要绝望!Python(还有其他)的一个强项就是它是一个完美的胶水语言,你可以使用自己常用的编程语言,通过Python来访问这些库。以下适合各种编程语言的包可以用于将其他语言与Python组合到一起:
R -> RPython
Matlab -> matpython
Java -> Jython
Lua -> Lunatic Python
Julia -> PyCall.jl
获取数据—编写爬虫
数据决定了模型所能达到的最终高度,而不断优化的模型不过是为了逼近这个目标而已!
做数据分析【爬取电商某种商品的评价】、文本分类【爬取新闻网站】时需要获取部分原始的数据,这时可能需要自己写一个简单的爬虫。此时,python就可以登场了,配合一些自带的模块或者第三方的库:requests、urllib等,简单的coding就可以很好的完成这个小任务,如果需要实现一个较复杂的爬虫,则可以利用Python的第三方库--Scrapy,利用工程模板简单的配置一下mongodb数据库地址以及初始URL地址等参数,就可以很好的完成数据搜集的任务。
Scrapy
机器学习界常用的库
1、Scikit-Learn-实现了传统的机器学习算法
Scikit-Learn[简称sklearn] 是一个 Python 的 科学计算库,我们用它进行分类、特征选择、特征提取和聚集等,是比较常用的机器学习库之一。
numpy、scipy 是 Python 的科学运算库,matplotlib 是图形库,用于绘图,经常与Sklearn库配合使用。
Scikit-Learn包含的算法流程图
由图中,可以看到算法有四类,分类,回归,聚类,降维。
其中 分类和回归是监督式学习,即每个数据对应一个 label。
聚类是非监督式学习,即没有 label
另外一类是降维,当数据集有很多很多属性的时候,可以通过降维 算法把属性归纳起来。例如 20 个属性只变成 2 个,注意,这不是挑出 2 个,而是压缩成为 2 个,它们集合了 20 个属性的所有特征,相当于把重要的信息提取的更好,不重要的信息就不要了。
此外,在NLP领域中,它还包含有限的自然语言处理特征提取能力,以及词袋(bag of words)、tfidf(Term Frequency Inverse Document Frequency算法)、预处理(停用词/stop-words,自定义预处理,分析器)等。
Sklearn 包含了很多种机器学习的算法,几乎覆盖了实现一个机器学习算法的整个流程:
Classification 分类
Regression 回归
Clustering 非监督分类
Dimensionality reduction 数据降维
Model Selection 模型选择
Preprocessing 数据预处理
介绍sklearn包中各种机器学习模型的实现(含代码)(http://python.jobbole.com/81721/)
2、Gensim-NLP界的利器
Gensim被定义为“人们的主题建模工具(topic modeling for humans)”。它的主页上描述,其焦点是狄利克雷划分(Latent Dirichlet Allocation, LDA)及变体。不同于其他包,它支持自然语言处理,能将NLP和其他机器学习算法更容易组合在一起。如果你的领域在NLP,并想进行聚集和基本的分类,你可以看看。目前,它们引入了Google的基于递归神经网络(Recurrent Neural Network)的文本表示法word2vec,在NLP中词的词向量的分布式表示方法用的比较多的就是word2vec。
word2vec
3、TensorFlow-炙手可热的计算框架
说到深度学习+Python,就不得不提TensorFlow,我也在积累素材准备专门写一下关于TensorFlow的使用感悟,这里就先简单的介绍一下。
TensorFlow
TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow可以说是当前最流行的深度学习框架【我就不写之一了】。
借助TensorFlow,我们不需要自己去实现反向传播、随机梯度下降、损失函数等较复杂的函数,新手也可以实现常见的深度学习模型:CNN、RNN、LSTM、Seq2Seq等[使用Keras实现起来更简单]。
什么是tensorflow:
官网的定义中并未将TensorFlow称为一个“机器学习库”,而是使用了更宽泛的短语“数值计算”。虽然TensorFlow中的确包含一个模仿了具有单行建模功能的机器学习库Scikit-Learn的名为“learn”(也称“Scikit Flow”)的包,但需要注意的是,TensorFlow的主要目标并非是提供现成的机器学习解决方案。相反,TensorFlow提供了一个可使用户用数学方法从零开始定义模型的函数和类的广泛套件。这使得具有一定技术背景的用户可迅速而直观地创建自定义的、具有较高灵活性的模型。此外,虽然TensorFlow为面向机器学习的功能提供了广泛支持,但它也非常适合做复杂的数学计算。
4、数据可视化
常言道:一图胜千言。
在数据挖掘中分析数据分布、统计总量以及呈现最终的分析结果时,数据的可视化是非常必要的。
在Web中,我常用的可视化工具是E-chart,python中最常用的无疑是Matplotlib。
Echart例图
matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
matplotlib是基于numpy的一套Python工具包。这个包提供了丰富的数据绘图工具,主要用于绘制一些统计图形。你可以找到很多各式各样的例子。
例子
此外,还有一个在其基础上扩展的包:Seaborn,它以matplotlib为底层,更容易定制化作图的。
Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。
5、总结
Python各种丰富的库还有很多,本文只是简单的介绍了几个自己在机器学习、NLP中常用的库,对于这些包深入理解,这里并没有详细的介绍,其中的每一个都值得写一篇博客才能窥探一二。此外,还有很多基础的库[numpy、pandas等]是我们必须要掌握的,这里就不一一的介绍了。
原文链接:http://www.jianshu.com/p/ad80a010c739
请关注LeadAI公众号,查看更多专业文章
大家都在看
TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络
装饰器 | Python高级编程
今天不如来复习下Python基础
点击“阅读原文”直接打开【北京站 | GPU CUDA 进阶课程】报名链接
我与Python | 从Hacker到探索Deep Learning相关推荐
- python思想读后感_《Deep Learning with Python》读后感精选
<Deep Learning with Python>是一本由Francois Chollet著作,Manning Publications出版的Paperback图书,本书定价:USD ...
- Keras Tutorial: Deep Learning in Python
This Keras tutorial introduces you to deep learning in Python: learn to preprocess your data, model, ...
- Deep Learning and Shallow Learning
由于 Deep Learning 现在如火如荼的势头,在各种领域逐渐占据 state-of-the-art 的地位,上个学期在一门课的 project 中见识过了 deep learning 的效果, ...
- 深度学习和浅层学习 Deep Learning and Shallow Learning
由于 Deep Learning 现在如火如荼的势头,在各种领域逐渐占据 state-of-the-art 的地位,上个学期在一门课的 project 中见识过了 deep learning 的效果, ...
- deep learning list
版权声明:本文为博主原创文章,未经博主允许不得转载. Free Online Books Deep Learning by Yoshua Bengio, Ian Goodfellow and Aaro ...
- 《Deep Learning for Computer Vision with Python》阅读笔记-ImageNetBundle(第7章)-在ImageNet上训练VGGNet
//2022.2.27日下午18:33开始学习笔记 7.在ImageNet上训练VGGNet 在本章中,我们将学习如何在ImageNet数据集上从零开始训练VGG16网络架构.卷积神经网络的VGG家族 ...
- Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]
作者:吴茂贵,郁明敏,杨本法,李涛,张粤磊 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2019-11-01 Python深度学习:基于PyTorch [Deep Learning with ...
- 《Deep Learning With Python second edition》英文版读书笔记:第十一章DL for text: NLP、Transformer、Seq2Seq
文章目录 第十一章:Deep learning for text 11.1 Natural language processing: The bird's eye view 11.2 Preparin ...
- grad在python什么模块_深度学习(Deep Learning)基础概念1:神经网络基础介绍及一层神经网络的python实现...
此专栏文章随时更新编辑,如果你看到的文章还没写完,那么多半是作者正在更新或者上一次没有更新完,请耐心等待,正常的频率是每天更新一篇文章. 该文章是"深度学习(Deep Learning)&q ...
最新文章
- swift 跳转网页写法
- CentOS Samba 服务器的构建(转)
- c++ 按键暂停继续 程序_CNC操作面板讲解,看看这些按键是什么意思
- 记录下最近写前端的一些小技巧
- uva1025城市里的间谍
- php禁用cookie后session设置方法分析
- QtQuick 中的 qml 与 Qt 的 C++
- Walle 瓦力 web部署系统
- Canada Cup 2016 C. Hidden Word 字符串构造
- 仔细看看_仔细看看,您会发现需要改进的地方
- django-orm操作流程
- 声明式和命令式编程_命令式与声明式编程
- 唯有拼搏不负君(送年轻人8句话)
- 手机移动端浏览器或PC端浏览器莫名出现计算错误或莫名返回到登录界面等问题的解决.
- Vue富文本编辑器使用教程
- C语言制作简谱播放器
- matlab 数组写入文件名,Matlab将数组写入.txt文件
- python pywifi 破解wifi密码
- 线性代数矩阵行列式_矩阵的行列式 使用Python的线性代数
- python画五角星代码_Python使用turtule画五角星的方法
热门文章
- map分组后取前10个_java中list里面存放map,根据map中的某两个个字段进行排序
- php将数组值用 分开,PHP将数组中的多个值替换为另一个数组
- java代码god类_java – 如何编写Controller而不将其作为God对象?
- python元组转换成列表_python-将元组的无序列表转换为pandas DataFrame
- flutter 微信语言选择_Flutter/dart聊天实例|仿微信界面|红包|朋友圈
- 文本处理算法_python 文本处理
- 火箭联盟服务器维护中怎么办,《火箭联盟》出现服务器问题 官方致歉并承诺会尽快修复...
- 戴尔微型计算机怎么换系统,给戴尔外星人笔记本电脑的win7系统更换为win10系统图文教程...
- spring项目获取ServletContext
- Uep的ajaxform和ajaxgrid组件获取数据源