为什么是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语言作为一个多面手,我认为它的核心竞争力就体现在它拥有丰富多彩的库:
深度学习界Java、C++、Scala等语言也是各有千秋,自己用啥兵器顺手,就选什么兵器呗,反正,最终目的都是要能解决手头的问题!
如果你不了解Python但是很擅长其他语言?不要绝望!Python(还有其他)的一个强项就是它是一个完美的胶水语言,你可以使用自己常用的编程语言,通过Python来访问这些库。以下适合各种编程语言的包可以用于将其他语言与Python组合到一起:
获取数据—编写爬虫
数据决定了模型所能达到的最终高度,而不断优化的模型不过是为了逼近这个目标而已!
做数据分析【爬取电商某种商品的评价】、文本分类【爬取新闻网站】时需要获取部分原始的数据,这时可能需要自己写一个简单的爬虫。此时,python就可以登场了,配合一些自带的模块或者第三方的库:requests、urllib等,简单的coding就可以很好的完成这个小任务,如果需要实现一个较复杂的爬虫,则可以利用Python的第三方库--Scrapy,利用工程模板简单的配置一下mongodb数据库地址以及初始URL地址等参数,就可以很好的完成数据搜集的任务。
机器学习界常用的库
1、Scikit-Learn-实现了传统的机器学习算法
Scikit-Learn[简称sklearn] 是一个 Python 的 科学计算库,我们用它进行分类、特征选择、特征提取和聚集等,是比较常用的机器学习库之一。
numpy、scipy 是 Python 的科学运算库,matplotlib 是图形库,用于绘图,经常与Sklearn库配合使用。
由图中,可以看到算法有四类,分类,回归,聚类,降维。
其中 分类和回归是监督式学习,即每个数据对应一个 label。
聚类是非监督式学习,即没有 label
另外一类是降维,当数据集有很多很多属性的时候,可以通过降维 算法把属性归纳起来。例如 20 个属性只变成 2 个,注意,这不是挑出 2 个,而是压缩成为 2 个,它们集合了 20 个属性的所有特征,相当于把重要的信息提取的更好,不重要的信息就不要了。
此外,在NLP领域中,它还包含有限的自然语言处理特征提取能力,以及词袋(bag of words)、tfidf(Term Frequency Inverse Document Frequency算法)、预处理(停用词/stop-words,自定义预处理,分析器)等。
Sklearn 包含了很多种机器学习的算法,几乎覆盖了实现一个机器学习算法的整个流程:
介绍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。
matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
matplotlib是基于numpy的一套Python工具包。这个包提供了丰富的数据绘图工具,主要用于绘制一些统计图形。你可以找到很多各式各样的例子。
例子
此外,还有一个在其基础上扩展的包:Seaborn,它以matplotlib为底层,更容易定制化作图的。
Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。
5、总结
Python各种丰富的库还有很多,本文只是简单的介绍了几个自己在机器学习、NLP中常用的库,对于这些包深入理解,这里并没有详细的介绍,其中的每一个都值得写一篇博客才能窥探一二。此外,还有很多基础的库[numpy、pandas等]是我们必须要掌握的,这里就不一一的介绍了。