我与Python | 从Hacker到探索Deep Learning

为什么是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地址等参数,就可以很好的完成数据搜集的任务。

机器学习界常用的库

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。

3、TensorFlow-炙手可热的计算框架

说到深度学习+Python,就不得不提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等]是我们必须要掌握的,这里就不一一的介绍了。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

让神经网络替你编程:如何用深度学习实现程序自动合成

【新智元导读】本文介绍了训练神经网络学习用复杂的函数式语言(FlashFill DSL)进行编程取得的成功,标志着神经程序合成方面一个令人兴奋的突破。 ● 作...

3788
来自专栏CDA数据分析师

盘点丨2018 年热门 Python 库丨TOP20

在解决数据科学任务和挑战方面,Python继续处于领先地位。去年,我对当时热门的Python库进行了总结。今年,我在当中加入新的库,重新对2018年热门Pyth...

1372
来自专栏人工智能头条

机器学习即服务之BigML特性介绍和入门教程

1425
来自专栏CreateAMind

TensorFlow-dev-summit:那些TensorFlow上好玩的和黑科技

本文属于介绍性文章,其中会介绍许多TensorFlow的新feature和summit上介绍的一些有意思的案例,文章比较长,可能会花费30分钟到一个小时

942
来自专栏量子位

这么多人,AI怎么知道你说的是哪个? | 李飞飞团队CVPR论文+代码

对于人类保安来说,理解这个指令是自然而然毫无难度的事。但机器就不一样了:它们能从画面中认出人人人人人,但究竟哪一个才是“砸玻璃的人”呢?

733
来自专栏PPV课数据科学社区

如何利用 Excel 进行高级数据分析?

高级的数据分析会涉及回归分析、方差分析和T检验等方法,不要看这些内容貌似跟日常工作毫无关系,其实往高处走,MBA的课程也是包含这些内容的,所以早学晚学都得学,干...

2474
来自专栏FreeBuf

学点算法搞安全之apriori

*原创作者:兜哥,本文属FreeBuf原创奖励计划,未经许可禁止转载 前言 在企业安全建设专题中偶尔有次提到算法的应用,不少同学想深入了解这块,所以我专门开了一...

19710
来自专栏PaddlePaddle

GITCHAT系列2:个性化推荐

大家好,我是来自PaddlePaddle开源社区的李钊(@livc),目前是一名大三学生。我曾经在手机百度实习,参与推荐算法和反作弊的研发工作,目前是IDL的一...

3778
来自专栏新智元

【珍藏】CMU大师对软件工程师的系统建议(附书和论文下载)

【新智元导读】软件工程师想学机器学习,有什么好建议?机器学习专家、卡耐基梅隆大学教授、1-Page公司首席科学家 Alex Smola 在 Quora 上给出了...

3607
来自专栏AI星球

我与Python--从Hacker到探索Deep Learning

进入大学之后,我们逐渐“被教授”了C、C++、Java等编程语言,但为什么我会选择python作为最喜欢的编程语言呢?

733

扫码关注云+社区