一位数据分析师的职业规划

2016-05-12 大数据技术

来自网络

2012年就在网络上传,原作者不详

我小时候的理想是将来做一名数学家,可惜长大了发现自己天赋不够,理想渐

行渐远,于是开始考虑现实,开始做一些人生规划,我一直在思考将来从事何种职业,专注什么样的领域,重新定义着自己的职业理想。我现在的职业理想,比较简单,就是做一名数据分析师。

为什么要做数据分析师?

在通信、互联网、金融等这些行业每天产生巨大的数据量(长期更是积累了大量丰富的数据,比如客户交易数据等等),据说到2020年,全球每年产生的数据量达 到3500万亿GB;海量的历史数据是否有价值,是否可以利用为领导决策提供参考依据?随着软件工具、数据库技术、各种硬件设备的飞快发展,使得我们分析 海量数据成为可能。

而数据分析也越来越受到领导层的重视,借助报表告诉用户什么已经发生了,借助OLAP和可视化工具等分析工具 告诉用户为什么发生了,通过dashboard监控告诉用户现在在发生什么,通过预报告诉用户什么可能会发生。数据分析会从海量数据中提取、挖掘对业务发 展有价值的、潜在的知识,找出趋势,为决策层的提供有力依据,为产品或服务发展方向起到积极作用,有力推动企业内部的科学化、信息化管理。

我们举两个通过数据分析获得成功的例子:

(1) Facebook广告与微博、SNS等网络社区的用户相联系,通过先进的数据挖掘与分析技术,为广告商提供更为精准定位的服务,该精准广告模式收到广大广 告商的热捧,根据市场调研机构eMarketer的数据,Facebook年营收额超过20亿美元,成为美国最大的在线显示广告提供商。

(2) Hitwise发布会上,亚太区负责人John举例说明: 亚马逊30%的销售是来自其系统自动的产品推荐,通过客户分类,测试统计,行为建模,投放优化四步,运营客户的行为数据带来竞争优势。

此外,还有好多好多,数据分析,在营销、金融、互联网等方面应用是非常广泛的:比如在营销领域,有数据库营销,精准营销,RFM分析,客户分群,销量预测等 等;在金融上预测股价及其波动,套利模型等等;在互联网电子商务上面,百度的精准广告,淘宝的数据魔方等等。类似成功的案例会越来越多,以至于数据分析师 也越来越受到重视。

然而,现实却是另一种情况。我们来看一个来自微博上的信息:在美国目前面临14万~19万具有数据分析和管理 能力的专业人员,以及150万具有理解和决策能力(基于对海量数据的研究)的管理人员和分析人员的人才短缺。而在中国,受过专业训练并有经验的数据分析人 才,未来三年,分析能力人才供需缺口将逐渐放大,高级分析人才难寻。也就是说,数据分析的需求在不断增长,然而合格的为企业做分析决策的数据分析师却寥寥 无几。好多人想做数据分析却不知道如何入手,要么不懂得如何清洗数据,直接把数据拿来就用;要么乱套模型,分析的头头是道,其实完全不是那么回事。按俗话 说就是:见过猪跑,没吃过猪肉。

 我的职业规划:

对于数据分析,有一句话说的非 常好:spss/sql之类的软件、决策树、时间序列之类的方法,这些仅仅就都是个工具而已,最重要的是对业务的把握。没有正确的业务理解,再牛的理论, 再牛的工具,都是白搭。做一名合格的数据分析师,除了对数据需要有良好的敏感性之外,对相关业务的背景的深入了解,对客户或业务部门的需求的清晰认识。根 据实际的业务发展情况识别哪些数据可用,哪些不适用,而不是孤立地在“真空环境”下进行分析。

为此,我对自己的规划如下:

第一步:掌握基本的数据分析知识(比如统计,概率,数据挖掘基础理论,运筹学等),掌握基本的数据分析软件(比如,VBA,Matlab,Spss,Sql 等等),掌握基本的商业经济常识(比如宏微观经济学,营销理论,投资基础知识,战略与风险管理等等)。这些基础知识,在学校里尽量的学习,而且我来到了和 君商学院,这样我可以在商业分析、经济分析上面领悟到一些东西,增强我的数据分析能力。

第二步:参与各种实习。研一开始我当时虽然有课,不 过很幸运的找到一份一周只需去一两天的兼职,内容是为三星做竞争对手分析,当然分析框架是leader给定了,我只是做整合资料和往ppt里填充的内容的 工作,不过通过兼职,我接触到了咨询行业,也向正式员工学习了很多商业分析、思考逻辑之类的东西。之后去西门子,做和VBA的事情,虽然做的事情与数据分 析无关,不过在公司经常用VBA做一些自动化处理工作,为自己的数据分析工具打好了基础。再之后去了易车,在那里兼职了一个多月,参与了大众汽车销量数据 短期预测的项目,一个小项目下来,数据分析的方法流程掌握了不少,也了解了企业是如何用一些时间序列模型去参与预测的,如何选取某个拟合曲线作为预测值。 现在,我来到新的地方实习,也非常幸运的参加了一个央企的码头堆场优化系统设计,其实也算数据分析的一种吧,通过码头的数据实施调度,通过码头的数据进行 决策,最后写成一个可操作的自动化系统。而这个项目,最重要的就是业务流程的把握,我也参与项目最初的需求调研,和制定工作任务说明书SOW,体会颇多。

第三步:第一份工作,预计3-5年。我估计会选择咨询公司或者IT公司吧,主要是做数据分析这块比较强的公司,比如Fico,埃森哲,高沃,瑞尼 尔,IBM,AC等等。通过第一份工作去把自己的知识打得扎实些,学会在实际中应用所学,学会数据分析的流程方法,让自己成长起来。

第四步:去自己喜欢的一个行业,深入了解这个行业,并讲数据分析应用到这个行业里。比如我可以去电子商务做数据分析师。我觉得我选择电子商务,是因为未来必将 是互联网的时代,电子商务必将取代传统商务,最显著的现象就是传统零售商老大沃尔玛正在受到亚马逊的挑战。此外,电子商务比传统的零售商具有更好的数据收 集和管理能力,可以更好的跟踪用户、挖掘潜在用户、挖掘潜在商品。

第五步:未知。我暂时没有想法,不过我希望我是在一直的进步。

总结:数据分析师的能力和目标:

能力:

1、一定要懂点战略、才能结合商业;

2、一定要漂亮的presentation、才能buying;

3、一定要有global view、才能打单;

4 一定要懂业务、才能结合市场;

5、一定要专几种工具、才能干活;

6、一定要学好、才能有效率;

7、一定要有强悍理论基础、才能入门;

8 一定要努力、 才能赚钱;最重要的:

9 一定要务实、才有reputation;

目标:

1-做过多少个项目?

2-业务背景有哪些,是否跨行业?

3-做过多少种类型的模型?做了多少个模型?

4-基于模型做过多少次完整的marketing闭环?

以上四个问题,足以秒杀95%以上的忽悠和菜鸟!

我仅以此为努力之坐标,时刻提醒自己。

路在前方,漫漫前行。

机器学习常见面试题整理

By:kubiCode

Source: http://kubicode.me/2015/08/16/Machine%20Learning/Common-Interview/

有监督学习和无监督学习的区别

  • 有监督学习:对具有标记的训练样本进行学习,以尽可能对训练样本集外的数据进行分类预测。(LR,SVM,BP,RF,GBRT)
  • 无监督学习:对未标记的样本进行训练学习,比发现这些样本中的结构知识。(KMeans,DL)

正则化

正则化是针对过拟合而提出的,以为在求解模型最优的是一般优化最小的经验风险,现在在该经验风险上加入 模型复杂度这一项(正则化项是模型参数向量的范数),并使用一个rate比率来权衡模型复杂度与以往经验风险的权重,如果模型复杂度越高,结构化的经验风 险会越大,现在的目标就变为了结构经验风险的最优化,可以防止模型训练过度复杂,有效的降低过拟合的风险。

奥卡姆剃刀原理,能够很好的解释已知数据并且十分简单才是最好的模型。

过拟合

如果一味的去提高训练数据的预测能力,所选模型的复杂度往往会很高,这种现象称为过拟合。所表现的就是模型训练时候的误差很小,但在测试的时候误差很大。

产生的原因

  1. 因为参数太多,会导致我们的模型复杂度上升,容易过拟合
  2. 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征.

解决方法

  1. 交叉验证法
  2. 减少特征
  3. 正则化
  4. 权值衰减
  5. 验证数据

泛化能力

泛化能力是指模型对未知数据的预测能力

生成模型和判别模型

  1. 生成模型:由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。(朴素贝叶斯)
    生成模型可以还原联合概率分布p(X,Y),并且有较快的学习收敛速度,还可以用于隐变量的学习
  2. 判别模型:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。(k近邻、决策树)
    直接面对预测,往往准确率较高,直接对数据在各种程度上的抽象,所以可以简化模型

线性分类器与非线性分类器的区别以及优劣

如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。
常见的线性分类器有:LR,贝叶斯分类,单层感知机、线性回归
常见的非线性分类器:决策树、RF、GBDT、多层感知机

SVM两种都有(看线性核还是高斯核)

  • 线性分类器速度快、编程方便,但是可能拟合效果不会很好
  • 非线性分类器编程复杂,但是效果拟合能力强

特征比数据量还大时,选择什么样的分类器?

线性分类器,因为维度高的时候,数据一般在维度空间里面会比较稀疏,很有可能线性可分

对于维度很高的特征,你是选择线性还是非线性分类器?

理由同上

对于维度极低的特征,你是选择线性还是非线性分类器?

非线性分类器,因为低维空间可能很多特征都跑到一起了,导致线性不可分

ill-condition病态问题

训练完的模型测试样本稍作修改就会得到差别很大的结果,就是病态问题(这简直是不能用啊)

L1和L2正则的区别,如何选择L1和L2正则

他们都是可以防止过拟合,降低模型复杂度

  • L1是在loss function后面加上 模型参数的1范数(也就是|xi|)
  • L2是在loss function后面加上 模型参数的2范数(也就是sigma(xi^2)),注意L2范数的定义是sqrt(sigma(xi^2)),在正则项上没有添加sqrt根号是为了更加容易优化
  • L1 会产生稀疏的特征
  • L2 会产生更多地特征但是都会接近于0

L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时候非常有用,而L2就只是一种规则化而已。

特征向量的归一化方法

  1. 线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue)
  2. 对数函数转换,表达式如下:y=log10 (x)
  3. 反余切函数转换 ,表达式如下:y=arctan(x)*2/PI
  4. 减去均值,乘以方差:y=(x-means)/ variance

特征向量的异常值处理

  1. 用均值或者其他统计量代替

越小的参数说明模型越简单

过拟合的,拟合会经过曲面的每个点,也就是说在较小的区间里面可能会有较大的曲率,这里的导数就是很大,线性模型里面的权值就是导数,所以越小的参数说明模型越简单。

追加:这个其实可以看VC维相关的东西感觉更加合适

svm中rbf核函数与高斯和函数的比较

高斯核函数好像是RBF核的一种

KMeans初始类簇中心点的选取

选择批次距离尽可能远的K个点

首先随机选取一个点作为初始点,然后选择距离与该点最远的那个点作为中心点,再选择距离与前两个点最远的店作为第三个中心店,以此类推,直至选取大k个

选用层次聚类或者Canopy算法进行初始聚类

ROC、AUC

ROC和AUC通常是用来评价一个二值分类器的好坏

ROC曲线

曲线坐标上:

  • X轴是FPR(表示假阳率-预测结果为positive,但是实际结果为negitive,FP/(N))
  • Y轴式TPR(表示真阳率-预测结果为positive,而且的确真实结果也为positive的,TP/P)

那么平面的上点(X,Y):

  • (0,1)表示所有的positive的样本都预测出来了,分类效果最好
  • (0,0)表示预测的结果全部为negitive
  • (1,0)表示预测的错过全部分错了,分类效果最差
  • (1,1)表示预测的结果全部为positive

    针对落在x=y上点,表示是采用随机猜测出来的结果

ROC曲线建立
一般默认预测完成之后会有一个概率输出p,这个概率越高,表示它对positive的概率越大。
现在假设我们有一个 threshold,如果p>threshold,那么该预测结果为positive,否则为negitive,按照这个思路,我们多设置几个 threshold,那么我们就可以得到多组positive和negitive的结果了,也就是我们可以得到多组FPR和TPR值了
将这些(FPR,TPR)点投射到坐标上再用线连接起来就是ROC曲线了

当threshold取1和0时,分别得到的就是(0,0)和(1,1)这两个点。(threshold=1,预测的样本全部为负样本,threshold=0,预测的样本全部为正样本)

AUC

AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积不会大于1(一般情况下ROC会在x=y的上方,所以0.5<AUC<1).

AUC越大说明分类效果越好

为什么要使用ROC和AUC

因为当测试集中的正负样本发生变化时,ROC曲线能基本保持不变,但是precision和recall可能就会有较大的波动。
http://www.douban.com/note/284051363/?type=like

测试集和训练集的区别

训练集用于建立模型,测试集评估模型的预测等能力

优化Kmeans

使用kd树或者ball tree(这个树不懂)
将所有的观测实例构建成一颗kd树,之前每个聚类中心都是需要和每个观测点做依次距离计算,现在这些聚类中心根据kd树只需要计算附近的一个局部区域即可

数据挖掘和机器学习的区别

机器学习是数据挖掘的一个重要工具,但是数据挖掘不仅仅只有机器学习这一类方法,还有其他很多非机器学习的方法,比如图挖掘,频繁项挖掘等。感觉数据挖掘是从目的而言的,但是机器学习是从方法而言的。

备注

题目主要来源于网络,答案主要来源于网络或者《统计学习方法》,还有自己一小部分的总结,如果错误之处敬请指出
如果想要了解关于常见模型的东东可以看这篇机器学习常见算法个人总结(面试用)文章

《台大机器学习基石》Linear Regression

By Kubi Code

Source: http://kubicode.me/2015/08/19/Machine%20Learning/Linear-Regression/

Linear Regression

现在相对比于之前的Perceptron Learning Algorithm算法,假如我们现在时的问题不是解决是否发行用卡,而是该发多少额度的问题

也就是输出空间属于一个实数,那么就需要一个回归算法来解决该问题!

那么我们其实可以直接使用特征属性与权重的加权求和来表示需要发的信用额度即可(与PLA类似,但是没有激活函数:二值判断逆函数)

上图中表示的就是为线性回归(Linear Regression),其中wTx就是表示为全部的假设空间(hypothesis set)

如果当前的特征是一维的,那么这里的hypothesis set就表示一条线,(因为总体的特征向量里面还有一个常数值)

如果当前的特征是二维的,那么这里的hypothesis set就一个平面

当然特征更加多得话,最终hypothesis set表示一个超平面
其中图上红色的部分叫做误差(视频里面叫做余数),那么回归分析的目标就是将所有的误差降到最小越好
这里使用平方误差来衡量整体的误差

那么从机器学习的角度来说,这里的误差就可以看做(下面这个表达式就很熟悉了)

相应的

表示这个分类器在未来未训练数据集中产生的误差是多少
那么现在的线性回归的问题就是转为将Ein(w)优化到最小。

Ein(w)最小化

现将上面小节的中的Ein转为矩阵的运算

  1. 向量内积可交换,将wTx转为xTw
  2. 将连加转为向量形式的长度(应该是二范数)
  3. w单独提出来(相当于隔离出了一个特征属性向量的矩阵)
  4. 最终使用缩写来进行整理

到了这一步我们可以发现Ein(w)只与w有关,那么他们的关系图是

可以发现Ein(w)是连续可导,还有它是凸的
那么用Ein(w)w求偏导即可求导最优值(梯度为0的位置)

这样现在问题又转为了 求

首先将
现在对其求偏导

完了之后再将A,b替换回去

进一步将问题转换为
式子中XTXXTy都是已知的,唯一不知道的就是w,这样就变为了一个一次的方程式

  1. 假如有(XTX)-1反矩阵的存在,那么就可以直接得到解了,并且是唯一的
  2. 但是如果(XTX)-1反矩阵不存在,那么得到的解可能就不唯一了

所以这里的核心就是计算虚假的反矩阵(pseudo-inverse),听林老师说这个的计算很多工具都是由现成的^_^

刚刚求Ein(w)最小化的过程中看似直接用公式代替可到,但是其中的pseudo-inverse计算起来麻烦,最终在计算的时候还是需要迭代,然后会触发Ein(w)Eout(w)的变化,是一个深度隐含的学习过程(这种是叫做Analytic Solution)。

Learning happened

那么该如果保证Eout可以是小的呢?
我们先来看一下Ein的平均

其中nosie level表示样本中噪声的一个情况,d+1表示模型的自由度,N表示样本的容量
其中单独表示Ein(w)的话为

这样就形成了两项1-XX+y,也就是相当于将输入喝输出进行了一个分离,其中XX+叫做hat matrix
关于这个hat matrix,它的意义是这样纸的

  1. 红色区块表示向量X的一个扩散,而y^就是落在这个空间上
  2. 目标就是求y-y^的最小化,也就是图种的绿色那条线(y^)向下投影的线
  3. H就是表示这个空间上yy^的一个投影
  4. I-H就是表示误差部分y-y^

相应的会有trace(I-H)=N-(d+1)

好,现在再来看Ein的平均到底是什么意思

  1. 其中如果f(x)为目标函数,那么目标值y就相当于在f(x)上添加噪声
  2. 然后这个噪声通过I-H就可以转为y-y^

现在对噪声作评价的话,那么就可以得到
此时
这两个式子哲学上的意思是Ein的平均是可以看到的,所以当存在噪声的时候看到的线会偏向于噪声方向,而在Eout的平均是未知的,比最好的那个线还要向右边偏一点(没听懂-_-)

他们俩会形成如下的关系线

它描述的是当前的样本量与平均的EinEout的关系,随着样本量N的增长,最终会趋向于nosie level

那么就可以得到

说明N足够大,然后他的noise level够小时,说明了Learning happened

总结

  1. 线性回归最终求出的是一个加权求和的值.
  • 线性回归的Ein的采用的是最小平方误差.
  • 在计算Ein的最小化时,可以将问题转为矩阵之后就逆矩阵相关即可.
  • 通过Ein平均的计算,说明了Learning happened.
  • 其实线性回归去坐分类问题也是可以的^_^,第9课第4个小视频.

参考

  • 《台湾国立大学-机器学习基石》第九讲

配图均来自《台湾国立大学-机器学习基石》

机器学习常见算法个人总结

By:kubiCode

Source: http://kubicode.me/2015/08/16/Machine%20Learning/Algorithm-Summary-for-Interview/

朴素贝叶斯

参考[1]

事件AB同时发生的概率为在A发生的情况下发生B或者在B发生的情况下发生A

[Math Processing Error]
所以有:

[Math Processing Error]

对于给出的待分类项,求解在此项出现的条件下各个目标类别出现的概率,哪个最大,就认为此待分类项属于哪个类别

工作原理

  1. 假设现在有样本[Math Processing Error]

这个待分类项(并认为[Math Processing Error]

  • 里面的特征独立)
  • 再假设现在有分类目标[Math Processing Error]
  • 那么[Math Processing Error]
  • 就是最终的分类类别
  • [Math Processing Error]
  • 因为[Math Processing Error]

对于每个分类目标来说都一样,所以就是求[Math Processing Error]

  • [Math Processing Error]
  • 而具体的[Math Processing Error]

[Math Processing Error]都是能从训练样本中统计出来
[Math Processing Error]表示该类别下该特征出现的概率
[Math Processing Error]

 

  1. 表示全部类别中这个这个类别出现的概率
  2. 好的,就是这么工作的^_^

工作流程

  1. 准备阶段
    确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本。
  2. 训练阶段
    计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计
  3. 应用阶段
    使用分类器进行分类,输入是分类器和待分类样本,输出是样本属于的分类类别

属性特征

  1. 特征为离散值时直接统计即可(表示统计概率)
  2. 特征为连续值的时候假定特征符合高斯分布:[Math Processing Error]

那么[Math Processing Error]

Laplace校准(拉普拉斯校验)

当某个类别下某个特征划分没有出现时,会有[Math Processing Error]

,就是导致分类器质量降低,所以此时引入Laplace校验,就是对没类别下所有划分的计数加1。

遇到特征之间不独立问题

参考改进的贝叶斯网络,使用DAG来进行概率图的描述

优缺点

朴素贝叶斯的优点:

  1. 对小规模的数据表现很好,适合多分类任务,适合增量式训练。
    缺点:
  2. 对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。

逻辑回归和线性回归

参考[2,3,4]

LR回归是一个线性的二分类模型,主要是计算在某个样本特征下事件发生的概率,比如根据用户的浏览购买情况作为特征来计算它是否会购买这个商品,抑或是它是否会点击这个商品。然后LR的最终值是根据一个线性和函数再通过一个sigmod函数来求得,这个线性和函数权重与特征值的累加以及加上偏置求出来的,所以在训练LR时也就是在训练线性和函数的各个权重值w

[Math Processing Error]

关于这个权重值w一般使用最大似然法来估计,假设现在有样本[Math Processing Error]

,其中[Math Processing Error]表示样本的特征,[Math Processing Error]表示样本的分类真实值,[Math Processing Error]的概率是[Math Processing Error],则[Math Processing Error]的概率是[Math Processing Error],那么观测概率为:

[Math Processing Error]
则最大似然函数为:

[Math Processing Error]

对这个似然函数取对数之后就会得到的表达式

[Math Processing Error]
估计这个[Math Processing Error]的极大值就可以得到[Math Processing Error]

的估计值。

实际操作中一般会加个负号 改为求最小

所以求解问题就变成了这个最大似然函数的最优化问题,这里通常会采样随机梯度下降法和拟牛顿迭代法来进行优化

梯度下降法

LR的损失函数为:

[Math Processing Error]
这样就变成了求[Math Processing Error]

其更新w的过程为

[Math Processing Error]
其中[Math Processing Error],直到[Math Processing Error]

不能再小时停止

梯度下降法的最大问题就是会陷入局部最优,并且每次在对当前样本计算cost的时候都需要去遍历全部样本才能得到cost值,这样计算速度就会慢很多(虽然在计算的时候可以转为矩阵乘法去更新整个w值)
所以现在好多框架(mahout)中一般使用随机梯度下降法,它在计算cost的时候只计算当前的代价,最终cost是在全部样本迭代一遍之求和得出,还有他在更新当前的参数w的时候并不是依次遍历样本,而是从所有的样本中随机选择一条进行计算,它方法收敛速度快(一般是使用最大迭代次数),并且还可以避免局部最优,并且还很容易并行(使用参数服务器的方式进行并行)

[Math Processing Error]

这里SGD可以改进的地方就是使用动态的步长

[Math Processing Error]

其他优化方法

  • 拟牛顿法(记得是需要使用Hessian矩阵和cholesky分解)
  • BFGS
  • L-BFGS

优缺点:无需选择学习率α,更快,但是更复杂

关于LR的过拟合问题:

如果我们有很多的特性,在训练集上拟合得很好,但是在预测集上却达不到这种效果

  1. 减少feature个数(人工定义留多少个feature、算法选取这些feature)
  2. 正则化(为了方便求解,L2使用较多)
    添加正则化之后的损失函数为: [Math Processing Error]

同时w的更新变为[Math Processing Error]
注意:这里的[Math Processing Error]

  1. 不受正则化影响

关于LR的多分类:softmax

假设离散型随机变量Y的取值集合是{1,2,..,k},则多分类的LR为

[Math Processing Error]

这里会输出当前样本下属于哪一类的概率,并且满足全部概率加起来=1

关于softmax和k个LR的选择

如果类别之间是否互斥(比如音乐只能属于古典音乐、乡村音乐、摇滚月的一种)就用softmax
否则类别之前有联系(比如一首歌曲可能有影视原声,也可能包含人声,或者是舞曲),这个时候使用k个LR更为合适

优缺点:
Logistic回归优点:

  1. 实现简单;
  2. 分类时计算量非常小,速度很快,存储资源低;

缺点:

  1. 容易欠拟合,一般准确度不太高
  2. 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;

ps 另外LR还可以参考这篇以及多分类可以看这篇

KNN算法

给一个训练数据集和一个新的实例,在训练数据集中找出与这个新实例最近的k个训练实例,然后统计最近的k个训练实例中所属类别计数最多的那个类,就是新实例的类

三要素:

  1. k值的选择
  2. 距离的度量(常见的距离度量有欧式距离,马氏距离等)
  3. 分类决策规则 (多数表决规则)

k值的选择

  1. k值越小表明模型越复杂,更加容易过拟合
  2. 但是k值越大,模型越简单,如果k=N的时候就表明无论什么点都是训练集中类别最多的那个类

所以一般k会取一个较小的值,然后用过交叉验证来确定
这里所谓的交叉验证就是将样本划分一部分出来为预测样本,比如95%训练,5%预测,然后k分别取1,2,3,4,5之类的,进行预测,计算最后的分类误差,选择误差最小的k

KNN的回归

在找到最近的k个实例之后,可以计算这k个实例的平均值作为预测值。或者还可以给这k个实例添加一个权重再求平均值,这个权重与度量距离成反比(越近权重越大)。

优缺点:

KNN算法的优点:

  1. 思想简单,理论成熟,既可以用来做分类也可以用来做回归;
  2. 可用于非线性分类;
  3. 训练时间复杂度为O(n);
  4. 准确度高,对数据没有假设,对outlier不敏感;

缺点:

  1. 计算量大;
  2. 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
  3. 需要大量的内存;

KD树

KD树是一个二叉树,表示对K维空间的一个划分,可以进行快速检索(那KNN计算的时候不需要对全样本进行距离的计算了)

构造KD树

在k维的空间上循环找子区域的中位数进行划分的过程。
假设现在有K维空间的数据集[Math Processing Error]

,[Math Processing Error]

  1. 首先构造根节点,以坐标[Math Processing Error]

的中位数b为切分点,将根结点对应的矩形局域划分为两个区域,区域1中[Math Processing Error],区域2中[Math Processing Error]

  • 构造叶子节点,分别以上面两个区域中[Math Processing Error]
  • 的中位数作为切分点,再次将他们两两划分,作为深度1的叶子节点,(如果a2=中位数,则a2的实例落在切分面)
  • 不断重复2的操作,深度为j的叶子节点划分的时候,索取的[Math Processing Error]

[Math Processing Error]

 

  1. ,直到两个子区域没有实例时停止

KD树的搜索

  1. 首先从根节点开始递归往下找到包含x的叶子节点,每一层都是找对应的xi
  2. 将这个叶子节点认为是当前的“近似最近点”
  3. 递归向上回退,如果以x圆心,以“近似最近点”为半径的球与根节点的另一半子区域边界相交,则说明另一半子区域中存在与x更近的点,则进入另一个子区域中查找该点并且更新”近似最近点“
  4. 重复3的步骤,直到另一子区域与球体不相交或者退回根节点
  5. 最后更新的”近似最近点“与x真正的最近点

KD树进行KNN查找

通过KD树的搜索找到与搜索目标最近的点,这样KNN的搜索就可以被限制在空间的局部区域上了,可以大大增加效率。

KD树搜索的复杂度

当实例随机分布的时候,搜索的复杂度为log(N),N为实例的个数,KD树更加适用于实例数量远大于空间维度的KNN搜索,如果实例的空间维度与实例个数差不多时,它的效率基于等于线性扫描。

后来自己有实现过KD树,可以看KNN算法中KD树的应用

SVM、SMO

对于样本点[Math Processing Error]

以及svm的超平面:[Math Processing Error]

  • 函数间隔:[Math Processing Error]

 

  • 几何间隔:[Math Processing Error]

,其中[Math Processing Error][Math Processing Error]

 

  • 的L2范数,几何间隔不会因为参数比例的改变而改变

svm的基本想法就是求解能正确划分训练样本并且其几何间隔最大化的超平面。

线性SVM问题

先来看svm的问题:

[Math Processing Error]

那么假设[Math Processing Error]

则将问题转为:

[Math Processing Error]

由于[Math Processing Error]

的成比例增减不会影响实际间距,所以这里的取[Math Processing Error],又因为[Math Processing Error]
所以最终的问题就变为了

[Math Processing Error]

这样就变成了一个凸的二次规划化,可以将其转换为拉格朗日函数,然后使用对偶算法来求解

对偶求解

引进拉格朗日乘子[Math Processing Error]

,定义拉格朗日函数:

[Math Processing Error]

根据对偶性质 原始问题就是求对偶问题的极大极小

[Math Processing Error]
先求L对[Math Processing Error]的极小,再求对[Math Processing Error]的极大。
[Math Processing Error],也就是相当于对[Math Processing Error]求偏导并且另其等于0

[Math Processing Error]
代入后可得

[Math Processing Error]
[Math Processing Error][Math Processing Error]的极大,即是对偶问题:

[Math Processing Error]
将求最大转为求最小,得到等价的式子为:

[Math Processing Error]

假如求解出来的[Math Processing Error]

[Math Processing Error]
则得到最优的[Math Processing Error]分别为

[Math Processing Error]
所以,最终的决策分类面为

[Math Processing Error]
也就是说,分类决策函数只依赖于输入[Math Processing Error]

与训练样本的输入的内积

ps:上面介绍的是SVM的硬间距最大化,还有一种是软间距最大化,引用了松弛变量[Math Processing Error]

,则次svm问题变为:

[Math Processing Error]

其余解决是与硬间距的一致~

还有:与分离超平面最近的样本点称为支持向量

损失函数

损失函数为(优化目标):

[Math Processing Error]
其中[Math Processing Error]称为折页损失函数,因为:

[Math Processing Error]

为什么要引入对偶算法

  1. 对偶问题往往更加容易求解(结合拉格朗日和kkt条件)
  2. 可以很自然的引用核函数(拉格朗日表达式里面有内积,而核函数也是通过内积进行映射的)

核函数

将输入特征x(线性不可分)映射到高维特征R空间,可以在R空间上让SVM进行线性可以变,这就是核函数的作用

  • 多项式核函数:[Math Processing Error]

 

  • 高斯核函数:[Math Processing Error]

 

  • 字符串核函数:貌似用于字符串处理等

SVM优缺点

优点:

  1. 使用核函数可以向高维空间进行映射
  2. 使用核函数可以解决非线性的分类
  3. 分类思想很简单,就是将样本与决策面的间隔最大化
  4. 分类效果较好

缺点:

  1. 对大规模数据训练比较困难
  2. 无法直接支持多分类,但是可以使用间接的方法来做

SMO

SMO是用于快速求解SVM的
它选择凸二次规划的两个变量,其他的变量保持不变,然后根据这两个变量构建一个二次规划问题,这个二次规划关于这两个变量解会更加的接近原始二次规划的解,通过这样的子问题划分可以大大增加整个算法的计算速度,关于这两个变量:

  1. 其中一个是严重违反KKT条件的一个变量
  2. 另一个变量是根据自由约束确定,好像是求剩余变量的最大化来确定的。

SVM多分类问题

  1. 直接法
    直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该优化就可以实现多分类(计算复杂度很高,实现起来较为困难)
  2. 间接法
    1. 一对多
      其中某个类为一类,其余n-1个类为另一个类,比如A,B,C,D四个类,第一次A为一个类,{B,C,D}为一个类训练一个分类器,第二次B为一个类,{A,C,D}为另一个类,按这方式共需要训练4个分类器,最后在测试的时候将测试样本经过这4个分类器[Math Processing Error]

,[Math Processing Error],[Math Processing Error][Math Processing Error]

    1. ,取其最大值为分类器(这种方式由于是1对M分类,会存在偏置,很不实用)
    2. 一对一(libsvm实现的方式)
      任意两个类都训练一个分类器,那么n个类就需要n*(n-1)/2个svm分类器。
      还是以 A,B,C,D为例,那么需要{A,B},{A,C},{A,D},{B,C},{B,D},{C,D}为目标共6个分类器,然后在预测的将测试样本通过 这6个分类器之后进行投票选择最终结果。(这种方法虽好,但是需要n*(n-1)/2个分类器代价太大,不过有好像使用循环图来进行改进)

决策树

决策树是一颗依托决策而建立起来的树。

ID3

  1. 首先是针对当前的集合,计算每个特征的信息增益
  2. 然后选择信息增益最大的特征作为当前节点的决策决策特征
  3. 根据特征不同的类别划分到不同的子节点(比如年龄特征有青年,中年,老年,则划分到3颗子树)
  4. 然后继续对子节点进行递归,直到所有特征都被划分

[Math Processing Error]一个属性中某个类别的熵 [Math Processing Error], [Math Processing Error]表示[Math Processing Error]情况下发生[Math Processing Error]

的概率,也即是统计概率。

[Math Processing Error]

整个属性的熵,为各个类别的比例与各自熵的加权求和。

[Math Processing Error]

增益表示分类目标的熵减去当前属性的熵,增益越大,分类能力越强
(这里前者叫做经验熵,表示数据集分类C的不确定性,后者就是经验条件熵,表示在给定A的条件下对数据集分类C的不确定性,两者相减叫做互信息,决策树的增益等价于互信息)。
比如说当前属性是是否拥有房产,分类是是否能偿还债务
现在:

  • 有用房产为7个,4个能偿还债务,3个无法偿还债务
  • 然后无房产为3个,其中1个能偿还债务,2个无法偿还债务

然后
有房子的熵:[Math Processing Error]

无房子的熵:[Math Processing Error]
分类的熵:[Math Processing Error]
最终的增益=[Math Processing Error]

最大越好

关于损失函数
设树的叶子节点个数为[Math Processing Error]

[Math Processing Error]为其中一个叶子节点,该叶子节点有[Math Processing Error]个样本,其中[Math Processing Error]类的样本有[Math Processing Error]个,[Math Processing Error]为叶子节点上的经验熵,则损失函数定义为

[Math Processing Error]
其中

[Math Processing Error]
代入可以得到

[Math Processing Error]

[Math Processing Error]

为正则化项,[Math Processing Error]

是用于调节比率
决策树的生成只考虑了信息增益

C4.5

它是ID3的一个改进算法,使用信息增益率来进行属性的选择

[Math Processing Error]

优缺点:
准确率高,但是子构造树的过程中需要进行多次的扫描和排序,所以它的运算效率较低

Cart

分类回归树(Classification And Regression Tree)是一个决策二叉树,在通过递归的方式建立,每个节点在分裂的时候都是希望通过最好的方式将剩余的样本划分成两类,这里的分类指标:

  1. 分类树:基尼指数最小化(gini_index)
  2. 回归树:平方误差最小化

分类树:

  1. 首先是根据当前特征计算他们的基尼增益
  2. 选择基尼增益最小的特征作为划分特征
  3. 从该特征中查找基尼指数最小的分类类别作为最优划分点
  4. 将当前样本划分成两类,一类是划分特征的类别等于最优划分点,另一类就是不等于
  5. 针对这两类递归进行上述的划分工作,直达所有叶子指向同一样本目标或者叶子个数小于一定的阈值

gini用来度量分布不均匀性(或者说不纯),总体的类别越杂乱,GINI指数就越大(跟熵的概念很相似)

[Math Processing Error] [Math Processing Error]当前数据集中第i类样本的比例
gini越小,表示样本分布越均匀(0的时候就表示只有一类了),越大越不均匀
基尼增益

[Math Processing Error] 表示当前属性的一个混乱 [Math Processing Error]

表示当前类别占所有类别的概率
最终Cart选择GiniGain最小的特征作为划分特征

以ID3中的贷款的那棵树为样例:
基尼指数有房产:[Math Processing Error]

基尼指数无房产:[Math Processing Error]
基尼增益为:[Math Processing Error]

回归树:

回归树是以平方误差最小化的准则划分为两块区域

  1. 遍历特征计算最优的划分点s,
    使其最小化的平方误差是:[Math Processing Error]

计算根据s划分到左侧和右侧子树的目标值与预测值之差的平方和最小,这里的预测值是两个子树上输入xi样本对应[Math Processing Error]

  • 的均值
  • 找到最小的划分特征j以及其最优的划分点s,根据特征j以及划分点s将现有的样本划分为两个区域,一个是在特征j上小于等于s,另一个在在特征j上大于s

    [Math Processing Error]

 

  1. 进入两个子区域按上述方法继续划分,直到到达停止条件

这里面的最小化我记得可以使用最小二乘法来求

关于剪枝:用独立的验证数据集对训练集生长的树进行剪枝(事后剪枝)。

停止条件

  1. 直到每个叶子节点都只有一种类型的记录时停止,(这种方式很容易过拟合)
  2. 另一种时当叶子节点的记录树小于一定的阈值或者节点的信息增益小于一定的阈值时停止

关于特征与目标值

  1. 特征离散 目标值离散:可以使用ID3,cart
  2. 特征连续 目标值离散:将连续的特征离散化 可以使用ID3,cart
  3. 特征离散 目标值连续

决策树的分类与回归

  • 分类树
    输出叶子节点中所属类别最多的那一类
  • 回归树
    输出叶子节点中各个样本值的平均值

理想的决策树

  1. 叶子节点数尽量少
  2. 叶子节点的深度尽量小(太深可能会过拟合)

解决决策树的过拟合

  1. 剪枝
    1. 前置剪枝:在分裂节点的时候设计比较苛刻的条件,如不满足则直接停止分裂(这样干决策树无法到最优,也无法得到比较好的效果)
    2. 后置剪枝:在树建立完之后,用单个节点代替子树,节点的分类采用子树中主要的分类(这种方法比较浪费前面的建立过程)
  2. 交叉验证
  3. 随机森林

优缺点

优点:

  1. 计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征;
    缺点:
  2. 单颗决策树分类能力弱,并且对连续值变量难以处理;
  3. 容易过拟合(后续出现了随机森林,减小了过拟合现象);

随机森林RF

随机森林是有很多随机得决策树构成,它们之间没有关联。得到RF以后,在预测时分别对每一个决策树进行判断,最后使用Bagging的思想进行结果的输出(也就是投票的思想)

学习过程

  1. 现在有N个训练样本,每个样本的特征为M个,需要建K颗树
  2. 从N个训练样本中有放回的取N个样本作为一组训练集(其余未取到的样本作为预测分类,评估其误差)
  3. 从M个特征中取m个特征左右子集特征(m<<M)
  4. 对采样的数据使用完全分裂的方式来建立决策树,这样的决策树每个节点要么无法分裂,要么所有的样本都指向同一个分类
  5. 重复2的过程K次,即可建立森林

预测过程

  1. 将预测样本输入到K颗树分别进行预测
  2. 如果是分类问题,直接使用投票的方式选择分类频次最高的类别
  3. 如果是回归问题,使用分类之后的均值作为结果

参数问题

  1. 这里的一般取m=sqrt(M)
  2. 关于树的个数K,一般都需要成百上千,但是也有具体的样本有关(比如特征数量)
  3. 树的最大深度,(太深可能可能导致过拟合??)
  4. 节点上的最小样本数、最小信息增益

泛化误差估计

使用oob(out-of-bag)进行泛化误差的估计,将各个树的未采样样本作为预测样本(大约有36.8%),使用已经建立好的森林对各个预测样本进行预测,预测完之后最后统计误分得个数占总预测样本的比率作为RF的oob误分率。

学习算法

  1. ID3算法:处理离散值的量
  2. C45算法:处理连续值的量
  3. Cart算法:离散和连续 两者都合适?

关于CART

Cart可以通过特征的选择迭代建立一颗分类树,使得每次的分类平面能最好的将剩余数据分为两类

[Math Processing Error]

,表示每个类别出现的概率和与1的差值,
分类问题:[Math Processing Error]
回归问题:[Math Processing Error]

查找最佳特征f已经最佳属性阈值th 小于th的在左边,大于th的在右边子树

优缺点

  1. 能够处理大量特征的分类,并且还不用做特征选择
  2. 在训练完成之后能给出哪些feature的比较重要
  3. 训练速度很快
  4. 很容易并行
  5. 实现相对来说较为简单

GBDT

GBDT的精髓在于训练的时候都是以上一颗树的残差为目标,这个残差就是上一个树的预测值与真实值的差值。

比如,当前样本年龄是18岁,那么第一颗会去按18岁来训练,但是训练完之后预测的年龄为12岁,差值为6,
所以第二颗树的会以6岁来进行训练,假如训练完之后预测出来的结果为6,那么两棵树累加起来就是真实年龄了,
但是假如第二颗树预测出来的结果是5,那么剩余的残差1就会交给第三个树去训练。

Boosting的好处就是每一步的参加就是变相了增加了分错instance的权重,而对已经对的instance趋向于0,这样后面的树就可以更加关注错分的instance的训练了

Shrinkage

Shrinkage认为,每次走一小步逐步逼近的结果要比每次迈一大步逼近结果更加容易避免过拟合。

[Math Processing Error]

就像我们做互联网,总是先解决60%用户的需求凑合着,再解决35%用户的需求,最后才关注那5%人的需求,这样就能逐渐把产品做好.

调参

  1. 树的个数 100~10000
  2. 叶子的深度 3~8
  3. 学习速率 0.01~1
  4. 叶子上最大节点树 20
  5. 训练采样比例 0.5~1
  6. 训练特征采样比例 sqrt(num)

优缺点:

优点:

  1. 精度高
  2. 能处理非线性数据
  3. 能处理多特征类型
  4. 适合低维稠密数据
    缺点:
  5. 并行麻烦(因为上下两颗树有联系)
  6. 多分类的时候 复杂度很大

BP

最小二乘法

最小二乘法是一种数学的优化技术,通过求最小化平方误差来寻找最佳的函数匹配
假设现在有二维的观测数据[Math Processing Error]

,求[Math Processing Error]

的拟合。

现设[Math Processing Error]

如果有[Math Processing Error]能得到[Math Processing Error]最小,则该线比较理想
所以先变为求[Math Processing Error] ,这个与[Math Processing Error]等价
[Math Processing Error]
那么现设[Math Processing Error]

求其最小即可

上述就是最小二乘原则,估计[Math Processing Error]

的方法称为最小二乘法

先求[Math Processing Error]

[Math Processing Error]的偏导:

[Math Processing Error]

[Math Processing Error]
现设:

[Math Processing Error]
则代入上述偏导:

[Math Processing Error]
求该行列式:

[Math Processing Error]

所以有唯一解

最后记:

[Math Processing Error]

[Math Processing Error]

百度文库-最小二乘法

EM

EM用于隐含变量的概率模型的极大似然估计,它一般分为两步:第一步求期望(E),第二步求极大(M),
如果概率模型的变量都是观测变量,那么给定数据之后就可以直接使用极大似然法或者贝叶斯估计模型参数。
但是当模型含有隐含变量的时候就不能简单的用这些方法来估计,EM就是一种含有隐含变量的概率模型参数的极大似然估计法。

应用到的地方:混合高斯模型、混合朴素贝叶斯模型、因子分析模型

Bagging

  1. 从N样本中有放回的采样N个样本
  2. 对这N个样本在全属性上建立分类器(CART,SVM)
  3. 重复上面的步骤,建立m个分类器
  4. 预测的时候使用投票的方法得到结果

Boosting

boosting在训练的时候会给样本加一个权重,然后使loss function尽量去考虑那些分错类的样本(比如给分错类的样本的权重值加大)

凸优化

在机器学习中往往是最终要求解某个函数的最优值,但是一般情况下,任意一个函数的最优值求解比较困难,但是对于凸函数来说就可以有效的求解出全局最优值。

凸集

一个集合C是,当前仅当任意x,y属于C且[Math Processing Error]

,都有[Math Processing Error]

属于C
用通俗的话来说C集合线段上的任意两点也在C集合中

凸函数

一个函数f其定义域(D(f))是凸集,并且对任意x,y属于D(f)和[Math Processing Error]

都有

[Math Processing Error]

用通俗的话来说就是曲线上任意两点的割线都在曲线的上方

常见的凸函数有:

  • 指数函数[Math Processing Error]

 

  • 负对数函数[Math Processing Error]

 

  • 开口向上的二次函数等

凸函数的判定:

  1. 如果f是一阶可导,对于任意数据域内的x,y满足[Math Processing Error]
  1. 如果f是二阶可导,

凸优化应用举例

  • SVM:其中由[Math Processing Error]

转向[Math Processing Error]

  • 最小二乘法?
  • LR的损失函数[Math Processing Error]

 

参考

[1]. http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html
[2]. http://www.cnblogs.com/biyeymyhjob/archive/2012/07/18/2595410.html
[3]. http://blog.csdn.net/abcjennifer/article/details/7716281
[4]. http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
[5]. 《统计学习方法》.李航

备注

资料主要来源于网络或者《统计学习方法》,还有自己一小部分的总结,如果错误之处敬请指出


本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权kubiCode,并且,不得用于商业用途。如您有任何疑问或者授权方面的协商,请给我留言

程序员必读的书,StackOverflow 创始人推荐

伯乐在线/艾凌风

原载: http://blog.jobbole.com/100450/

Stack Overflow 创始人 Jeff Atwood 推荐给程序员的书。


本文最近一次更新是2015年3月份。 为什么我很少更新我的读书清单呢?因为虽然在这 10 年里,计算机一直在迅猛发展,但人始终却没有变。 为了开发出更好的软件,你需要理解人是如何工作的,这也是我推荐的这些书所关注的领域。

代码大全2

Steve McConnell所著的《代码大全2》 就像是为软件开发者所编写的《烹饪的乐趣》。能够去阅读这本书,说明你很享受自己的工作,并且在认真地对待自己的工作。同时,你还想要不断的进步。在《代 码大全》中Steve写到,普通程序员每年阅读的技术书籍不到一本。仅仅是阅读这本书的行为,就可能已经把你和你90%的程序员同事们区别开来了。

我非常喜欢这本书,以至于本站(coding horror)的名字也源于此书。书中列举的编程反例都被打上了”Coding Horror”的标签。没有什么比Coding Horror更有意思的了,直到你自己遇上一次。突然间一切都不那么有趣了。帮自己一个忙,把这本书作为你要研读的第一本书,并把它作为你推荐给同事的第一本书。

人月神话

这本书可能是我们这领域唯一的一本经典了。如果你还没读过,那就太不对了。

我敢说任何一个拿起这本书的程序员都没有发现关于那个早就不使用操作系统的故事以及它的开发团队之间惊人的相关性。这本二十五年前出版的老书大胆的阐明了一个观点:计算机也许会变,但人永远不会。

花时间去阅读这本经典书籍一定比你去阅读当今哪些几千页的大部头书籍更加有意义。

点石成金 : 访客至上的网页设计秘笈

在关于可用性的书籍中,这是我读过的最好的一本书。书名提到了“网页的可用性”,但是请不要被这一虚假的特指所迷惑。Steve Krug在书中提到了可用性这一概念所包含的全部重要内容,而且讲的很好,书也很有意思。如果你只想读一本关于可用性的书,那么读这本就可以了。这本书囊括了很多有用的信息,并且以简练的、平易近人的方式将这些信息呈现给你。这本书对于很多人都是适用的:技术人员、非技术人员、用户、开发者、经理等凡是你能说出名字的任何人。

呃。。。好吧。从来没有开过这样的会议。顺便提一下,解决这个问题的办法是进行一次快速的可用性测试。请想象这样的场景:基于实际数据来做决定而不是基于一场为了通过说服所有持有反对意见的人的辩论。真是革命性的转变啊!

快速软件开发

这本书的全称是:《快速软件开发:掌控软件开发进度》,这个标题不仅冗长还有些可笑,更不幸的是它用词不当。

快速软件开发》并不是一本关于快速开发的书。它讲述的是软件开发失败这一现实问题。大多数的软件开发项目都会失败:有时是没能按期交付,有时是开发出了不合格的产品,甚至有的时候都没有能够完成开发。这并不是什么论点,而是一个事实。一个令人不快的事实是:你的团队要足够的好,才能避免失败,更别说取得成功了。尽管这一切听起来可能会令人沮丧——好吧,这确实令人沮丧——但你仍然会想要去读一读这本书。

为什么呢?因为你曾经犯过的错误,或者其他人犯过的错误,如果能够避免再犯,就已经成功了一半*了。这本书传达了一个真谛:犯错是有益的——只要这些错误是一些未曾犯过的错误。如果你犯了一些经典的老错误,那么你在没有开始前就已经失败了。同时,你可能并没有意识到,你现在就在犯着类似的错误。

对我们这一行来讲,唯一不变的就是变化。所以拥抱变化和采取不同的“快速”开发技术是很自然的一件事。但是这句话反过来说就不对了。我们不能认为自 1970年以来,所有的旧式软件开发课程同今天的技术相比已经是废弃的或是没用的了。老生常谈的一件事是:计算机改变了很多;人却没有。在你准备开始前, 至少对于哪些可行哪些不可行有个认识。用 McConnell 的话说就是:“粉刷之前请先阅读油漆桶上的说明文字。” 诚然,这听上去已经足够直白了,但是直到你读了这本书,你才意识到,我们很少会真正去这么做。

  • 根据书的内容,严格来讲,有四分之一的内容。但是我觉得要比这多得多。

人件

如果你曾经看到过一个全明星球队,因为教练水平不高而战绩不佳,那你肯定会喜欢这本书。如果团队成员不能相互沟通或是认同一件事,那么你的团队中不 论有多少“编程之星”都没用。如果一个开发者经常被一些琐事打断,即使他是个天才,也不能够高效的工作。开发者并不清楚他们自己的社交技能,但是,讽刺的 是:这可能是你项目成功的关键因素。如果你希望成为一个真正的“团队领袖”,而不是徒有其名,你需要看看这本书。

尽管《人件》中有很多不错的、完全正确的观点,但是书中描绘的这种雇员管理对于大多数公司来讲纯粹是幻想。但是至少你可以在你的工作环境,或是你的团队出现问题的时候有所察觉——最重要的是,你可以知道怎么做。

设计心理学

软件开发有时候是一件极度令人沮丧的事情,因为很多事情都会做错。我们做的很多事情都是防御性的:尝试在情况变坏之前做出预测。这令人十分伤神,并 且最终可能会被证明是错的。我经常根非技术人员这样去解释这个问题:就好像去造一块有上千个运动部件的手表,其中每个部件都会动不动就随机坏掉。棒极了!

软件开发是很困难的,这点没错,但是做一个门也很困难。设计的微妙之处存在于我们接触到的每个事物,不论是最新的 SQL 引擎还是一双普通的鞋。这本书会让你对“恶魔藏在细节里”这句话产生新的认识。如果设计一个门并不是我们想象的那样是一件很简单的事的话,也许是时候因为 意识到我们也无法设计出完美的软件而给自己放个假了。

About Face:交互设计精髓

Alan Cooper 是 Visual Basic语言之父,可用性领域的教父级人物。我拥有这本书的多个版本(现在是第四版),这本书是少数越修订越好的书,越来越多的合作者向本书加入了不同的观点。

《About Face》一书中包含了关于移动应用和 web 应用的通用实用指导。 以老掉牙的 Windows 95 人机界面作为例子来进行阐释,将该系统已经改进的地方(在进行对话框选择前使用视觉样例进行展示)和还没有改进的部分(使用愚蠢的模态框来停止正在运行的 进程)进行对比是很有趣的一件事。

这是一本非常有用的书;我在我自己的项目中用到了书中提到了全部的指导。

交互设计之路:让高科技产品回归人性

正是这本书向世人介绍了角色模型的概念:不要把用户想象为一群抽象的、难以描述的、无定形的人。角色模型指导我 们和特定的用户进行交谈,这些用户有名字,有个性,有需求也有目标。我们的用户是否需要打印预览功能?谁知道?但是,如果对于客户经理 Gerry Manheim 来说,打印每周花销报表是他的工作,那你最好提供打印预览功能给他。这里边没有什么神奇的东西;一如既往的是,一切都归结于你的用户是谁,他们究竟要做什 么——角色模型是解决这一问题的好办法。

程序员认为自己在设计产品可用性时能够代表“普通”用户作出某些决定,但是在现实世界中,他们完全不能代表用户。程序员是一群怪人,充其量能算是是 一种极端的用户——就好比“逻辑人(Homo Logicus)” vs. “现代智人(Homo Sapiens)”。除非你碰巧开发的是一款编译器,因为编译器的用户也是程序员。

这本书有一个隐含的观点,有的时候,无论你的设计有多好,就像由 Alan 担任顾问并在此书中用作案例的这两款软件:扫描仪软件以及网页开发软件,在市场上都没有能够取得成功,但这和软件的可用性无关,因为它们的可用性已经被证明是非常优秀的了。有些时候,非常优秀的产品同样会失败,而其失败的原因是你无法掌控的,无论你多么努力。对于此书中的一些华而不实的词藻,你可以用以上事实将自己拉回到现实当中。

  • 我有书中图片里的同款 USB 扫描仪,设备配套对软件令我印象深刻。后来我把这台扫描仪送给了我父亲。有一次和他打电话,我并没有提到任何关于扫描仪的事情,但是他却提到他很喜欢这个扫描软件。这一切都发生在这本书出版之前!

编程珠玑

在这里推荐《编程珠玑》,我本来有些犹豫,因为这本书中介绍了很多底层的编程技巧。但是书中确实包含了很多软件开发中的『珠玑』,所以值得每位开发者花时间去读一读。任何包含这幅图的书…

…都是物有所值的。利用TRS-80 与 DEC Alpha 的对比来阐释48n和n3算法的差别?各位,真的没有比这样做更合适的了。能和大师一起工作一年是最好的了,退而求其次,你也可以读读《编程珠玑》。这本书将很多软件工程师的智慧提炼成了简洁易懂的文字,纳入其中。

我不会骗你:有一些章节是可以完全略过的。比如说,第11、13和14章分别介绍了如何实现排序,堆和哈希算法,考虑到现如今这些基本算法都有成熟 的库可以使用,我无法想象再去实现它们有什么意义。 对于那些和教科书一样恼人的习题,这里有一个很实在的建议。浏览一下这本书,跳过代码部分。有件事可能会让你失望,第八章“粗略估算”(Column 8, “Back of the Envelope” )是必须要看的。这里有我见过的最佳的估算方法。这章还解释了一些疯狂的面试问题,一些公司很喜欢用这些问题提问我们。

如果你还在犹豫,你也可以在网上阅读一下此书的样章。最近我用书中关于字符串的章节去解释了马尔科夫链在生成人造数据填充空数据库时的作用。

程序员修炼之道:从小工到专家

看这本书时常会让我想到《编程珠玑》,但是实际上这本书更好一些。因为这本书没有那么的专注于代码,取而代之的的是,作者在这本书中总结了实际工作中发现的全部实用方法。并非所有的方法都是与编程相关的。比如,问问自己『为什么我要做这件事?是否值得这样做?』,跳出固有的思维方式。你应该把这些东西融入到你和你同事的日常生活中。正是这些内容,使得《程序员修炼之道》成为了一本如此优秀的书。

如果你想再多了解一些这本书,我建立一个HTML 版本的插页参考卡片,这个参考卡片很好的总结了这本书的内容。

Web 可用性设计

Jakob Neilsen 因为他所创建的可用性网站而出名。1989年,当他的书出版的时候,他就是一个可用性专家了。《Web 可用性设计》是一本专注于 web 可用性的新手教程,所以它和面向 GUI 的 Cooper 的那本书有所不同。

定量信息的视觉显示

视觉解释:图像和数量,证据与线索

想象信息

美丽的证据

信息是很美的。一个设计良好的 GUI 也很美。

除非你是个完美主义者(或是一个受虐狂,我猜),否则你没有必要把一套四本全买齐,但是前两本是必须的。

Chris Sells 对 Tufte 的书有些有趣的见解,这些见解源于他2004年6月参加Tufte研讨会时的见闻。

正则表达式经典实例

众所周知 UNIX 非常复杂、难以理解。正则表达式也是这样。

我可能已经是『保持简单直白』俱乐部的正是成员了,但是我愿意将正则表达式作为一个特例。若能正确的书写正则表达式,则在处理字符串时,它可以帮你节省非常多的时间。我从来没有遇到过一个项目,正则表达不能在某些地方为我们提供方便。

一旦你深入研究了正则表达式,你就会沉醉于正则表达式惊人的能力和潜力,这一切也造就了 Perl。记住,绝对的权利会导致绝对的腐败。但是同样非常的赞。

译者简介


艾凌风:兴趣点:Python,C/C++,在线教育,英语

外行朋友值得一读的 5 本经典数学书

伯乐在线 – 熊铎

原载: http://blog.jobbole.com/55179/

有很多人让我给外行朋友推荐一些优秀的数学书,他们之中有些是没在大学学过高等课程的,只对学习数学感兴趣的朋友,还有些对历史人物比对数学成果更感兴趣。具有讽刺意味的是,当你是滑铁卢大学数学专业的学生之后,你到第四年才有机会上一门讲述数学历史的课程,会向你解释一些隐藏在数学之后的心态和哲学,而非只是定理和证明。

这5本书是我推荐给那些想了解数学思想和原理的朋友。

1.《A History of Mathematics | 数学史》作者:Carl B. Boyer

这是大概十年以前我上过的数学史课程的教材,而这本书仍是最好,最为深入讨论过去几千年中数学发展的书之一。其由埃及和前古典数学开始,解释一个简单的任务是如何因为缺少数学工具而变得复杂,然后随着时间推移各种工具的开发使我们能够理解量子理论。这本书很厚,超过700页的内容(编注:中文精装版1108页),但是非技术型读者也完全可以毫无障碍的阅读。

这本书非常值得任何图书馆收藏,它也可以每章分开来读,每章覆盖了数学史的一个不同方面。

2.《Journeys Through Genius | 天才引导的历程:数学中的伟大定理》作者:William Dunham

很多年前我在一个二手店选了这本书,仅仅是因为它吸引了我的注意力,并且价格不错。我觉得它读起来会比较有意思,但是我从没想过因为其内容而惊讶和兴奋,直到我开始认真阅读。这本书拿了一些数学上最为重要和变化后的定理,并用简洁且易于接受的方法解释它们。

借助一种有趣且令人愉快的方式,把定理发展过程中的历史文物展示出来,在上下文中保持了发现在当时的重要性。此外,更加重要的是,在定理的解释之外,这些为众人所知的工作背后的人物和生活以及他们的各种工作一起带入到了文中。如果你想对数学上最伟大的定理了解更多,这本书很好读并值得你拥有。

3. 《The Mathematical Experience | 数学经验》作者 Philip J.Davis、Reuben Hersh

我的数学史课程教授把他的这本书的复印本借给我,而这本书或许是我读过的最开眼界的读物。我花费了整个周末来读这本书,从头至尾,然后又读了一遍,狼吞虎咽并吸收其中所有的思想和观点。

从讨论成为一个数学家意味着什么,和从由全世界数学家所分享的经验的视角,毫无疑问这是我书库中最好的书。从哲学到数学家的社会情感经验,这本书涵盖了数学的全部领域。这本书写的很好,简洁并且触动了我的心弦。在这本书中,我真的感觉到我正在读一个已经知道什么叫爱数学,并且因数学感到兴奋的人,而不用深入钻研那些原本的推导过程。如果在这整个列表中有那么一本我建议去立即买的书,那一定是这本。快去买吧!

4. 《Proofs from the Book | 数学天书中的证明》作者:Martin Aigner、Günter M. Ziegler

Paul Erdös是20世纪多产的数学家,他通常涉及到及其优美的证明,就如同从“从上帝自己的书中”中得到一样。

这本书是一些很多数学家认为必要和重要的证明的集合,同时也是优雅和漂亮的。

如果你想要一本读起来比较容易,但可以用原始的严密的方法探索其中的定理的书,那这本书一定适合你。它覆盖了十分宽泛的领域中,一些最好的证明。

5. 《Proofs and Refutations | 证明与反驳-数学发现的逻辑》作者:Imre Lakatos

这本书可能是本文介绍的最高端的书。它竟然出色地采用了教授和学生之间的讨论的形式来写。Lakatos将数学过程交织在一起,包括了数学如何真正完成和定理如何应用于各种各样的易于理解的技术。

如果你或者你所认识的任何人,真的考虑转入数学这一行,我会推荐他读这本书。这尤其包括教师,因为他解释了如何通过技术和哲学思想,帮助你全面理解和创造性地运用新学到的工具,使你前进。这真的是一本十分精彩,并且能很快读完的书。

 

机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)

by (廖君)

Source: https://github.com/ty4z2008/Qix/blob/master/dl2.md

介绍:使用卷积神经网络的图像缩放.

介绍:ICML2015 论文集,优化4个+稀疏优化1个;强化学习4个,深度学习3个+深度学习计算1个;贝叶斯非参、高斯过程和学习理论3个;还有计算广告和社会选择.ICML2015 Sessions.

介绍:使用卷积神经网络的图像缩放.

介绍:,第28届IEEE计算机视觉与模式识别(CVPR)大会在美国波士顿举行。微软研究员们在大会上展示了比以往更快更准的计算机视觉图像分类新模型,并介绍了如何使用Kinect等传感器实现在动态或低光环境的快速大规模3D扫描技术.

介绍:(文本)机器学习可视化分析工具.

介绍:机器学习工具包/库的综述/比较.

介绍:数据可视化最佳实践指南.

介绍:Day 1Day 2Day 3Day 4Day 5.

介绍:深度学习之“深”——DNN的隐喻分析.

介绍:混合密度网络.

介绍:数据科学家职位面试题.

介绍:准确评估模型预测误差.

介绍:Continually updated Data Science Python Notebooks.

介绍:How to share data with a statistician.

介绍:来自Facebook的图像自动生成.

介绍:How to share data with a statistician.

介绍:(Google)神经(感知)会话模型.

介绍:The 50 Best Masters in Data Science.

介绍:NLP常用信息资源.

介绍:语义图像分割的实况演示,通过深度学习技术和概率图模型的语义图像分割.

介绍:Caffe模型/代码:面向图像语义分割的全卷积网络,模型代码.

介绍:深度学习——成长的烦恼.

介绍:基于三元树方法的文本流聚类.

介绍:Free Ebook:数据挖掘基础及最新进展.

介绍:深度学习革命.

介绍:数据科学(实践)权威指南.

介绍:37G的微软学术图谱数据集.

介绍:生产环境(产品级)机器学习的机遇与挑战.

介绍:神经网络入门.

介绍:来自麻省理工的结构化稀疏论文.

介绍:来自雅虎的机器学习小组关于在线Boosting的论文 .

介绍:20个最热门的开源(Python)机器学习项目.

介绍:C++并行贝叶斯推理统计库QUESO,github code.

介绍:Nature:LeCun/Bengio/Hinton的最新文章《深度学习》,Jürgen Schmidhuber的最新评论文章《Critique of Paper by “Deep Learning Conspiracy” (Nature 521 p 436)》.

介绍:基于Scikit-Learn的预测分析服务框架Palladium.

介绍:John Langford和Hal Daume III在ICML2015上关于Learning to Search的教学讲座幻灯片.

介绍:读完这100篇论文 就能成大数据高手,国内翻译.

介绍:NLP课程《社交媒体与文本分析》精选阅读列表.

介绍:写给开发者的机器学习指南.

介绍:基于维基百科的热点新闻发现.

介绍:(Harvard)HIPS将发布可扩展/自动调参贝叶斯推理神经网络.

介绍:面向上下文感知查询建议的层次递归编解码器.

介绍:GPU上基于Mean-for-Mode估计的高效LDA训练.

介绍:从实验室到工厂——构建机器学习生产架构.

介绍:适合做数据挖掘的6个经典数据集(及另外100个列表).

介绍:Google面向机器视觉的深度学习.

介绍:构建预测类应用时如何选择机器学习API.

介绍:Python+情感分析API实现故事情节(曲线)分析.

介绍:(R)基于Twitter/情感分析的口碑电影推荐,此外推荐分类算法的实证比较分析.

介绍:CMU(ACL 2012)(500+页)面向NLP基于图的半监督学习算法.

介绍:从贝叶斯分析NIPS,看同行评审的意义.

介绍:(RLDM 2015)计算强化学习入门.

介绍:David Silver的深度强化学习教程.

介绍:深度神经网络的可解释性.

介绍:Spark快速入门.

介绍:TalkingMachines:面向体育/政治和实时预测的机器学习.

介绍:Stanford社交网络与信息网络分析课程资料+课设+数据.

介绍:David Silver(DeeMind)的强化学习课程,slide.

介绍:基于Theano/GPU的高效深度学习.

介绍:来自微软的.

介绍:(Go)情感分析API服务Sentiment Server.

介绍:受限波尔兹曼机初学者指南.

介绍:Mining and Summarizing Customer Reviews ,Mining High-Speed Data Streams,Optimizing Search Engines using Clickthrough Data.

介绍:Nvidia深度学习课程.

介绍:2015年深度学习暑期课程,推荐讲师主页.

介绍:这是一篇关于百度文章《基于深度学习的图像识别进展:百度的若干实践》的摘要,建议两篇文章结合起来阅读.

介绍:视频标注中的机器学习技术.

介绍:博士论文:(Ilya Sutskever)RNN训练.

介绍:深度神经网络的灰色区域:可解释性问题,中文版.

介绍:Golang 实现的机器学习库资源汇总.

介绍:深度学习的统计分析.

介绍:面向NLP的深度学习技术与技巧.

介绍:Kaggle’s CrowdFlower竞赛NLP代码集锦.

介绍:斯坦福的自然语言理解课程.

介绍:Deep Learning与Shallow Learning 介绍

介绍:这是一本机器学习的电子书,作者Max Welling先生在机器学习教学上面有着丰富的经验,这本书小但精致.

介绍:由荷兰阿姆斯特丹大学 & 谷歌瑞士著.

介绍:介绍个乐于总结和翻译机器学习和计算机视觉类资料的博客,包含的内容:Hinton的CSC321课程的总结;Deep Learning综述;Notes on CNN的总结;python的原理总结;Theano基础知识和练习总结;CUDA原理和编程;OpenCV一些总结.

介绍:针对具体问题(应用场景)如何选择机器学习算法(系列).

介绍:数据科学免费书分类集合

介绍:深度学习在语音合成最新进展有哪些?推荐MSRA的Frank Soong老师关于语音合成的深度学习方法的录像和幻灯片与以及谷歌的LSTM-RNN合成介绍,论文

介绍:新书(可免费下载):数据科学的艺术

介绍:模式识别与机器学习书籍推荐,本书是微软剑桥研究院大神Bishop所写,算是最为广为认知的机器学习教材之一,内容覆盖全面,难度中上,适合研究生中文版 or 备份

介绍:数据可视化介绍(23页袖珍小册子)

介绍:这篇论文荣获EMNLP2015的最佳数据/资源奖优秀奖,标注的推特数据集

介绍:作者在深度学习的思考.

介绍:数据可视化常用工具软件资源汇总

介绍:Buffalo大学教授Sargur Srihari的“机器学习和概率图模型”的视频课程

介绍:耶路撒冷希伯来大学教授Shai Shalev-Shwartz和滑铁卢大学教授Shai Ben-David的新书Understanding Machine Learning: From Theory to Algorithms,此书写的比较偏理论,适合对机器学习理论有兴趣的同学选读

介绍:机器学习学习清单

介绍:知乎上面的一篇关于NLP界有哪些神级人物?提问。首推Michael Collins

介绍:机器学习与NLP专家、MonkeyLearn联合创始人&CEO Raúl Garreta面向初学者大体概括使用机器学习过程中的重要概念,应用程序和挑战,旨在让读者能够继续探寻机器学习知识。

介绍:(IPN)基于Scikit-Learn的GBRT(Gradient Boost Regression Tree)教程,slide

介绍: 无需做深度学习就能用的分布式深度学习软件.

介绍: 在亚马逊数据和众包Mechanical Turk上,实现了来自彩票和拍卖的机制,以收集用户对产品的乐意购买价格(WTP,willingness-to-pay)训练集。 E-commerce Recommendation with Personalized Promotion [Zhao,RecSys15] 回归模型预测未知WTP,提升卖家利润和消费者满意度

介绍:来自伯克利分校的大规模机器学习.

介绍:来自52ml的机器学习资料大汇总.

介绍:这本书的作者McKeown是2013年世界首个数据科学院(位于哥伦比亚大学)主任,她亦是ACL、AAAI和ACM Fellow .

介绍:EMNLP-15文本摘要若干.

介绍:来自Netflix的Xavier Amatriain在Summer School 2014 @ CMU上长达4小时的报告,共248页,是对推荐系统发展的一次全面综述,其中还包括Netflix在个性化推荐方面的一些经验介绍.

介绍:(ECML PKDD 2015)大数据流挖掘教程,此外推荐ECML PKDD 2015 Tutorial列表.

介绍:Spark上的Keras深度学习框架Elephas.

介绍:Surya Ganguli深度学习统计物理学.

介绍:(系统/算法/机器学习/深度学习/图模型/优化/…)在线视频课程列表.

介绍:(PyTexas 2015)Python主题建模.

介绍:Hadoop集群上的大规模分布式机器学习.

介绍:基于LinkedIn数据得出的深度学习热门”东家”排行.

介绍:(c++)神经网络手把手实现教程.

介绍:香港中文大学汤晓鸥教授实验室公布的大型人脸识别数据集: Large-scale CelebFaces Attributes (CelebA) Dataset 10K 名人,202K 脸部图像,每个图像40余标注属性.

介绍:面向机器视觉的无监督特征学习,Ross Goroshin’s webpage.

介绍:谷歌研究院Samy Bengio等人最近写的RNN的Scheduled Sampling训练方法论文.

介绍:机器学习基本算法简要入门.

介绍:Github机器学习/数学/统计/可视化/深度学习相关项目大列表.

介绍:CMU的信息论课程.

介绍:谷歌研究院Samy Bengio等人最近写的RNN的Scheduled Sampling训练方法论文.

介绍:基于Hadoop集群的大规模分布式深度学习.

介绍:来自斯坦福大学及NVIDIA的工作,很实在很实用。采用裁剪网络连接及重训练方法,可大幅度减少CNN模型参数。针对AlexNet、VGG等模型及ImageNet数据,不损失识别精度情况下,模型参数可大幅度减少9-13倍.

介绍:无需做深度学习就能用的分布式深度学习软件,github.

介绍:当今世界最NB的25位大数据科学家,通过他们的名字然后放在google中搜索肯定能找到很多很棒的资源译文.

介绍:Nils Reimers面向NLP的深度学习(Theano/Lasagne)系列教程.

介绍:主讲人是陶哲轩,资料Probability: Theory and Examples,笔记.

介绍:数据科学(学习)资源列表.

介绍:应对非均衡数据集分类问题的八大策略.

介绍:重点推荐的20个数据科学相关课程.

介绍:递归神经网络.

介绍:(HOG)学习笔记.

介绍:计算建模/计算神经学课程汇总.

介绍:(Yelp)基于深度学习的商业图片分类.

介绍:免费在线书《Neural Networks and Deep Learning》神经网络与深度学习。目前提供了前四章的草稿,第一章通过手写数字识别的例子介绍NN,第二章讲反向传播算法,第三章讲反向传播算法的优化,第四章讲NN为什么能拟合任意函数。大量python代码例子和交互动画,生动有趣.中文版

介绍:数据科学大咖荐书(入门).

介绍:NLP 深度学习资源列表.

介绍:很多arXiv上面知名论文可以在这个网站找到github的项目链接.

介绍:深度学习在视觉跟踪的探索.

介绍:Spark机器学习入门实例——大数据集(30+g)二分类.

介绍:保罗艾伦人工智能实验室表示,Google Scholar是十年前的产物,他们现在想要做进一步的提高。于是推出了全新的,专门针对科学家设计的学术搜索引擎Semantic Scholar.

介绍:半监督学习,Chapelle.篇篇都是经典,作者包括Vapnik,Bengio,Lafferty,Jordan.此外推荐Xiaojin (Jerry) Zhu编写的Introduction to Semi-Supervised Learning.

介绍:Spark机器学习入门实例——大数据集(30+g)二分类.

介绍:为入门者准备的深度学习与神经网络免费资源.

介绍:Google 开源最新机器学习系统 TensorFlow,此外提供TensorFlow白皮书white paper of tensorflow 2015.hacker news,Google大牛解读TensorFlow

介绍:三星开源的快速深度学习应用程序开发分布式平台.

介绍:分布式机器学习工具包.

介绍:语义大数据——大数据/事件处理的语义方法.

介绍:LSTM(Long Short Term Memory)和RNN(Recurrent)学习教程.

介绍:Princeton Vision Group的深度学习库开源.

介绍:基于AWS的自动分布式科学计算库Ufora,Why I Open Sourced Five Years of Work.

介绍:(PyCon SE 2015)深度学习与深度数据科学.

介绍:推荐南京大学机器学习与数据挖掘研究所所长——周志华教授的Google学术主页.

介绍:免费书:面向数据科学的高级线性模型.

介绍:基于知识迁移的神经网络高效训练Net2Net.

介绍:徐亦达机器学习课程 Variational Inference.

介绍:深度神经网络结构学习.

介绍:来自斯坦福大学的Multimodal Deep Learning papers.

介绍:深度学习简析,TensorFlow,Torch,Theano,Mxnet.

介绍:这个专栏是一个stanford学生做的CS183c课程的一个note,该课程是由Reid Hoffman等互联网boss级人物开设的,每节课请一位巨头公司的相关负责人来做访谈,讲述该公司是怎么scale的。最新两期分别请到了雅虎的梅姐 和airbnb创始人Brian Chesky。.

介绍:基于分布式表示的自然语言理解(100+页),论文.

介绍:推荐系统手册.

介绍:理解LSTM网络翻译.

介绍:机器学习在quora中的应用.

介绍:思维学习——RL+RNN算法信息论.

介绍:数据科学家毕业后继续学习的5种方式.

介绍:深度学习在神经网络的应用.

介绍:上下文学习,代码.

介绍:机器学习零基础入门,代码.

介绍:2015年度CCF优秀博士学位论文奖论文列表.

介绍:Learning to Hash Paper, Code and Dataset.

介绍:(PyData2015)基于Theano/Lasagne的CNN/RNN教程,github.

介绍:复旦大学邱锡鹏老师编写的神经网络与深度学习讲义,ppt.

介绍:微软亚洲研究院开源分布式机器学习工具包.

介绍:语音识别的技术原理浅析

介绍:迈克尔·I.乔丹的主页.根据主页可以找到很多资源。迈克尔·I.乔丹是知名的计算机科学和统计学学者,主要研究机器学习和人工智能。他的重要贡献包括指出了机器学习与统计学之间的联系,并推动机器学习界广泛认识到贝叶斯网络的重要性。

介绍:杰弗里·埃弗里斯特·辛顿 FRS是一位英国出生的计算机学家和心理学家,以其在神经网络方面的贡献闻名。辛顿是反向传播算法和对比散度算法的发明人之一,也是深度学习的积极推动者.通过他的主页可以发掘到很多Paper以及优秀学生的paper,此外推荐他的学生Yann Lecun主页

介绍:Yoshua Bengio是机器学习方向的牛人,如果你不知道可以阅读对话机器学习大神Yoshua Bengio(上),对话机器学习大神Yoshua Bengio(下)

介绍:google大规模深度学习应用演进

介绍:MIT出版的深度学习电子书,公开电子书

介绍:深度卷积神经网络(CNN)提取特征的数学理论

介绍:推荐微软亚洲研究院何恺明主页

介绍:《语音与语言处理》第三版(草稿)

介绍:Stanford新课”计算词汇语义学”

介绍:上海交大张志华老师的统计机器学习与机器学习导论视频链接:密码: r9ak .概率基础

介绍:computational linguistics and deep learning视频,推荐Deep Learning: An Introduction from the NLP Perspective

介绍:(BlackHat2015)深度学习应用之流量鉴别(协议鉴别/异常检测),)(https://www.blackhat.com/docs/us-15/materials/us-15-Wang-The-Applications-Of-Deep-Learning-On-Traffic-Identification.pdf),[material](https://www.blackhat.com/docs/us-15/materials/us-15-Wang-The-Applications-Of-Deep-Learning-On-Traffic-Identification-wp.pdf)

介绍:一个推荐系统的Java库

介绍:多中心图的谱分解及其在网络入侵检测中的应用(MC-GPCA&MC-GDL)

介绍:用Python学计算统计学

介绍:datumbox-framework——Java的开源机器学习框架,该框架重点是提供大量的机器学习算法和统计检验,并能够处理中小规模的数据集

介绍:递归神经网络awesome系列,涵盖了书籍,项目,paper等

介绍:Pedro Domingos是华盛顿大学的教授,主要研究方向是机器学习与数据挖掘.在2015年的ACM webinar会议,曾发表了关于盘点机器学习领域的五大流派主题演讲.他的个人主页拥有很多相关研究的paper以及他的教授课程.

介绍:机器学习视频集锦

介绍:深度机器学习库与框架

介绍:这篇文章内的推荐系统资源很丰富,作者很有心,摘录了《推荐系统实战》内引用的论文.

介绍:(天文学)贝叶斯方法/MCMC教程——统计实战

介绍:免费书:统计稀疏学习,作者Trevor HastieRob Tibshirani都是斯坦福大学的教授,Trevor Hastie更是在统计学学习上建树很多

介绍:R分布式计算的进化,此外推荐(R)气候变化可视化,(R)马尔可夫链入门

介绍:Nervana Systems在Startup.ML的主题研讨会——情感分析与深度强化学习

介绍:深度学习卷积概念详解.

介绍:Python推荐系统开发库汇总.

介绍:超棒的神经网络课程,深入浅出介绍深度学习,由Hugo Larochelle(Yoshua Bengio的博士生,Geoffrey Hinton之前的博士后)主讲,强烈推荐.

介绍:斯坦福新课程,面向视觉识别的卷积神经网络(Fei-Fei Li & Andrej Karpathy),slides+video,homework.

介绍:NIPS 2015会议总结第一部分,第二部分.

介绍:python机器学习入门资料梳理.

介绍:牛津大学著名视觉几何组VGG在IJCV16年首卷首期: Reading Text in the Wild with Convolutional Neural Networks,Jaderberg。这篇期刊文章融合了之前两篇会议(ECCV14,NIPS14ws),定位和识别图片中的文本(叫text spotting)。 端到端系统: 检测Region + 识别CNN。论文、数据和代码.

介绍:计算机视觉的一个较大的数据集索引, 包含387个标签,共收录了314个数据集合,点击标签云就可以找到自己需要的库了.

介绍:Tombone 对 ICCV SLAM workshop 的总结: the future of SLAM, SLAM vs deep learning 重点介绍了 monoSLAM 和 LSD-SLAM,而且讨论了 feature-based 和 feature-free method 的长短。在全民deep learning做visual perception的时候,再来读读CV中的 geometry.

介绍:Nervana Systems的开源深度学习框架neon发布.

介绍:ICCV 2015的ImageNet比赛以及MS COCO竞赛联合研讨会的幻灯片和视频.

介绍:Python机器学习入门.

介绍:Neural Enquirer 第二版.

介绍:[Google]基于TensorFlow的深度学习/机器学习课程.

介绍:R-bloggers网站2015″必读”的100篇文章,R语言学习的福音.

介绍:推荐书籍:<机器学习:概率视角>,样章Undirected graphical models Markov random fields.

介绍:这是一本在线的深度学习书籍,合著者有Ian Goodfellow, Yoshua Bengio 和 Aaron Courville.如果你是一位新入门的学员可以先看这本书籍Yoshua Bengio: How can one get started with machine learning?

介绍:UFLDL推荐的深度学习阅读列表.

介绍:纽约州立大学布法罗分校2015年春季机器学习课程主页.

介绍: Theano是主流的深度学习Python库之一,亦支持GPU,入门比较难.推荐Theano tutorial,Document

介绍:博士论文:神经网络统计语言模型.

介绍:文本数据的机器学习自动分类方法(下).

介绍:用RNN预测像素,可以把被遮挡的图片补充完整.

介绍:微软研究院把其深度学习工具包CNTK,想进一步了解和学习CNTK的同学可以看前几天公布的《CNTK白皮书》An Introduction to Computational Networks and the Computational Network Toolkit.

介绍: 卡尔曼滤波器教材,用尽量少的数学和推导,传授直觉和经验,全部Python示例,内容覆盖卡尔曼滤波器、扩展卡尔曼滤波,无迹卡尔曼滤波等,包括练习和参考答案

介绍:在线免费书:面向数据科学的统计推断,R示例代码,很不错GitHub.

介绍:这本书是由Yoshua Bengio撰写的教程,其内容包含了学习人工智能所使用的深度学习架构的学习资源,书中的项目已停止更新DeepLearnToolbox.

介绍:这是一份机器学习和深度学习教程,文章和资源的清单。这张清单根据各个主题进行撰写,包括了许多与深度学习有关的类别、计算机视觉、加强学习以及各种架构.

介绍:这是由Donne Martin策划收集的IPython笔记本。话题涵盖大数据、Hadoop、scikit-learn和科学Python堆栈以及很多其他方面的内容。 至于深度学习,像是TensorFlow、Theano和Caffe之类的框架也均被涵盖其中,当然还有相关的特定构架和概念等.

介绍:开源的深度学习服务,DeepDetect是C++实现的基于外部机器学习/深度学习库(目前是Caffe)的API。给出了图片训练(ILSVRC)和文本训练(基于字的情感分析,NIPS15)的样例,以及根据图片标签索引到ElasticSearch中github.

介绍:这是国外的一个科技频道,涵盖了数据挖掘,分析以及数据科学类的文章.偶尔还有机器学习精选.

介绍:经典论文:数据挖掘与统计学.

介绍:NIPS’2015 Tutorial by Yoshua Bengio.

介绍:Nervana Systems的开源深度学习框架neon发布.

介绍:犹他州大学Matt Might教授推荐的研究生阅读清单.

介绍:开放数据集.

介绍:(edX)不确定性的科学——概率论导论(MITx).

介绍:R语言开发常用软件/工具推荐.

介绍:动态记忆网络实现.

介绍:英文主页

介绍:50个大数据分析最佳学习资源(课程、博客、教程等)

介绍:深度学习的全面硬件指南,从GPU到RAM、CPU、SSD、PCIe,译文

介绍:kaiming开源作品

介绍:自然语言处理(NLP)权威指南

介绍:如何在社会媒体上做语言检测?没有数据怎么办?推特官方公布了一个十分难得的数据集:12万标注过的Tweets,有70种语言

介绍:深度学习和机器学习重要会议ICLR 2016录取文章

介绍:机器学习——深度非技术指南

介绍:数据叙事入门指南——创意生成/数据采集/内容设计相关资源推荐

介绍:WikiTableQuestions——复杂真实问答数据集

介绍:(2016版)35个超棒的免费大数据源

介绍:Ion Stoica和 Michael I. Jordan两位大家首次联手发文,CAFFE和SPARK完美结合,分布式深度学习混搭模式!github

介绍:深度学习(分类)文献集

介绍:深度学习阅读列表

介绍:探索R包的好网站Awesome 42

介绍:MLbase是Prof. Dr. Tim Kraska的一个研究项目,MLbase是一个分布式机器学习管理系统

介绍:分布式深度学习平台SINGA介绍

介绍:Spark视频集锦

介绍:R语言深度学习第一节:从零开始

介绍:图解机器学习

介绍:AMiner论文引用数据集(v7:2,244,021 papers and 4,354,534 citation relationships)

介绍:10本最佳机器学习免费书

介绍:ICCV15视频集

介绍::(Yahoo)基于Hadoop/Spark的分布式Caffe实现CaffeOnSpark

介绍:Learning to Rank简介

介绍:全球深度学习专家列表,涵盖研究者主页

介绍:Spark生态顶级项目汇总

介绍:ACM IUI’16论文集Conference Navigator – Proceedings

介绍:深入机器学习,2,3,4

介绍:Nando de Freitas在 Oxford 开设的深度学习课程,课程youtube地址,Google DeepMind的研究科学家,此外首页:computervisiontalks的内容也很丰富,如果你是做机器视觉方面的研究,推荐也看看其他内容.肯定收获也不小.还有,这位youtube主页顶过的视频也很有份量

介绍:Geoffrey Hinton在Coursera开设的MOOC

介绍:深度学习领域的Hacker news.紧跟深度学习的新闻、研究进展和相关的创业项目。从事机器学习,深度学习领域的朋友建议每天看一看

介绍:Maxout网络剖析

介绍:NIPS领域的会议paper集锦

介绍:机器学习在生物工程领域的应用,如果你从事生物工程领域,可以先阅读一篇文章详细介绍

介绍:深度学习在生物信息学领域的应用

介绍:一些关于机器学习需要知道知识,对于刚刚入门机器学习的同学应该读一读

介绍:剑桥大学机器学习用户组主页,网罗了剑桥大学一些机器学习领域专家与新闻

介绍:Randy Olson’s的一些数据分析与机器学习项目库,是学习实践的好材料

介绍:Golang机器学习库,简单,易扩展

介绍:用Swift开发苹果应用的倒是很多,而用来做机器学习的就比较少了.Swift Ai在这方面做了很多聚集.可以看看

介绍:如何向一位5岁的小朋友解释支持向量机(SVM)

介绍: reddit的机器学习栏目

介绍: 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接.做计算机视觉方向的朋友建议多关注里面的资源

介绍:香港中文大学深度学习研究主页,此外研究小组对2013年deep learning 的最新进展和相关论文做了整理,其中useful links的内容很受益

介绍: 这是一篇关于搜索引擎的博士论文,对现在普遍使用的搜索引擎google,bing等做了分析.对于做搜索类产品的很有技术参考价值

介绍: 深度学习书籍推荐(毕竟这类书比较少).

介绍: 深度学习书籍推荐(毕竟这类书比较少).

介绍: 贝叶斯定理在深度学习方面的研究论文.

介绍: 来自谷歌大脑的重温分布式梯度下降.同时推荐大规模分布式深度网络

介绍: 社交计算研究相关问题综述.

介绍: 社交计算应用领域概览,里面有些经典论文推荐

介绍: 协同过滤在推荐系统应用.

介绍: 协同过滤在内容推荐的研究.

介绍: 协同过滤经典论文.

介绍: 协同过滤算法.

介绍: 亚马逊对于协同过滤算法应用.

介绍: 协同过滤的隐式反馈数据集处理.

介绍: 计算机图形,几何等论文,教程,代码.做计算机图形的推荐收藏.

介绍: 推荐哥伦比亚大学课程,稀疏表示和高维几何.12年由Elsevier、13年至今由PAMI(仍由Elsevier赞助)设立的青年研究者奖 (Young Researcher Award)授予完成博士学位后七年内取得杰出贡献的;由CV社区提名,在CVPR会议上宣布。2015年得主是哥大助理教授John Wright,09年《健壮人脸识别的稀疏表示法》引用已超5K.

介绍: CMU机器学习系著名教授Alex Smola在Quora对于《程序员如何学习Machine Learning》的建议:Alex推荐了不少关于线性代数、优化、系统、和统计领域的经典教材和资料.

介绍: 书籍推荐,深度学习基础.源码

介绍: 软件工程领域现在也对机器学习和自然语言处理很感兴趣,有人推出了“大代码”的概念,分享了不少代码集合,并且觉得ML可以用在预测代码Bug,预测软件行为,自动写新代码等任务上。大代码数据集下载

介绍: 深度学习进行目标识别的资源列表:包括RNN、MultiBox、SPP-Net、DeepID-Net、Fast R-CNN、DeepBox、MR-CNN、Faster R-CNN、YOLO、DenseBox、SSD、Inside-Outside Net、G-CNN

介绍: Yann LeCun 2016深度学习课程的幻灯片(Deep Learning Course by Yann LeCun at Collège de France 2016)百度云密码: cwsm 原地址

介绍: 斯坦福人机交互组五篇CHI16文章。1.众包激励机制的行为经济学研究:批量结算比单任务的完成率高。2.在众包专家和新手间建立联系:微实习。3.词 嵌入结合众包验证的词汇主题分类(如猫、狗属于宠物)。4.词嵌入结合目标识别的活动预测。5.鼓励出错以加快众包速度。

介绍: 自学数据科学

介绍: 本课是CS224D一节介绍TensorFlow课程,ppt,DeepDreaming with TensorFlow

介绍: Leaf是一款机器学习的开源框架,专为黑客打造,而非为科学家而作。它用Rust开发,传统的机器学习,现今的深度学习通吃。Leaf

介绍: GTC 2016视频,MXnet的手把手深度学习tutorial,相关参考资料MXNet Tutorial for NVidia GTC 2016.

介绍: OpenAI Gym:开发、比较强化学习算法工具箱

介绍: 机器学习会议ICLR 2016 论文的代码集合

介绍: 此书是斯坦福大学概率图模型大牛Daphne Koller所写,主要涉及的是贝叶斯网络和马尔科夫逻辑网络的learning和inference问题,同时又对PGM有深刻的理论解释,是学习概率图模型必看的书籍。难度中上,适合有一些ML基础的研究生.备份地址

介绍: 此书是剑桥大学著名信息论专家David MacKay所写,出发角度与很多机器学习的书籍都不一样,inference和MCMC那章写的最好,难度中。适合研究生和本科生。

介绍: 非常好的Convex Optimization教材,覆盖了各种constrained和unconstrained optimization方法,介绍了convex优化的基本概念和理论。难度中,适合对优化和机器学习有一定基础的人群

介绍: 本书是CMU机器学习系主任Mitchell早年写的机器学习教科书,年代有点久远.难度不高。适合初学者,本科生,研究生

介绍: 本书设计学习Kernel和SVM的各种理论基础,需要较强的数学功底,适合对kernel和SVM感兴趣的同学选读Learning with Kernels PPT,参考Learning with Kernels

介绍: 斯坦福统计系三位大神的统计学习教科书,偏统计和学习理论,需要对线性代数、统计和概率论有一定基础、难度高、适合研究生

介绍: 本书是著名机器学习工具Weka作者撰写的应用机器学习指导书、非常实用、难度低、适合文科和各种应用科学做参考

介绍: 本书也是一本比较受欢迎的NLP教科书,难度一般,主要覆盖统计NLP方法,是斯坦福的另一位大牛Chirs manning所写

介绍: 在北美NLP最常用的教材,斯坦福Jurafsky所写的自然语言处理入门教程,覆盖面较为全面,难度中低。适合本科生和研究生

介绍: 实战型教程,著名工具NLTK作者的著作,适合本科生和入门者边动手边学

机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1)

by (廖君)

Source: https://github.com/ty4z2008/Qix/blob/master/dl.md

介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、SVM、Adaboost到随机森林、Deep Learning.

介绍:这是瑞士人工智能实验室Jurgen Schmidhuber写的最新版本《神经网络与深度学习综述》本综述的特点是以时间排序,从1940年开始讲起,到60-80年代,80-90年代,一 直讲到2000年后及最近几年的进展。涵盖了deep learning里各种tricks,引用非常全面.

介绍:这是一份python机器学习库,如果您是一位python工程师而且想深入的学习机器学习.那么这篇文章或许能够帮助到你.

介绍:这一篇介绍如果设计和管理属于你自己的机器学习项目的文章,里面提供了管理模版、数据管理与实践方法.

介绍:如果你还不知道什么是机器学习,或则是刚刚学习感觉到很枯燥乏味。那么推荐一读。这篇文章已经被翻译成中文,如果有兴趣可以移步http://blog.jobbole.com/67616/

介绍:R语言是机器学习的主要语言,有很多的朋友想学习R语言,但是总是忘记一些函数与关键字的含义。那么这篇文章或许能够帮助到你

介绍:我该如何选择机器学习算法,这篇文章比较直观的比较了Naive Bayes,Logistic Regression,SVM,决策树等方法的优劣,另外讨论了样本大小、Feature与Model权衡等问题。此外还有已经翻译了的版本:http://www.52ml.net/15063.html

介绍:深度学习概述:从感知机到深度网络,作者对于例子的选择、理论的介绍都很到位,由浅入深。翻译版本:http://www.cnblogs.com/xiaowanyer/p/3701944.html

介绍:作者是来自百度,不过他本人已经在2014年4月份申请离职了。但是这篇文章很不错如果你不知道深度学习与支持向量机/统计学习理论有什么联系?那么应该立即看看这篇文章.

介绍:这本书是由谷歌公司和MIT共同出品的计算机科学中的数学:Mathematics for Computer Science,Eric Lehman et al 2013 。分为5大部分:1)证明,归纳。2)结构,数论,图。3)计数,求和,生成函数。4)概率,随机行走。5)递归。等等

介绍:信息时代的计算机科学理论,目前国内有纸质书购买,iTunes购买

介绍:这是一本由雪城大学新编的第二版《数据科学入门》教材:偏实用型,浅显易懂,适合想学习R语言的同学选读。

介绍:这并不是一篇文档或书籍。这是篇向图灵奖得主Donald Knuth提问记录稿: 近日, Charles Leiserson, Al Aho, Jon Bentley等大神向Knuth提出了20个问题,内容包括TAOCP,P/NP问题,图灵机,逻辑,以及为什么大神不用电邮等等。

介绍:不会统计怎么办?不知道如何选择合适的统计模型怎么办?那这篇文章你的好好读一读了麻省理工Joshua B. Tenenbaum和剑桥Zoubin Ghahramani合作,写了一篇关于automatic statistician的文章。可以自动选择回归模型类别,还能自动写报告…

介绍:对深度学习和representation learning最新进展有兴趣的同学可以了解一下

介绍:这是一本信息检索相关的书籍,是由斯坦福Manning与谷歌副总裁Raghavan等合著的Introduction to Information Retrieval一直是北美最受欢迎的信息检索教材之一。最近作者增加了该课程的幻灯片和作业。IR相关资源:http://www-nlp.stanford.edu/IR-book/information-retrieval.html

介绍:Deniz Yuret用10张漂亮的图来解释机器学习重要概念:1. Bias/Variance Tradeoff 2. Overfitting 3. Bayesian / Occam’s razor 4. Feature combination 5. Irrelevant feature 6. Basis function 7. Discriminative / Generative 8. Loss function 9. Least squares 10. Sparsity.很清晰

介绍:雅虎研究院的数据集汇总: 包括语言类数据,图与社交类数据,评分与分类数据,计算广告学数据,图像数据,竞赛数据,以及系统类的数据。

介绍:这是一本斯坦福统计学著名教授Trevor Hastie和Robert Tibshirani的新书,并且在2014年一月已经开课:https://class.stanford.edu/courses/HumanitiesScience/StatLearning/Winter2014/about

介绍:机器学习最佳入门学习资料汇总是专为机器学习初学者推荐的优质学习资源,帮助初学者快速入门。而且这篇文章的介绍已经被翻译成中文版。如果你不怎么熟悉,那么我建议你先看一看中文的介绍。

介绍:主要是顺着Bengio的PAMI review的文章找出来的。包括几本综述文章,将近100篇论文,各位山头们的Presentation。全部都可以在google上找到。

介绍:这是一本书籍,主要介绍的是跨语言信息检索方面的知识。理论很多

介绍:本文共有三个系列,作者是来自IBM的工程师。它主要介绍了推荐引擎相关算法,并帮助读者高效的实现这些算法。 探索推荐引擎内部的秘密,第 2 部分: 深度推荐引擎相关算法 – 协同过滤,探索推荐引擎内部的秘密,第 3 部分: 深度推荐引擎相关算法 – 聚类

介绍:康奈尔大学信息科学系助理教授David Mimno写的《对机器学习初学者的一点建议》, 写的挺实际,强调实践与理论结合,最后还引用了冯 • 诺依曼的名言: “Young man, in mathematics you don’t understand things. You just get used to them.”

介绍:这是一本关于分布式并行处理的数据《Explorations in Parallel Distributed Processing: A Handbook of Models, Programs, and Exercises》,作者是斯坦福的James L. McClelland。着重介绍了各种神级网络算法的分布式实现,做Distributed Deep Learning 的童鞋可以参考下

介绍:【“机器学习”是什么?】John Platt是微软研究院杰出科学家,17年来他一直在机器学习领域耕耘。近年来机器学习变得炙手可热,Platt和同事们遂决定开设博客,向公众介绍机器学习的研究进展。机器学习是什么,被应用在哪里?来看Platt的这篇博文

介绍:2014年国际机器学习大会(ICML)已经于6月21-26日在国家会议中心隆重举办。本次大会由微软亚洲研究院和清华大学联手主办,是这 个有着30多年历史并享誉世界的机器学习领域的盛会首次来到中国,已成功吸引海内外1200多位学者的报名参与。干货很多,值得深入学习下

介绍:这篇文章主要是以Learning to Rank为例说明企业界机器学习的具体应用,RankNet对NDCG之类不敏感,加入NDCG因素后变成了LambdaRank,同样的思想从神经网络 改为应用到Boosted Tree模型就成就了LambdaMART。Chirs Burges,微软的机器学习大神,Yahoo 2010 Learning to Rank Challenge第一名得主,排序模型方面有RankNet,LambdaRank,LambdaMART,尤其以LambdaMART最为突出,代表论文为: From RankNet to LambdaRank to LambdaMART: An Overview 此外,Burges还有很多有名的代表作,比如:A Tutorial on Support Vector Machines for Pattern Recognition
Some Notes on Applied Mathematics for Machine Learning

介绍:100 Best GitHub: Deep Learning

介绍:本教程将阐述无监督特征学习和深度学习的主要观点。通过学习,你也将实现多个功能学习/深度学习算法,能看到它们为你工作,并学习如何应用 /适应这些想法到新问题上。本教程假定机器学习的基本知识(特别是熟悉的监督学习,逻辑回归,梯度下降的想法),如果你不熟悉这些想法,我们建议你去这里机器学习课程,并先完成第II,III,IV章(到逻辑回归)。此外这关于这套教程的源代码在github上面已经有python版本了 UFLDL Tutorial Code

*《Deep Learning for Natural Language Processing and Related Applications》

介绍:这份文档来自微软研究院,精髓很多。如果需要完全理解,需要一定的机器学习基础。不过有些地方会让人眼前一亮,毛塞顿开。

介绍:这是一篇介绍图像卷积运算的文章,讲的已经算比较详细的了

介绍:每天请一个大牛来讲座,主要涉及机器学习,大数据分析,并行计算以及人脑研究。https://www.youtube.com/user/smolix (需翻墙)

介绍:一个超级完整的机器学习开源库总结,如果你认为这个碉堡了,那后面这个列表会更让你惊讶:【Awesome Awesomeness】,国内已经有热心的朋友进行了翻译中文介绍机器学习数据挖掘免费电子书

介绍:ACL候任主席、斯坦福大学计算机系Chris Manning教授的《自然语言处理》课程所有视频已经可以在斯坦福公开课网站上观看了(如Chrome不行,可用IE观看) 作业与测验也可以下载。

介绍:对比 Deep Learning 和 Shallow Learning 的好文,来着浙大毕业、MIT 读博的 Chiyuan Zhang 的博客。

介绍:利用卷积神经网络做音乐推荐。

介绍:神经网络的免费在线书,已经写了三章了,还有对应的开源代码:https://github.com/mnielsen/neural-networks-and-deep-learning 爱好者的福音。

介绍:Java机器学习相关平台和开源的机器学习库,按照大数据、NLP、计算机视觉和Deep Learning分类进行了整理。看起来挺全的,Java爱好者值得收藏。

介绍:机器学习最基本的入门文章,适合零基础者

介绍:机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性。

介绍:看题目你已经知道了是什么内容,没错。里面有很多经典的机器学习论文值得仔细与反复的阅读。

介绍:视频由加州理工学院(Caltech)出品。需要英语底子。

介绍:总结了机器学习的经典书籍,包括数学基础和算法理论的书籍,可做为入门参考书单。

介绍:16本机器学习的电子书,可以下载下来在pad,手机上面任意时刻去阅读。不多我建议你看完一本再下载一本。

介绍:标题很大,从新手到专家。不过看完上面所有资料。肯定是专家了

介绍:入门的书真的很多,而且我已经帮你找齐了。

介绍:Sibyl 是一个监督式机器学习系统,用来解决预测方面的问题,比如 YouTube 的视频推荐。

介绍:关于(Deep) Neural Networks在 NLP 和 Text Mining 方面一些paper的总结

介绍:计算机视觉入门之前景目标检测1(总结)

介绍:计算机视觉入门之行人检测

介绍:Important resources for learning and understanding . Is awesome

介绍:这又是一篇机器学习初学者的入门文章。值得一读

介绍:在线Neural Networks and Deep Learning电子书

介绍:python的17个关于机器学习的工具

介绍:下集在这里神奇的伽玛函数(下)

介绍:作者王益目前是腾讯广告算法总监,王益博士毕业后在google任研究。这篇文章王益博士7年来从谷歌到腾讯对于分布机器学习的所见所闻。值得细读

介绍:把机器学习提升的级别分为0~4级,每级需要学习的教材和掌握的知识。这样,给机器学习者提供一个上进的路线图,以免走弯路。另外,整个网站都是关于机器学习的,资源很丰富。

介绍:机器学习各个方向综述的网站

介绍:深度学习阅资源列表

介绍:这是一本来自微的研究员 li Peng和Dong Yu所著的关于深度学习的方法和应用的电子书

介绍:2014年七月CMU举办的机器学习夏季课刚刚结束 有近50小时的视频、十多个PDF版幻灯片,覆盖 深度学习,贝叶斯,分布式机器学习,伸缩性 等热点话题。所有13名讲师都是牛人:包括大牛Tom Mitchell (他的[机器学习]是名校的常用教材),还有CMU李沐 .(1080P高清哟)

介绍:在今年的IEEE/IFIP可靠系统和网络(DSN)国际会议上,Google软件工程师Tushar Chandra做了一个关于Sibyl系统的主题演讲。 Sibyl是一个监督式机器学习系统,用来解决预测方面的问题,比如YouTube的视频推荐。详情请阅读google sibyl

介绍:谷歌研究院的Christian Szegedy在谷歌研究院的博客上简要地介绍了他们今年参加ImageNet取得好成绩的GoogLeNet系统.是关于图像处理的。

介绍:贝叶斯学习。如果不是很清可看看概率编程语言与贝叶斯方法实践

介绍:网友问伯克利机器学习大牛、美国双料院士Michael I. Jordan:”如果你有10亿美金,你怎么花?Jordan: “我会用这10亿美金建造一个NASA级别的自然语言处理研究项目。”

介绍:常见面试之机器学习算法思想简单梳理,此外作者还有一些其他的机器学习与数据挖掘文章深度学习文章,不仅是理论还有源码。

介绍:Videolectures上最受欢迎的25个文本与数据挖掘视频汇总

介绍:在Kaggle上经常取得不错成绩的Tim Dettmers介绍了他自己是怎么选择深度学习的GPUs, 以及个人如何构建深度学习的GPU集群: http://t.cn/RhpuD1G

介绍:对话机器学习大神Michael Jordan

介绍:还有2,3部分。http://blog.sina.com.cn/s/blog_46d0a3930101gs5h.html

介绍:是Stanford 教授 Andrew Ng 的 Deep Learning 教程,国内的机器学习爱好者很热心的把这个教程翻译成了中文。如果你英语不好,可以看看这个

介绍:因为近两年来,深度学习在媒体界被炒作很厉害(就像大数据)。其实很多人都还不知道什么是深度学习。这篇文章由浅入深。告诉你深度学究竟是什么!

介绍:这是斯坦福大学做的一免费课程(很勉强),这个可以给你在深度学习的路上给你一个学习的思路。里面提到了一些基本的算法。而且告诉你如何去应用到实际环境中。中文版

介绍:这是多伦多大学做的一个深度学习用来识别图片标签/图转文字的demo。是一个实际应用案例。有源码

介绍:机器学习模型,阅读这个内容需要有一定的基础。

介绍: (CRAN Task Views, 34种常见任务,每个任务又各自分类列举若干常用相关工具包) 例如: 机器学习,自然语言处理,时间序列分析,空间信息分析,多重变量分析,计量经济学,心理统计学,社会学统计,化学计量学,环境科学,药物代谢动力学 等

介绍: 机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时的工作中都或多或少会用到机器学习的算法。本文为您总结一下常见的机器学习算法,以供您在工作和学习中参考.

介绍: 很多干货,而且作者还总结了好几个系列。另外还作者还了一个文章导航.非常的感谢作者总结。

Deep Learning(深度学习)学习笔记整理系列之(二)

Deep Learning(深度学习)学习笔记整理系列之(三)

Deep Learning(深度学习)学习笔记整理系列之(四)

Deep Learning(深度学习)学习笔记整理系列之(五)

Deep Learning(深度学习)学习笔记整理系列之(六)

Deep Learning(深度学习)学习笔记整理系列之(七)

DeepLearning(深度学习)学习笔记整理系列之(八)

介绍:传送理由:Rob Fergus的用深度学习做计算机是觉的NIPS 2013教程。有mp4, mp3, pdf各种下载 他是纽约大学教授,目前也在Facebook工作,他2014年的8篇论文

介绍:FudanNLP,这是一个复旦大学计算机学院开发的开源中文自然语言处理(NLP)工具包 Fudan NLP里包含中文分词、关键词抽取、命名实体识别、词性标注、时间词抽取、语法分析等功能,对搜索引擎 文本分析等极为有价值。

介绍:LinkedIn 开源的机器学习工具包,支持单机, Hadoop cluster,和 Spark cluster 重点是 logistic regression 算法

介绍:对于英语不好,但又很想学习机器学习的朋友。是一个大的福利。机器学习周刊目前主要提供中文版,还是面向广大国内爱好者,内容涉及机器学习、数据挖掘、并行系统、图像识别、人工智能、机器人等等。谢谢作者

介绍:《线性代数》是《机器学习》的重要数学先导课程。其实《线代》这门课讲得浅显易懂特别不容易,如果一上来就讲逆序数及罗列行列式性质,很容易让学生失去学习的兴趣。我个人推荐的最佳《线性代数》课程是麻省理工Gilbert Strang教授的课程。 课程主页

介绍:大数据数据处理资源、工具不完备列表,从框架、分布式编程、分布式文件系统、键值数据模型、图数据模型、数据可视化、列存储、机器学习等。很赞的资源汇总。

介绍:雅虎邀请了一名来自本古里安大学的访问学者,制作了一套关于机器学习的系列视频课程。本课程共分为7期,详细讲解了有关SVM, boosting, nearest neighbors, decision trees 等常规机器学习算法的理论基础知识。

介绍:应对大数据时代,量子机器学习的第一个实验 paper 下载

介绍:Wired杂志报道了UCLA数学博士Chris McKinlay (图1)通过大数据手段+机器学习方法破解婚恋网站配对算法找到真爱的故事,通过Python脚本控制着12个账号,下载了婚恋网站2万女用户的600万 问题答案,对他们进行了统计抽样及聚类分析(图2,3),最后终于收获了真爱。科技改变命运!

介绍:MIT的Underactuated Robotics于 2014年10月1日开课,该课属于MIT研究生级别的课程,对机器人和非线性动力系统感兴趣的朋友不妨可以挑战一下这门课程!

介绍:mllib实践经验分享

介绍:Google用Deep Learning做的antispam(反垃圾邮件)

介绍:NLP常用信息资源* 《NLP常用信息资源》

介绍:机器学习速查表

介绍:从1996年开始在计算机科学的论文中被引用次数最多的论文

介绍:把今年的一个ACM Trans. on Graphics (TOG)论文中的代码整理为一个开源的算法框架,共享出来了。欢迎大家使用。可以实时的采集3D数据、重建出三维模型。Online learning,GPU Random forest,GPU CRF也会后续公开。

介绍:【神经网络黑客指南】现在,最火莫过于深度学习(Deep Learning),怎样更好学习它?可以让你在浏览器中,跑起深度学习效果的超酷开源项目ConvNetJS作者karpathy告诉你,最佳技巧是,当你开始写代码,一切将变得清晰。他刚发布了一本图书,不断在线更新

介绍:前Google广告系统工程师Josh Wills 讲述工业界和学术界机器学习的异同,大实话

介绍:使用Neo4j 做电影评论的情感分析。

介绍:不仅是资料,而且还对有些资料做了注释。

介绍:深度学习入门的初级读本

介绍:机器学习教会了我们什么?

介绍:scikit-learn是在SciPy基础上构建的用于机器学习的Python模块。

介绍:乔丹教授(Michael I. Jordan)教授是机器学习领域神经网络的大牛,他对深度学习、神经网络有着很浓厚的兴趣。因此,很多提问的问题中包含了机器学习领域的各类模型,乔丹教授对此一一做了解释和展望。

介绍:A*搜索是人工智能基本算法,用于高效地搜索图中两点的最佳路径, 核心是 g(n)+h(n): g(n)是从起点到顶点n的实际代价,h(n)是顶点n到目标顶点的估算代价。合集

介绍:本项目利用了Microsoft Azure,可以在几分种内完成NLP on Azure Website的部署,立即开始对FNLP各种特性的试用,或者以REST API的形式调用FNLP的语言分析功能

介绍:现任复旦大学首席教授、计算机软件博士生导师。计算机科学研究所副所长.内部课程

介绍:好东西的干货真的很多

介绍:从硬件、图像到健康、生物、大数据、生物信息再到量子计算等,Amund Tveit等维护了一个DeepLearning.University小项目:收集从2014年开始深度学习文献,相信可以作为深度学习的起点,github

介绍:EMNLP上两篇关于stock trend 用到了deep model组织特征; Exploiting Social Relations and Sentiment for Stock Prediction用到了stock network。

介绍:作者是深度学习一线大牛Bengio组写的教程,算法深入显出,还有实现代码,一步步展开。

介绍:许多传统的机器学习任务都是在学习function,不过谷歌目前有开始学习算法的趋势。谷歌另外的这篇学习Python程序的Learning to Execute也有相似之处

介绍:作者是华为技术有限公司,诺亚方舟实验室,首席科学家的李航博士写的关于信息检索与自然语言处理的文章

介绍:利用机用器学习在谣言的判别上的应用,此外还有两个。一个是识别垃圾与虚假信息的paper.还有一个是网络舆情及其分析技术

介绍:该课程是网易公开课的收费课程,不贵,超级便宜。主要适合于对利用R语言进行机器学习,数据挖掘感兴趣的人。

介绍:本章中作者总结了三代机器学习算法实现的演化:第一代非分布式的, 第二代工具如Mahout和Rapidminer实现基于Hadoop的扩展,第三代如Spark和Storm实现了实时和迭代数据处理。BIG DATA ANALYTICS BEYOND HADOOP

介绍:讲计算机视觉的四部奇书(应该叫经典吧)之一,另外三本是Hartley的《多图几何》、Gonzalez的《数字图像处理》、Rafael C.Gonzalez / Richard E.Woods 的《数字图像处理》

介绍:里面基本没涉及到具体算法,但作者介绍了CF在LinkedIn的很多应用,以及他们在做推荐过程中获得的一些经验。最后一条经验是应该监控log数据的质量,因为推荐的质量很依赖数据的质量!

介绍:初学者如何查阅自然语言处理(NLP)领域学术资料

介绍:用树莓派和相机模块进行人脸识别

介绍:如何利用深度学习与大数据构建对话系统

介绍:Francis Bach合作的有关稀疏建模的新综述(书):Sparse Modeling for Image and Vision Processing,内容涉及Sparsity, Dictionary Learning, PCA, Matrix Factorization等理论,以及在图像和视觉上的应用,而且第一部分关于Why does the l1-norm induce sparsity的解释也很不错。

介绍:RKHS是机器学习中重要的概念,其在large margin分类器上的应用也是广为熟知的。如果没有较好的数学基础,直接理解RKHS可能会不易。本文从基本运算空间讲到Banach和Hilbert空间,深入浅出,一共才12页。

介绍:许多同学对于机器学习及深度学习的困惑在于,数学方面已经大致理解了,但是动起手来却不知道如何下手写代码。斯坦福深度学习博士Andrej Karpathy写了一篇实战版本的深度学习及机器学习教程,手把手教你用Javascript写神经网络和SVM.

介绍:【语料库】语料库资源汇总

介绍:本文会过一遍最流行的机器学习算法,大致了解哪些方法可用,很有帮助。

介绍:这个里面有很多关于机器学习、信号处理、计算机视觉、深入学习、神经网络等领域的大量源代码(或可执行代码)及相关论文。科研写论文的好资源

介绍:NYU 2014年的深度学习课程资料,有视频

介绍:计算机视觉数据集不完全汇总

介绍:机器学习开源软件

介绍:A Library for Support Vector Machines

介绍:数据挖掘十大经典算法之一

介绍:github上面100个非常棒的项目

介绍:当前加州大学欧文分校为机器学习社区维护着306个数据集。查询数据集

介绍:Andrej Karpathy 是斯坦福大学Li Fei-Fei的博士生,使用机器学习在图像、视频语义分析领域取得了科研和工程上的突破,发的文章不多,但每个都很扎实,在每一个问题上都做到了state-of-art.

介绍:Andrej Karpathy的深度强化学习演示,论文在这里

介绍:CIKM Cup(或者称为CIKM Competition)是ACM CIKM举办的国际数据挖掘竞赛的名称。

介绍:杰弗里·埃弗里斯特·辛顿 FRS是一位英国出生的计算机学家和心理学家,以其在神经网络方面的贡献闻名。辛顿是反向传播算法和对比散度算法的发明人之一,也是深度学习的积极推动者.

介绍:微软研究院深度学习技术中心在CIKM2014 上关于《自然语言处理的深度学习理论与实际》教学讲座的幻灯片

介绍: 本文基于<支持向量机的高频限价订单的动态建模>采用了 Apache Spark和Spark MLLib从纽约股票交易所的订单日志数据构建价格运动预测模型。(股票有风险,投资谨慎)GitHub源代码托管地址.

介绍:徐宗本 院士将于热爱机器学习的小伙伴一起探讨有关于机器学习的几个理论性问题,并给出一些有意义的结论。最后通过一些实例来说明这些理论问题的物理意义和实际应用价值。

介绍:作者还著有《这就是搜索引擎:核心技术详解》一书,主要是介绍应用层的东西

介绍:机器学习课程

介绍:人脸识别必读文章推荐

介绍:推荐系统经典论文文献

介绍:人脸识别必读文章推荐

介绍:第十二届中国”机器学习及其应用”研讨会PPT

介绍:统计学习是关于计算机基于数据构建的概率统计模型并运用模型对数据进行预测和分析的一门科学,统计学习也成为统计机器学习。课程来自上海交通大学

介绍:机器学习的目标是对计算机编程,以便使用样本数据或以往的经验来解决给定的问题.

介绍:CIKM 2014 Jeff Dean、Qi Lu、Gerhard Weikum的主题报告的幻灯片, Alex Smola、Limsoon Wong、Tong Zhang、Chih-Jen Lin的Industry Track报告的幻灯片

介绍:部分中文列表

介绍:此外作者还有一篇元算法、AdaBoost python实现文章

介绍:加州伯克利大学博士Aria Haghighi写了一篇超赞的数值优化博文,从牛顿法讲到拟牛顿法,再讲到BFGS以及L-BFGS, 图文并茂,还有伪代码。强烈推荐。

介绍:还有续集简明深度学习方法概述(二)

介绍:R语言程序员私人定制版

介绍:谷歌地图解密

介绍:空间数据挖掘常用方法

介绍:Kaggle新比赛 ”When bag of words meets bags of popcorn“ aka ”边学边用word2vec和deep learning做NLP“ 里面全套教程教一步一步用python和gensim包的word2vec模型,并在实际比赛里面比调参数和清数据。 如果已装过gensim不要忘升级

介绍:PyNLPIR提供了NLPIR/ICTCLAS汉语分词的Python接口,此外Zhon提供了常用汉字常量,如CJK字符和偏旁,中文标点,拼音,和汉字正则表达式(如找到文本中的繁体字)

介绍:这文章说把最近模型识别上的突破应用到围棋软件上,打16万张职业棋谱训练模型识别功能。想法不错。训练后目前能做到不用计算,只看棋盘就给 出下一步,大约10级棋力。但这篇文章太过乐观,说什么人类的最后一块堡垒马上就要跨掉了。话说得太早。不过,如果与别的软件结合应该还有潜力可挖。@万 精油墨绿

介绍:UT Austin教授Eric Price关于今年NIPS审稿实验的详细分析,他表示,根据这次实验的结果,如果今年NIPS重新审稿的话,会有一半的论文被拒。

介绍:KDNuggets分别总结了2014年14个阅读最多以及分享最多的文章。我们从中可以看到多个主题——深度学习,数据科学家职业,教育和薪酬,学习数据科学的工具比如R和Python以及大众投票的最受欢迎的数据科学和数据挖掘语言

介绍:Python实现线性回归,作者还有其他很棒的文章推荐可以看看

介绍:2014中国大数据技术大会33位核心专家演讲PDF下载

介绍:这是T. Mikolov & Y. Bengio最新论文Ensemble of Generative and Discriminative Techniques for Sentiment Analysis of Movie Reviews ,使用RNN和PV在情感分析效果不错,[项目代码](https://github.com/mesnilgr/iclr15)公布在github(目前是空的)。这意味着Paragraph Vector终于揭开面纱了嘛。

介绍:NLPIR/ICTCLAS2015分词系统发布与用户交流大会上的演讲,请更多朋友检阅新版分词吧。 我们实验室同学的演讲包括:孙梦姝-基于评论观点挖掘的商品搜索技术研究 李然-主题模型

介绍:Convex Neural Networks 解决维数灾难

介绍:介绍CNN参数在使用bp算法时该怎么训练,毕竟CNN中有卷积层和下采样层,虽然和MLP的bp算法本质上相同,但形式上还是有些区别的,很显然在完成CNN反向传播前了解bp算法是必须的。此外作者也做了一个资源集:机器学习,深度学习,视觉,数学等

介绍:如果要在一篇文章中匹配十万个关键词怎么办?Aho-Corasick 算法利用添加了返回边的Trie树,能够在线性时间内完成匹配。 但如果匹配十万个正则表达式呢 ? 这时候可以用到把多个正则优化成Trie树的方法,如日本人写的 Regexp::Trie

介绍:深度学习阅读清单

介绍:Caffe是一个开源的深度学习框架,作者目前在google工作,作者主页Yangqing Jia (贾扬清)

介绍:2014 ImageNet冠军GoogLeNet深度学习模型的Caffe复现模型,GoogleNet论文.

介绍:LambdaNetLambdaNet是由Haskell实现的一个开源的人工神经网络库,它抽象了网络创建、训练并使用了高阶函数。该库还提供了一组预定义函数,用户可以采取多种方式组合这些函数来操作现实世界数据。

介绍:如果你从事互联网搜索,在线广告,用户行为分析,图像识别,自然语言理解,或者生物信息学,智能机器人,金融预测,那么这门核心课程你必须深入了解。

介绍:”人工智能研究分许多流派。其中之一以IBM为代表,认为只要有高性能计算就可得到智能,他们的‘深蓝’击败了世界象棋冠军;另一流派认为智 能来自动物本能;还有个很强的流派认为只要找来专家,把他们的思维用逻辑一条条写下,放到计算机里就行……” 杨强在TEDxNanjing谈智能的起源

介绍:1)机器翻译Sequence to Sequence NIPS14 2)成分句法GRAMMAR AS FOREIGN LANGUAGE

介绍:网易有道的三位工程师写的word2vec的解析文档,从基本的词向量/统计语言模型->NNLM->Log-Linear /Log-Bilinear->层次化Log-Bilinear,到CBOW和Skip-gram模型,再到word2vec的各种tricks, 公式推导与代码,基本上是网上关于word2vec资料的大合集,对word2vec感兴趣的朋友可以看看

介绍:机器学习开源软件,收录了各种机器学习的各种编程语言学术与商业的开源软件.与此类似的还有很多例如:DMOZ – Computers: Artificial Intelligence: Machine Learning: Software, LIBSVM — A Library for Support Vector Machines, Weka 3: Data Mining Software in Java, scikit-learn:Machine Learning in Python, Natural Language Toolkit:NLTK, MAchine Learning for LanguagE Toolkit, Data Mining – Fruitful and Fun, Open Source Computer Vision Library

介绍:作者是计算机研二(写文章的时候,现在是2015年了应该快要毕业了),专业方向自然语言处理.这是一点他的经验之谈.对于入门的朋友或许会有帮助

介绍:这是一篇关于机器学习算法分类的文章,非常好

介绍:机器学习日报里面推荐很多内容,在这里有一部分的优秀内容就是来自机器学习日报.

介绍:这是一篇关于图像分类在深度学习中的文章

介绍:作者与Bengio的兄弟Samy 09年合编《自动语音识别:核方法》 3)李开复1989年《自动语音识别》专著,其博导、94年图灵奖得主Raj Reddy作序

介绍: 作者是360电商技术组成员,这是一篇NLP在中文分词中的应用

介绍: 使用deep learning的人脸关键点检测,此外还有一篇AWS部署教程

介绍: 由Sebastian Nowozin等人编纂MIT出版的新书《Advanced Structured Prediction》http://t.cn/RZxipKG ,汇集了结构化预测领域诸多牛文,涉及CV、NLP等领域,值得一读。网上公开的几章草稿:,,,,

介绍: Tropp把数学家用高深装逼的数学语言写的矩阵概率不等式用初等的方法写出来,是非常好的手册,领域内的paper各种证明都在用里面的结果。虽说是初等的,但还是非常的难

介绍: 不容错过的免费大数据集,有些已经是耳熟能详,有些可能还是第一次听说,内容跨越文本、数据、多媒体等,让他们伴你开始数据科学之旅吧,具体包 括:Data.gov、US Census Bureau、European Union Open Data Portal、Data.gov.uk等

介绍: 谷歌科学家、Hinton亲传弟子Ilya Sutskever的深度学习综述及实际建议

介绍: 非常好的讨论递归神经网络的文章,覆盖了RNN的概念、原理、训练及优化等各个方面内容,强烈推荐!本文作者Nikhil Buduma还有一篇Deep Learning in a Nutshell值得推荐

介绍:里面融合了很多的资源,例如竞赛,在线课程,demo,数据整合等。有分类

介绍:《机器学习的统计基础》在线版,该手册希望在理论与实践之间找到平衡点,各主要内容都伴有实际例子及数据,书中的例子程序都是用R语言编写的。

介绍:IVAN VASILEV写的深度学习导引:从浅层感知机到深度网络。高可读

介绍:鲁棒及有益的人工智能优先研究计划:一封公开信,目前已经有Stuart Russell, Tom Dietterich, Eric Horvitz, Yann LeCun, Peter Norvig, Tom Mitchell, Geoffrey Hinton, Elon Musk等人签署The Future of Life Institute (FLI). 这封信的背景是最近霍金和Elon Musk提醒人们注意AI的潜在威胁。公开信的内容是AI科学家们站在造福社会的角度,展望人工智能的未来发展方向,提出开发AI系统的 Verification,Validity, Security, Control四点要求,以及需要注意的社会问题。毕竟当前AI在经济领域,法律,以及道德领域相关研究较少。其实还有一部美剧《疑犯追踪》,介绍了AI的演进从一开始的自我学习,过滤,图像识别,语音识别等判断危险,到第四季的时候出现了机器通过学习成长之后想控制世界的状态。说到这里推荐收看。

介绍:里面根据词条提供了许多资源,还有相关知识结构,路线图,用时长短等。号称是”机器学习“搜索引擎

介绍:Facebook人工智能研究院(FAIR)开源了一系列软件库,以帮助开发者建立更大、更快的深度学习模型。开放的软件库在 Facebook 被称作模块。用它们替代机器学习领域常用的开发环境 Torch 中的默认模块,可以在更短的时间内训练更大规模的神经网络模型。

介绍:本文虽然是写于2012年,但是这篇文章完全是作者的经验之作。

介绍:本文是对《机器学习实战》作者Peter Harrington做的一个访谈。包含了书中部分的疑问解答和一点个人学习建议

介绍:非常好的深度学习概述,对几种流行的深度学习模型都进行了介绍和讨论

介绍:主要是讲述了利用R语言进行数据挖掘

介绍:帮你理解卷积神经网络,讲解很清晰,此外还有两篇Conv Nets: A Modular PerspectiveGroups & Group Convolutions. 作者的其他的关于神经网络文章也很棒

介绍:Deep Learning算法介绍,里面介绍了06年3篇让deep learning崛起的论文

介绍:一本学习人工智能的书籍,作者是Yoshua Bengio,相关国内报道

介绍:Geoffrey Hinton是Deep Learning的大牛,他的主页放了一些介绍性文章和课件值得学习

介绍:概率论:数理逻辑书籍

介绍:一个用来快速的统计,机器学习并且对于数据量大的数学库

介绍:在这里你可以看到最近深度学习有什么新动向。

介绍:此书在信息检索领域家喻户晓, 除提供该书的免费电子版外,还提供一个IR资源列表 ,收录了信息检索、网络信息检索、搜索引擎实现等方面相关的图书、研究中心、相关课程、子领域、会议、期刊等等,堪称全集,值得收藏

介绍:信息几何学及其在机器学习中的应用

介绍:课程《法律分析》介绍幻灯片。用机器学习解决法律相关分析和预测问题,相关的法律应用包括预测编码、早期案例评估、案件整体情况的预测,定价和工作人员预测,司法行为预测等。法律领域大家可能都比较陌生,不妨了解下。

介绍: 文中提到了最优,模型,最大熵等等理论,此外还有应用篇。推荐系统可以说是一本不错的阅读稿,关于模型还推荐一篇Generative Model 与 Discriminative Model

介绍: NeuralTalk is a Python+numpy project for learning Multimodal Recurrent Neural Networks that describe images with sentences.NeuralTalk是一个Python的从图像生成自然语言描述的工具。它实现了Google (Vinyals等,卷积神经网络CNN + 长短期记忆LSTM) 和斯坦福 (Karpathy and Fei-Fei, CNN + 递归神经网络RNN)的算法。NeuralTalk自带了一个训练好的动物模型,你可以拿狮子大象的照片来试试看

介绍:本文主要介绍了在Hadoop2.0上使用深度学习,文章来自paypal

介绍:用基于梯度下降的方法训练深度框架的实践推荐指导,作者是Yoshua Bengio .感谢@xuewei4d 推荐

介绍: 用统计和因果方法做机器学习(视频报告)

介绍: 一个讲机器学习的Youtube视频教程。160集。系统程度跟书可比拟。

介绍: 机器学习中的数学,作者的研究方向是机器学习,并行计算如果你还想了解一点其他的可以看看他博客的其他文章

介绍: 美团推荐算法实践,从框架,应用,策略,查询等分析

介绍: 深度学习用于问答系统答案句的选取

介绍: CNN用于WEB搜索,深度学习在文本计算中的应用

介绍: Awesome系列中的公开数据集

介绍: 一个学术搜索引擎

介绍: 用Python和Cython写的工业级自然语言处理库,号称是速度最快的NLP库,快的原因一是用Cython写的,二是用了个很巧妙的hash技术,加速系统的瓶颈,NLP中稀松特征的存取

介绍: Fields是个数学研究中心,上面的这份ppt是来自Fields举办的活动中Russ Salakhutdinov带来的《大规模机器学习》分享

介绍: Topic modeling 的经典论文,标注了关键点

介绍: 多伦多大学与Google合作的新论文,深度学习也可以用来下围棋,据说能达到六段水平

介绍: 新闻,paper,课程,book,system,CES,Roboot,此外还推荐一个深度学习入门与综述资料

介绍: 18 free eBooks on Machine Learning

介绍:Chief scientist of Noah’s Ark Lab of Huawei Technologies.He worked at the Research Laboratories of NEC Corporation during 1990 and 2001 and Microsoft Research Asia during 2001 and 2012.Paper

介绍: DEEPLEARNING.UNIVERSITY的论文库已经收录了963篇经过分类的深度学习论文了,很多经典论文都已经收录

介绍: Radim Řehůřek(Gensim开发者)在一次机器学习聚会上的报告,关于word2vec及其优化、应用和扩展,很实用.国内网盘

介绍:很多公司都用机器学习来解决问题,提高用户体验。那么怎么可以让机器学习更实时和有效呢?Spark MLlib 1.2里面的Streaming K-means,由斑马鱼脑神经研究的Jeremy Freeman脑神经科学家编写,最初是为了实时处理他们每半小时1TB的研究数据,现在发布给大家用了。

介绍: 这是一篇面向工程师的LDA入门笔记,并且提供一份开箱即用Java实现。本文只记录基本概念与原理,并不涉及公式推导。文中的LDA实现核心部分采用了arbylon的LdaGibbsSampler并力所能及地注解了,在搜狗分类语料库上测试良好,开源在GitHub上。

介绍: AMiner是一个学术搜索引擎,从学术网络中挖掘深度知识、面向科技大数据的挖掘。收集近4000万作者信息、8000万论文信息、1亿多引用关系、链接近8百万知识点;支持专家搜索、机构排名、科研成果评价、会议排名。

介绍: Quora上的主题,讨论Word2Vec的有趣应用,Omer Levy提到了他在CoNLL2014最佳论文里的分析结果和新方法,Daniel Hammack给出了找特异词的小应用并提供了(Python)代码

介绍: 机器学习公开课汇总,虽然里面的有些课程已经归档过了,但是还有个别的信息没有。感谢课程图谱的小编

介绍: 【A First Course in Linear Algebra】Robert Beezer 有答案 有移动版、打印版 使用GNU自由文档协议 引用了杰弗逊1813年的信

介绍:libfacedetection是深圳大学开源的一个人脸图像识别库。包含正面和多视角人脸检测两个算法.优点:速度快(OpenCV haar+adaboost的2-3倍), 准确度高 (FDDB非公开类评测排名第二),能估计人脸角度。

介绍:WSDM2015最佳论文 把马尔可夫链理论用在了图分析上面,比一般的propagation model更加深刻一些。通过全局的平稳分布去求解每个节点影响系数模型。假设合理(转移受到相邻的影响系数影响)。可以用来反求每个节点的影响系数

介绍:机器学习入门书籍,具体介绍

介绍: 非常棒的强调特征选择对分类器重要性的文章。情感分类中,根据互信息对复杂高维特征降维再使用朴素贝叶斯分类器,取得了比SVM更理想的效果,训练和分类时间也大大降低——更重要的是,不必花大量时间在学习和优化SVM上——特征也一样no free lunch

介绍:CMU的统计系和计算机系知名教授Larry Wasserman 在《机器崛起》,对比了统计和机器学习的差异

介绍:随着大数据时代的到来,机器学习成为解决问题的一种重要且关键的工具。不管是工业界还是学术界,机器学习都是一个炙手可热的方向,但是学术界 和工业界对机器学习的研究各有侧重,学术界侧重于对机器学习理论的研究,工业界侧重于如何用机器学习来解决实际问题。这篇文章是美团的实际环境中的实战篇

介绍:面向机器学习的高斯过程,章节概要:回归、分类、协方差函数、模型选择与超参优化、高斯模型与其他模型关系、大数据集的逼近方法等,微盘下载

介绍:Python下的文本模糊匹配库,老库新推,可计算串间ratio(简单相似系数)、partial_ratio(局部相似系数)、token_sort_ratio(词排序相似系数)、token_set_ratio(词集合相似系数)等 github

介绍:Blocks是基于Theano的神经网络搭建框架,集成相关函数、管道和算法,帮你更快地创建和管理NN模块.

介绍:机器学习大神Alex Smola在CMU新一期的机器学习入门课程”Introduction to Machine Learning“近期刚刚开课,课程4K高清视频同步到Youtube上,目前刚刚更新到 2.4 Exponential Families,课程视频playlist, 感兴趣的同学可以关注,非常适合入门.

介绍:用社交用户行为学习图片的协同特征,可更好地表达图片内容相似性。由于不依赖于人工标签(标注),可用于大规模图片处理,难在用户行为数据的获取和清洗;利用社会化特征的思路值得借鉴.

介绍:Twitter技术团队对前段时间开源的时间序列异常检测算法(S-H-ESD)R包的介绍,其中对异常的定义和分析很值得参考,文中也提到——异常是强针对性的,某个领域开发的异常检测在其他领域直接用可不行.

介绍:聚焦数据质量问题的应对,数据质量对各种规模企业的性能和效率都至关重要,文中总结出(不限于)22种典型数据质量问题显现的信号,以及典型的数据质量解决方案(清洗、去重、统一、匹配、权限清理等)

介绍:中文分词入门之资源.

介绍:15年旧金山深度学习峰会视频集萃,国内云盘

介绍:很好的条件随机场(CRF)介绍文章,作者的学习笔记

介绍: 来自Stanford,用神经网络实现快速准确的依存关系解析器

介绍:做深度学习如何选择GPU的建议

介绍: Stanford的Trevor Hastie教授在H2O.ai Meet-Up上的报告,讲稀疏线性模型——面向“宽数据”(特征维数超过样本数)的线性模型,13年同主题报告讲义.

介绍: 分类整理的机器视觉相关资源列表,秉承Awesome系列风格,有质有量!作者的更新频率也很频繁

介绍: social networks course

介绍: 大规模机器学习流程的构建与部署.

介绍: 人脸识别二次开发包,免费,可商用,有演示、范例、说明书.

介绍: 采用Torch用深度学习网络理解NLP,来自Facebook 人工智能的文章.

介绍: 来自CMU的Ed Hovy和Stanford的Jiwei Li一篇有意思的Arxiv文章,作者用Shannon Entropy来刻画NLP中各项任务的难度.

介绍: 信息检索排序模型BM25(Besting Matching)。1)从经典概率模型演变而来 2)捕捉了向量空间模型中三个影响索引项权重的因子:IDF逆文档频率;TF索引项频率;文档长度归一化。3)并且含有集成学习的思想:组合了BM11和 BM15两个模型。4)作者是BM25的提出者和Okapi实现者Robertson.

介绍: 自回归滑动平均(ARMA)时间序列的简单介绍,ARMA是研究时间序列的重要方法,由自回归模型(AR模型)与滑动平均模型(MA模型)为基础“混合”构成.

介绍: 把来自target的attention signal加入source encoding CNN的输入,得到了比BBN的模型好的多neural network joint model

介绍: 揭开印度菜的美味秘诀——通过对大量食谱原料关系的挖掘,发现印度菜美味的原因之一是其中的味道互相冲突,很有趣的文本挖掘研究

介绍: HMM相关文章,此外推荐中文分词之HMM模型详解

介绍: 1)词频与其降序排序的关系,最著名的是语言学家齐夫(Zipf,1902-1950)1949年提出的Zipf‘s law,即二者成反比关系. 曼德勃罗(Mandelbrot,1924- 2010)引入参数修正了对甚高频和甚低频词的刻画 2)Heaps’ law: 词汇表与语料规模的平方根(这是一个参数,英语0.4-0.6)成正比

介绍: Jürgen Schmidhuber在Reddit上的AMA(Ask Me Anything)主题,有不少RNN和AI、ML的干货内容,关于开源&思想&方法&建议……耐心阅读,相信你也会受益匪浅.

介绍: 成G上T的学术数据,HN近期热议话题,主题涉及机器学习、NLP、SNA等。下载最简单的方法,通过BT软件,RSS订阅各集合即可

介绍: Scikit-Learn官网提供,在原有的Cheat Sheet基础上加上了Scikit-Learn相关文档的链接,方便浏览

介绍: 深度学习的全面硬件指南,从GPU到RAM、CPU、SSD、PCIe

介绍:Pedestrian Detection paper & data

介绍: 【神经科学碰撞人工智能】在脸部识别上你我都是专家,即使细微的差别也能辨认。研究已证明人类和灵长类动物在面部加工上不同于其他物种,人类使用梭状回面 孔区(FFA)。Khaligh-Razavi等通过计算机模拟出人脸识别的FFA活动,堪称神经科学与人工智能的完美结合。

介绍: 神经网络C++教程,本文介绍了用可调节梯度下降和可调节动量法设计和编码经典BP神经网络,网络经过训练可以做出惊人和美妙的东西出来。此外作者博客的其他文章也很不错。

介绍:deeplearning4j官网提供的实际应用场景NN选择参考表,列举了一些典型问题建议使用的神经网络

介绍:一个深度学习项目,提供了Python, C/C++, Java, Scala, Go多个版本的代码

介绍:深度学习教程,github

介绍:自然语言处理的发展趋势——访卡内基梅隆大学爱德华·霍威教授.

介绍:Google对Facebook DeepFace的有力回击—— FaceNet,在LFW(Labeled Faces in the Wild)上达到99.63%准确率(新纪录),FaceNet embeddings可用于人脸识别、鉴别和聚类.

介绍:本文来自Databricks公司网站的一篇博客文章,由Joseph Bradley和Manish Amde撰写,文章主要介绍了Random Forests和Gradient-Boosted Trees(GBTs)算法和他们在MLlib中的分布式实现,以及展示一些简单的例子并建议该从何处上手.中文版.

介绍:华盛顿大学Pedro Domingos团队的DNN,提供论文和实现代码.

介绍:基于神经网络的自然语言依存关系解析器(已集成至Stanford CoreNLP),特点是超快、准确,目前可处理中英文语料,基于《A Fast and Accurate Dependency Parser Using Neural Networks》 思路实现.

介绍:本文根据神经网络的发展历程,详细讲解神经网络语言模型在各个阶段的形式,其中的模型包含NNLM[Bengio,2003]、 Hierarchical NNLM[Bengio, 2005], Log-Bilinear[Hinton, 2007],SENNA等重要变形,总结的特别好.

介绍:经典问题的新研究:利用文本和可读性特征分类垃圾邮件。

介绍:Kaggle脑控计算机交互(BCI)竞赛优胜方案源码及文档,包括完整的数据处理流程,是学习Python数据处理和Kaggle经典参赛框架的绝佳实例

介绍:IPOL(在线图像处理)是图像处理和图像分析的研究期刊,每篇文章都包含一个算法及相应的代码、Demo和实验文档。文本和源码是经过了同行评审的。IPOL是开放的科学和可重复的研究期刊。我一直想做点类似的工作,拉近产品和技术之间的距离.

介绍:出自MIT,研究加密数据高效分类问题.

介绍:新加坡LV实验室的神经网络并行框架Purine: A bi-graph based deep learning framework,支持构建各种并行的架构,在多机多卡,同步更新参数的情况下基本达到线性加速。12块Titan 20小时可以完成Googlenet的训练。

介绍:这是一个机器学习资源库,虽然比较少.但蚊子再小也是肉.有突出部分.此外还有一个由zheng Rui整理的机器学习资源.

介绍:Chase Davis在NICAR15上的主题报告材料,用Scikit-Learn做监督学习的入门例子.

介绍:这是一本自然语言处理的词典,从1998年开始到目前积累了成千上万的专业词语解释,如果你是一位刚入门的朋友.可以借这本词典让自己成长更快.

介绍:通过分析1930年至今的比赛数据,用PageRank计算世界杯参赛球队排行榜.

介绍:R语言教程,此外还推荐一个R语言教程An Introduction to R.

介绍:经典老文,复杂网络社区发现的高效算法,Gephi中的Community detection即基于此.

介绍: 一个面向 .net 的开源机器学习库,github地址

介绍: 支持node.js的JS神经网络库,可在客户端浏览器中运行,支持LSTM等 github地址

介绍: 决策树

介绍: 讨论深度学习自动编码器如何有效应对维数灾难,国内翻译

介绍: CMU的优化与随机方法课程,由A. Smola和S. Sra主讲,优化理论是机器学习的基石,值得深入学习 国内云(视频)

介绍: “面向视觉识别的CNN”课程设计报告集锦.近百篇,内容涉及图像识别应用的各个方面

介绍:用Spark的MLlib+GraphX做大规模LDA主题抽取.

介绍: 基于深度学习的多标签分类,用基于RBM的DBN解决多标签分类(特征)问题

介绍: DeepMind论文集锦

介绍: 一个开源语音识别工具包,它目前托管在sourceforge上面

介绍: 免费电子书《数据新闻手册》, 国内有热心的朋友翻译了中文版,大家也可以在线阅读

介绍: 零售领域的数据挖掘文章.

介绍: 深度学习卷积概念详解,深入浅出.

介绍: 非常强大的Python的数据分析工具包.

介绍: 2015文本分析(商业)应用综述.

介绍: 深度学习框架、库调研及Theano的初步测试体会报告.

介绍: MIT的Yoshua Bengio, Ian Goodfellow, Aaron Courville著等人讲深度学习的新书,还未定稿,线上提供Draft chapters收集反馈,超赞!强烈推荐.

介绍: Python下开源可持久化朴素贝叶斯分类库.

介绍:Paracel is a distributed computational framework designed for machine learning problems, graph algorithms and scientific computing in C++.

介绍: 开源汉语言处理包.

介绍: 使用Ruby实现简单的神经网络例子.

介绍:神经网络黑客入门.

介绍:好多数据科学家名人推荐,还有资料.

介绍:实现项目已经开源在github上面Crepe

介绍:作者发现,经过调参,传统的方法也能和word2vec取得差不多的效果。另外,无论作者怎么试,GloVe都比不过word2vec.

介绍:Stanford深度学习与自然语言处理课程,Richard Socher主讲.

介绍:机器学习中的重要数学概念.

介绍:用于改进语义表示的树型LSTM递归神经网络,句子级相关性判断和情感分类效果很好.实现代码.

介绍:卡耐基梅隆Ryan Tibshirani和Larry Wasserman开设的机器学习课程,先修课程为机器学习(10-715)和中级统计学(36-705),聚焦统计理论和方法在机器学习领域应用.

介绍:《哈佛大学蒙特卡洛方法与随机优化课程》是哈佛应用数学研究生课程,由V Kaynig-Fittkau、P Protopapas主讲,Python程序示例,对贝叶斯推理感兴趣的朋友一定要看看,提供授课视频及课上IPN讲义.

介绍:生物医学的SPARK大数据应用.并且伯克利开源了他们的big data genomics系统ADAM,其他的内容可以关注一下官方主页.

介绍:对自然语言处理技术或者机器翻译技术感兴趣的亲们,请在提出自己牛逼到无以伦比的idea(自动归纳翻译规律、自动理解语境、自动识别语义等等)之前,请通过谷歌学术简单搜一下,如果谷歌不可用,这个网址有这个领域几大顶会的论文列表,切不可断章取义,胡乱假设.

介绍:论文+代码:基于集成方法的Twitter情感分类,实现代码.

介绍:NIPS CiML 2014的PPT,NIPS是神经信息处理系统进展大会的英文简称.

介绍:斯坦福的深度学习课程的Projects 每个人都要写一个论文级别的报告 里面有一些很有意思的应用 大家可以看看 .

介绍:R语言线性回归多方案速度比较具体方案包括lm()、nls()、glm()、bayesglm()、nls()、mle2()、optim()和Stan’s optimizing()等.

介绍:文中提到的三篇论文(机器学习那些事、无监督聚类综述、监督分类综述)都很经典,Domnigos的机器学习课也很精彩

介绍:莱斯大学(Rice University)的深度学习的概率理论.

介绍:基于马尔可夫链自动生成啤酒评论的开源Twitter机器人,github地址.

介绍:视频+讲义:深度学习用于自然语言处理教程(NAACL13).

介绍:用机器学习做数据分析,David Taylor最近在McGill University研讨会上的报告,还提供了一系列讲机器学习方法的ipn,很有价值 GitHub.国内

介绍:基于CNN+LSTM的视频分类,google演示.

介绍:Quora怎么用机器学习.

介绍:亚马逊在机器学习上面的一些应用,代码示例.

介绍:并行机器学习指南(基于scikit-learn和IPython).notebook

介绍:DataSchool的机器学习基本概念教学.

介绍:一个基于OpenGL实现的卷积神经网络,支持Linux及Windows系.

介绍:基于Mahout和Elasticsearch的推荐系统.

介绍:Francis X. Diebold的《(经济|商业|金融等领域)预测方法.

介绍:Francis X. Diebold的《时序计量经济学》.

介绍:基于Yelp数据集的开源情感分析工具比较,评测覆盖Naive Bayes、SentiWordNet、CoreNLP等 .

介绍:国内Pattern Recognition And Machine Learning读书会资源汇总,各章pdf讲稿,博客.

介绍:用于Web分析和数据挖掘的概率数据结构.

介绍:机器学习在导航上面的应用.

介绍:Neural Networks Demystified系列视频,Stephen Welch制作,纯手绘风格,浅显易懂,国内云.

介绍:{swirl}数据训练营:R&数据科学在线交互教程.

介绍:关于深度学习和RNN的讨论 Sequence to Sequence Learning with Neural Networks.

介绍:Deep Reinforcement Learning.

介绍:(PyCon2015)Scikit-Learn机器学习教程,Parallel Machine Learning with scikit-learn and IPython.

介绍:PDNN: A Python Toolkit for Deep Learning.

介绍:15年春季学期CMU的机器学习课程,由Alex Smola主讲,提供讲义及授课视频,很不错.国内镜像.

介绍:大数据处理课.内容覆盖流处理、MapReduce、图算法等.

介绍:用Spark MLlib实现易用可扩展的机器学习,国内镜像.

介绍:以往上千行代码概率编程(语言)实现只需50行.

介绍:ggplot2速查小册子,另外一个,此外还推荐《A new data processing workflow for R: dplyr, magrittr, tidyr, ggplot2》.

介绍:用结构化模型来预测实时股票行情.

介绍:国际人工智能联合会议录取论文列表,大部分论文可使用Google找到.

介绍:一般矩阵乘法(GEMM)对深度学习的重要性.

介绍:A Community of awesome Distributed Machine Learning C++ projects.

介绍:免费电子书<强化学习介绍>,第一版(1998),第二版(2015草稿),相关课程资料,Reinforcement Learning.

介绍:免费书:Azure ML使用精要.

介绍:A Deep Learning Tutorial: From Perceptrons to Deep Networks.

介绍:有趣的机器学习:最简明入门指南,中文版.

介绍:深度学习简明介绍,中文版.

介绍:Portable, scalable and reliable distributed machine learning.

介绍:CNN开源实现横向评测,参评框架包括Caffe 、Torch-7、CuDNN 、cudaconvnet2 、fbfft、Nervana Systems等,NervanaSys表现突出.

介绍:卡耐基梅隆大学计算机学院语言技术系的资源大全,包括大量的NLP开源软件工具包,基础数据集,论文集,数据挖掘教程,机器学习资源.

介绍:Twitter情感分析工具SentiTweet,视频+讲义.

介绍:华盛顿大学的Machine Learning Paper Repository.

介绍:机器学习速查表.

介绍:最新的Spark summit会议资料.

介绍:最新的Spark summit会议资料.

介绍:Ebook Learning Spark.

介绍:Ebook Advanced Analytics with Spark, Early Release Edition.

介绍:清华大学副教授,是图挖掘方面的专家。他主持设计和实现的Arnetminer是国内领先的图挖掘系统,该系统也是多个会议的支持商.

介绍:迁移学习的国际领军人物.

介绍:在半监督学习,multi-label学习和集成学习方面在国际上有一定的影响力.

介绍:信息检索,自然语言处理,机器翻译方面的专家.

介绍:吴军博士是当前Google中日韩文搜索算法的主要设计者。在Google其间,他领导了许多研发项目,包括许多与中文相关的产品和自然语言处理的项目,他的新个人主页.

介绍:喵星人相关论文集.

介绍:如何评价机器学习模型系列文章,How to Evaluate Machine Learning Models, Part 2a: Classification Metrics,How to Evaluate Machine Learning Models, Part 2b: Ranking and Regression Metrics.

介绍:Twitter新trends的基本实现框架.

介绍:Storm手册,国内有中文翻译版本,谢谢作者.

介绍:Java机器学习算法库SmileMiner.

介绍:机器翻译学术论文写作方法和技巧,Simon Peyton Jones的How to write a good research paper同类视频How to Write a Great Research Paper,how to paper talk.

介绍:神经网络训练中的Tricks之高效BP,博主的其他博客也挺精彩的.

介绍:作者是NLP方向的硕士,短短几年内研究成果颇丰,推荐新入门的朋友阅读.

介绍:UCLA的Jens Palsberg根据Google Scholar建立了一个计算机领域的H-index牛人列表,我们熟悉的各个领域的大牛绝大多数都在榜上,包括1位诺贝尔奖得主,35位图灵奖得主,近 百位美国工程院/科学院院士,300多位ACM Fellow,在这里推荐的原因是大家可以在google通过搜索牛人的名字来获取更多的资源,这份资料很宝贵.

介绍:用大型语料库学习概念的层次关系,如鸟是鹦鹉的上级,鹦鹉是虎皮鹦鹉的上级。创新性在于模型构造,用因子图刻画概念之间依存关系,因引入兄弟 关系,图有环,所以用有环扩散(loopy propagation)迭代计算边际概率(marginal probability).

介绍: 这是一款贝叶斯分析的商业软件,官方写的贝叶斯分析的手册有250多页,虽然R语言 已经有类似的项目,但毕竟可以增加一个可选项.

介绍:deep net highlights from 2014.

介绍:This paper proposes Fast R-CNN, a clean and fast framework for object detection.

介绍:图像指纹的重复识别,作者源码,国内翻译版本.

介绍:提供计算机视觉、机器视觉应用的公司信息汇总.应用领域包括:自动辅助驾驶和交通管理、眼球和头部跟踪、影视运动分析、影视业、手势识别、通 用视觉系统、各种工业自动化和检验、医药和生物、移动设备目标识别和AR、人群跟踪、摄像、安全监控、生物监控、三维建模、web和云应用.

介绍:Python版可视化数据统计开源库.

介绍:麻省理工Gilbert Strang线性代数课程笔记,Gilbert Strang《Linear Algebra》课程主页视频+讲义.

介绍:面向机器学习/深度学习的数据向量化工具Canova,github, 支持CSV文件、MNIST数据、TF-IDF/Bag of Words/word2vec文本向量化.

介绍:快速入门:基于Apache Mahout的分布式机器学习.

介绍:基于scikit-learn讲解了一些机器学习技术,如SVM,NB,PCA,DT,以及特征工程、特征选择和模型选择问题.

介绍:基于Spark的高效机器学习,视频地址.

介绍:WePay用机器学习对抗信用卡”shell selling”诈骗.

介绍:16位数据科学家语录精选.

介绍:深度学习在大数据分析领域的应用和挑战.

介绍:免费的机器学习与数学书籍,除此之外还有其他的免费编程书籍,编程语言,设计,操作系统等.

介绍:一篇关于CNN模型对象识别Paper.

介绍:深度学习的统计分析V:泛化和正则化.

介绍:用SGD能高效完成训练的大规模(多层)深度网络HN.

介绍:深度学习解读文章.

介绍:Coursera上的推荐系统导论(Introduction to Recommender Systems)公开课.

介绍:Andrew Ng经典机器学习课程笔记.

介绍:ICLR 2015见闻录,博客的其他机器学习文章也不错.

介绍:推荐系统”个性化语义排序”模型.

介绍:激情时分更惜字——MIT的最新Twitter研究结果.

介绍:苏州大学人类语言技术研究相关论文.

介绍:实现神经图灵机(NTM),项目地址,此外推荐相关神经图灵机算法.

介绍:华盛顿大学的机器视觉(2015),参考资料Computer Vision: Algorithms and Applications.

介绍:”Mining of Massive Datasets”发布第二版,Jure Leskovec, Anand Rajaraman, Jeff Ullman 新版增加Jure Leskovec作为合作作者,新增社交网络图数据挖掘、降维和大规模机器学习三章,电子版依旧免费.

介绍:一个深度学习资源页,资料很丰富.

介绍:免费电子书”Learning Deep Learning”.

介绍:Machine Learning for Astronomy with scikit-learn.

介绍:免费电子书”随机森林入门指南”.

介绍:白话数据挖掘十大算法.

介绍:基于Mahout和Elasticsearch的推荐系统,国内译版.

介绍:博士学位论文:ELM研究进展.

介绍:Pandas十分钟速览,ipn.

介绍:面向数据新闻的文本挖掘.

介绍:用网络图片合成延时视频(SIGGRAPH 2015).

介绍:分类系统的维数灾难.

介绍:深度学习vs.大数据——从数据到知识:版权的思考,[翻译版](http://www.csdn.net/article/2015-05-19/2824707

介绍:预测模型入门.

介绍:深入浅出LSTM.

介绍:2015年ICLR会议视频讲义.

介绍:Ben Jones的数据可视化建议.

介绍:解读数据降维/PCA/SVD.

介绍:IPN:监督学习方法示例/对比参考表,覆盖logistic回归, 决策树, SVM, KNN, Naive Bayes等方法.

介绍:基于RankSVM和DNN自动(重组)生成Rap歌词.

介绍:随机索引RI词空间模型专题.

介绍:基于机器学习的漏洞检测工具VDiscover.

介绍:深度学习系统minerva。拥有python编程接口。多GPU几乎达到线性加速。在4块GPU上能在4天内将GoogLeNet训练到 68.7%的top-1以及89.0%的top-5准确率。和同为dmlc项目的cxxnet相比,采用动态数据流引擎,提供更多灵活性。未来将和 cxxnet一起整合为mxnet项目,互取优势.

介绍:2015年国际计算机视觉与模式识别会议paper.

介绍:Netflix工程总监眼中的分类算法:深度学习优先级最低,中文版.

介绍:Codalab图像标注竞赛排行+各家论文,Reddit上flukeskywalker整理了各家技术相关论文.

介绍:基于Caffe的加速深度学习系统CcT.

介绍:深度学习(模型)低精度(训练与)存储.

介绍:新书预览:模型机器学习.

介绍:免费电子书多臂老虎机,此外推荐Introduction to Bandits: Algorithms and Theory.

介绍:基于Kaggle’s Titanic Competition的交互式R机器学习教程,介绍《Interactive R Tutorial: Machine Learning for the Titanic Competition》.

介绍:Deep Learning(深度学习)学习笔记整理系列.

介绍:神经(感知)机器翻译介绍.

介绍:Andrew Ng关于深度学习/自学习/无监督特征学习的报告,国内云.

介绍:论文:通过潜在知识迁移训练RNN.

介绍:面向金融数据的情感分析工具.

介绍:(Python)主题模型交互可视化库pyLDAvis.

介绍:Logistic回归与优化实例教程.

介绍:贾扬清(谷歌大脑科学家、caffe缔造者)微信讲座记录.

介绍:Theano/Blocks实现RNN手写字符串生成sketch.

介绍:基于TopSig的海量(7亿+)网页聚类.

介绍:NAACL 2015 论文papers.

介绍:机器学习预测股市的七个问题.

介绍:神经网络学习资料推荐.

介绍:面向序列学习的RNN综述.

介绍:R文本处理手册.

介绍:“必看”的Python视频集锦.

介绍:Google(基础结构)栈.

介绍:矩阵和数据的随机算法(UC Berkeley 2013).

介绍:DataCamp中级R语言教程.

介绍:免费电子书:轻松掌握拓扑学,中文版.

介绍:Book,video.

介绍:Scikit-learn 是基于Scipy为机器学习建造的的一个Python模块,他的特色就是多样化的分类,回归和聚类的算法包括支持向量机,逻辑回归,朴素贝叶斯分类器,随 机森林,Gradient Boosting,聚类算法和DBSCAN。而且也设计出了Python numerical和scientific libraries Numpy and Scipy

介绍:Pylearn是一个让机器学习研究简单化的基于Theano的库程序。

介绍:NuPIC是一个以HTM学习算法为工具的机器智能平台。HTM是皮层的精确计算方法。HTM的核心是基于时间的持续学习算法和储存和撤销的时空模式。NuPIC适合于各种各样的问题,尤其是检测异常和预测的流数据来源。

介绍:Nilearn 是一个能够快速统计学习神经影像数据的Python模块。它利用Python语言中的scikit-learn 工具箱和一些进行预测建模,分类,解码,连通性分析的应用程序来进行多元的统计。

介绍:Pybrain是基于Python语言强化学习,人工智能,神经网络库的简称。 它的目标是提供灵活、容易使用并且强大的机器学习算法和进行各种各样的预定义的环境中测试来比较你的算法。

介绍:Pattern 是Python语言下的一个网络挖掘模块。它为数据挖掘,自然语言处理,网络分析和机器学习提供工具。它支持向量空间模型、聚类、支持向量机和感知机并且用KNN分类法进行分类。

介绍:Fuel为你的机器学习模型提供数据。他有一个共享如MNIST, CIFAR-10 (图片数据集), Google’s One Billion Words (文字)这类数据集的接口。你使用他来通过很多种的方式来替代自己的数据。

介绍:Bob是一个免费的信号处理和机器学习的工具。它的工具箱是用Python和C++语言共同编写的,它的设计目的是变得更加高效并且减少开发时间,它是由处理图像工具,音频和视频处理、机器学习和模式识别的大量软件包构成的。

介绍:Skdata是机器学习和统计的数据集的库程序。这个模块对于玩具问题,流行的计算机视觉和自然语言的数据集提供标准的Python语言的使用。

介绍:MILK是Python语言下的机器学习工具包。它主要是在很多可得到的分类比如SVMS,K-NN,随机森林,决策树中使用监督分类法。 它还执行特征选择。 这些分类器在许多方面相结合,可以形成不同的例如无监督学习、密切关系金传播和由MILK支持的K-means聚类等分类系统。

介绍:IEPY是一个专注于关系抽取的开源性信息抽取工具。它主要针对的是需要对大型数据集进行信息提取的用户和想要尝试新的算法的科学家。

介绍:Quepy是通过改变自然语言问题从而在数据库查询语言中进行查询的一个Python框架。他可以简单的被定义为在自然语言和数据库查询中不 同类型的问题。所以,你不用编码就可以建立你自己的一个用自然语言进入你的数据库的系统。现在Quepy提供对于Sparql和MQL查询语言的支持。并 且计划将它延伸到其他的数据库查询语言。

介绍:Hebel是在Python语言中对于神经网络的深度学习的一个库程序,它使用的是通过PyCUDA来进行GPU和CUDA的加速。它是最重要的神经网络模型的类型的工具而且能提供一些不同的活动函数的激活功能,例如动力,涅斯捷罗夫动力,信号丢失和停止法。

介绍:它是一个由有用的工具和日常数据科学任务的扩展组成的一个库程序。

介绍:这个程序包容纳了大量能对你完成机器学习任务有帮助的实用程序模块。其中大量的模块和scikit-learn一起工作,其它的通常更有用。

介绍:Ramp是一个在Python语言下制定机器学习中加快原型设计的解决方案的库程序。他是一个轻型的pandas-based机器学习中可插 入的框架,它现存的Python语言下的机器学习和统计工具(比如scikit-learn,rpy2等)Ramp提供了一个简单的声明性语法探索功能从 而能够快速有效地实施算法和转换。

介绍:这一系列工具通过与scikit-learn兼容的API,来创建和测试机器学习功能。这个库程序提供了一组工具,它会让你在许多机器学习程 序使用中很受用。当你使用scikit-learn这个工具时,你会感觉到受到了很大的帮助。(虽然这只能在你有不同的算法时起作用。)

介绍:REP是以一种和谐、可再生的方式为指挥数据移动驱动所提供的一种环境。它有一个统一的分类器包装来提供各种各样的操作,例如TMVA, Sklearn, XGBoost, uBoost等等。并且它可以在一个群体以平行的方式训练分类器。同时它也提供了一个交互式的情节。

介绍:用亚马逊的机器学习建造的简单软件收集。

介绍:这是一个在Python语言下基于scikit-learn的极端学习机器的实现。

介绍:电子书降维方法,此外还推荐Dimensionality Reduction A Short TutorialMatlab Toolbox for Dimensionality ReductionUnsupervised Kernel Dimension Reduction

介绍:deeplearning.net整理的深度学习数据集列表.

介绍:Go语言编写的自然语言处理工具.

介绍:词频模型对词向量的反击,参考Improving Distributional Similarity with Lessons Learned from Word Embeddings

介绍:预测模型的三个方面.

介绍:斯坦福大学深度学习与自然语言处理课程,部分课程笔记词向量引言

介绍:CVPR2015上Google的CV研究列表.

介绍:利用(Metamind)深度学习自动发现篮球赛精彩片段.

介绍:对本土化特征学习的分析

Free Resources for Beginners on Deep Learning and Neural Network

By

Source: http://www.analyticsvidhya.com/blog/2015/11/free-resources-beginners-deep-learning-neural-network/

Introduction

Machines have already started their march towards artificial intelligence. Deep Learning and Neural Networks are probably the hottest topics in machine learning research today. Companies like Google, Facebook and Baidu are heavily investing into this field of research.

Researchers believe that machine learning will highly influence human life in near future. Human tasks will be automated using robots with negligible margin of error. I’m sure many of us would never have imagined such gigantic power of machine learning.

To ignite your desire, I’ve listed the best tutorials on Deep Learning and Neural Networks available on internet today. I’m sure this would be of your help! Take your first step today.

Time for some motivation here. You ‘must’ watch this before scrolling further. This ~3min video was released yesterday by Google. Enjoy!

 

Time for proceed further. Firstly, let’s understand Deep Learning and Neural Network in simple terms.

 

What is Neural Network?

The concept of Neural Network began way back in 1980s. But, has gained re-ignited interest in recent times. Neural network is originally a biological phenomenon. Neural network is a ‘network’ of interconnected neurons which maintain a high level of coordination to receive and transmit messages to brain & spinal cord. In machine learning, we refer Neural Network as ‘Artificial Neural Network’.

Artificial Neural Network, as the name suggests, is a network (layer) of artificially created ‘neurons’ which are then taught to adapt cognitive skills to function like human brain. Image Recognition, Voice Recognition, Soft Sensors, Anomaly detection, Time Series Predictions etc are all applications of ANN.

 

What is Deep Learning?

In simple words, Deep Learning can be understood as an algorithm which is composed of hidden layers of multiple neural networks. It works on unsupervised data and is known to provide accurate results than traditional ML algorithms.

Input data is passed through this algorithm, which is then passed through several non-linearities before delivering output. This algorithm allows us to go ‘deeper’ (higher level of abstraction) in the network without ending up writing lot of duplicated code, unlike ‘shallow’ algorithms. As it goes deeper and deeper, it filter the complex features and combines with those of previous layer, thus better results.

Algorithms like Decision Trees, SVM, Naive Bayes are ‘shallow’ algorithm. These involves writing lot of duplicated code and cause trouble reusing previous computations.

Deep Learning through Neural Network and takes us a step closer to Artificial Intelligence.

 

What do Experts have to say?

Early this years, AMAs took place on Reddit with the masters of Deep Learning and Neural Network. Considering my ever rising craze to dig latest information about this field, I got the chance to attend their AMA session. Let’s see what they have to said about the existence and future of this field:

1

Geoffrey Hinton said, ‘The brain has about 1014 synapses and we only live for about 109 seconds. So we have a lot more parameters than data. This motivates the idea that we must do a lot of unsupervised learning since the perceptual input (including proprioception) is the only place we can get 105 dimensions of constraint per second.’

 

2

Yann LeCunn, on emotions in robot, said, ‘Emotions do not necessarily lead to irrational behavior. They sometimes do, but they also often save our lives. If emotions are anticipations of outcome (like fear is the anticipation of impending disasters or elation is the anticipation of pleasure), or if emotions are drives to satisfy basic ground rules for survival (like hunger, desire to reproduce), then intelligent agent will have to have emotions’

 

3

Yoshua Bengio said, ‘Recurrent or recursive nets are really useful tools for modelling all kinds of dependency structures on variable-sized objects. We have made progress on ways to train them and it is one of the important areas of current research in the deep learning community. Examples of applications: speech recognition (especially the language part), machine translation, sentiment analysis, speech synthesis, handwriting synthesis and recognition, etc.’

 

4

Jurgen Schmidhuber says, ’20 years from now we’ll have 10,000 times faster computers for the same price, plus lots of additional medical data to train them. I assume that even the already existing neural network algorithms will greatly outperform human experts in most if not all domains of medical diagnosis, from melanoma detection to plaque detection in arteries, and innumerable other applications.’

 

P.S. I am by no means an expert on Neural Networks. In fact, I have just started my journey in this fascinating world. If you think, there are other free good resources which I have not shared below, please feel free to provide the suggestions

 

Below is the list of free resources useful to master these useful concepts:

 

Courses

Machine Learning by Andrew Ng: If you are a complete beginner to machine learning and neural networks, this course is the best place to start. Enrollments for the current batch ends on Nov 7, 2015. This course provides a broad introduction to machine learning, deep learning, data mining, neural networks using some useful case studies. You’ll also learn about the best practices of these algorithms and where are we heading with them

 

Neural Network Course on Coursera: Who could teach Neural Network better than Hinton himself? This is a highly recommended course on Neural Network. Though, it is archived now, you can still access the course material. It’s a 8 week long course and would require you to dedicate atleast 7-9 hours/week.  This course expects prior knowledge of Python / Octave / Matlab and good hold on mathematical concepts (vector, calculus, algebra).

 

In addition to the course above, I found useful slides and lecture notes of Deep Learning programs from a few top universities of the world:

Carnegie Mellon University – Deep Learning : This course ended on 21st October 2015. It is archived now. But, you can still access the slides shared during this course. Learning from slide is an amazing way to understand concepts quickly. These slides cover all the aspects of deep learning to a certain point. I wouldn’t recommend this study material for beginners but to intermediates and above in this domain.

 

Deep Learning for NLP – This conference happened in 2013 on Human Language Technologies. The best part was, the knowledge which got shared. The slides and videos and well accessible and comprises of simple explanation of complex concepts. Beginners will find it worth watching these videos as the instructor begins the session from Logistic Regression and dives deeper into the use of machine learning algorithms.

 

Deep Learning for Computer Vision – This course was commenced at the starting of year 2015 by Columbia University. It focuses on deep learning techniques for vision and natural language processing problems. This course embraces theano as the programming tool. This course requires prior knowledge in Python and NumPy programming, NLP and Machine Learning.

 

Deep Learning: This is an archived course. It happened in Spring 2014. It was instructed by Yann LeCunn. This is a graduate course on Deep Learning. The precious slides and videos are accessible. I’d highly recommend this course to beginners. You’d amazed by the way LeCunn explains. Very simple and apt. To get best out of this course, I’d suggest you to work on assignments too, for your self evaluation.

 

Books

6

 

This book is written by Christopher M Bishop. This book serves as a excellent reference for students keen to understand the use of statistical techniques in machine learning and pattern recognition. This books assumes the knowledge of linear algebra and multivariate calculus. It provides a comprehensive introduction to statistical pattern recognition techniques using practice exercises.

 

 

Because of the rapid development and active research in the field, there aren’t many printed and accessible books available on Deep Learning. However, I found that Yoshua Bengio, along with Ian Goodfellow and Aaron Courville is working on a book. You can check its recent developments here.

Neural Networks and Deep Learning: This book is written by Michael Neilson. It is available FREE online. If you are good at learning things at your own pace, I’d suggest you to read this book. There are just 6 Chapters. Every chapters goes in great detail of concepts related to deep learning using really nice illustrations.

 

Blogs

Here are some of the best bet I have come across:

Beginners

Introduction to Neural Networks : This is Chapter 10 of Book, ‘The Nature of Code’. You’ll find the reading style simple and easy to comprehend. The author has explained neural network from scratch. Along with theory, you’ll also find codes(in python) to practice and apply them at your them. This not only would give you confidence to learn these concept, but would also allow you to experience their impact.

 

Hacker’s Guide to Neural Networks : Though, the codes in this blog are written in Javascript which you might not know. I’d still suggest you to refer it for the simplicity of theoretical concepts. This tutorial has very little math, but you’ll need lots of logic to comprehend and understand the following parts.

 

Intermediates

Recurrent Neural Network Part 1, Part 2, Part 3, Part 4 : After you are comfortable with basics of neural nets, it’s time to move to the next level. This is probably the best guide you would need to master RNN. RNN is a form of artificial neural network whose neurons send feedback signals to each other. I’d suggest you to follow the 4 parts religiously. It begins RNN from basics, followed by back propagation and its implementation.

 

Unreasonable Effectiveness of RNN: Consider this as an additional resource on RNN. If you are fond of seeking options, you might like to check this blog. It start with basic definition of RNN and goes all the way deep into building character models. This should help you give more hands on experience on implementing neural networks in various situations.

 

Backward Propogation Neural Network: Here you’ll find a simple explanation on the method of implementing backward propagation neural network. I’d suggest beginners to follow this blog and learn more about this concept. It will provide you a step by step approach for understanding neural networks deeply.

 

Deep Learning Tutorial by Stanford: This is by far the best tutorial/blog available on deep learning on internet. Having been recommended by many, it explains the complete science and mathematics behind every algorithm using easy to understand illustrations. This tutorial assumes basic knowledge of machine learning. Therefore, I’d suggest you to start with this tutorial after finishing Machine Learning course by Andrew Ng.

 

Videos

Complete Tutorial on Neural Networks : This complete playlist of neural network tutorials should suffice your learning appetite. There were numerous videos I found, but offered a comprehensive learning like this one.

 

Note: In order to quickly get started, I’d recommend you to participate in Facial keypoint Detection Kaggle competition. Though, this competition ended long time back, you can still participate and practice. Moreover, you’ll also find benchmark solution for this competition. Here is the solution: Practice – Neural Nets. Get Going!

 

Deep Learning Lectures: Here is a complete series of lectures on Deep Learning from University of Oxford 2015. The instructor is Nando de Freitas. This tutorials covers a wide range of topics from linear models, logistic regression, regularization to recurrent neural nets. Instead of rushing through these videos, I’d suggest you to devote good amount of time and develop concrete understanding of these concepts. Start from Lecture 1.

 

Introduction to Deep Learning with Python: After learning the theoretical aspects of these algorithm, it’s now time to practice them using Python. This ~1 hour video is highly recommended to practice deep learning in python using theano.

 

Deep Learning Summer School, Montreal 2015: Here are the videos from Deep Learning Summer School, Montreal 2015. These videos covers advanced topics in Deep Learning. Hence, I wouldn’t recommend them to beginners. However, people with knowledge of machine learning must watch them. These videos will take your deep learning intellect to a new level. Needless to say, they are FREE to access.

 

Also See: Top Youtube Videos on Machine Learning, Deep Learning and Neural Networks

 

Research Papers

I could list here numerous paper published on Deep Learning, but that would have defeated the purpose. Hence, to highlight the best resources, I’ve listed some of the seminal papers in this field:

Deep Learning in Neural Networks

Introduction to Deep Learning

Deep Boltzmann Machines

Learning Deep Architectures for AI

Deep Learning of Representations: Looking Forward

Gradient based training for Deep Architechture

 

End Notes

By now, I’m sure you have a lot of work carved out for yourself. I found them intimidating initially, but these videos and blogs totally helped me to regain my confidence. As said above, these are free resources and can be accessible from anywhere. If you are a beginner, I’d recommend you to start with Machine Learning course by Andrew Ng and read through blogs too.

I’ve tried to provide the best possible resources available on these topics at present. As mentioned before, I am not an expert on neural networks and machine learning (yet)! So it is quite possible that I missed out on some useful resource. Did I miss out any useful resource? May be! Please share your views / suggestions in the comments section below.

Practical Guide to implementing Neural Networks in Python (using Theano)

By

Source: http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/

Introduction

In my last article, I discussed the fundamentals of deep learning, where I explained the basic working of a artificial neural network. If you’ve been following this series, today we’ll become familiar with practical process of implementing neural network in Python (using Theano package).

I found various other packages also such as Caffe, Torch, TensorFlow etc to do this job. But, Theano is no less than and satisfactorily execute all the tasks. Also, it has multiple benefits which further enhances the coding experience in Python.

In this article, I’ll provide a comprehensive practical guide to implement Neural Networks using Theano. If you are here for just python codes, feel free to skip the sections and learn at your pace. And, if you are new to Theano, I suggest you to follow the article sequentially to gain complete knowledge.

Note:

  1. This article is best suited for users with knowledge of neural network & deep learning.
  2. If you don’t know python, start here.
  3. If you don’t know deep learning, start here.

Practical guide to implement neural network in python using theano

 

Table of Contents

  1. Theano Overview
  2. Implementing Simple expressions
  3. Theano Variable Types
  4. Theano Functions
  5. Modeling a Single Neuron
  6. Modeling a Two-Layer Networks

 

1. Theano Overview

In short, we can define Theano as:

  • A programming language which runs on top of Python but has its own data structure which are tightly integrated with numpy
  • A linear algebra compiler with defined C-codes at the backend
  • A python package allowing faster implementation of mathematical expressions

As popularly known, Theano was developed at the University of Montreal in 2008. It is used for defining and evaluating mathematical expressions in general.

Theano has several features which optimize the processing time of expressions. For instance it modifies the symbolic expressions we define before converting them to C codes. Examples:

  • It makes the expressions faster, for instance it will change { (x+y) + (x+y) } to { 2*(x+y) }
  • It makes expressions more stable, for instance it will change { exp(a) / exp(a).sum(axis=1) } to { softmax(a) }

Below are some powerful advantages of using Theano:

  1. It defines C-codes for different mathematical expressions.
  2. The implementations are much faster as compared to some of the python’s default implementations.
  3. Due to fast implementations, it works well in case of high dimensionality problems.
  4. It allows GPU implementation which works blazingly fast specially for problems like deep learning.

Let’s now focus on Theano (with example) and try to understand it as a programming language.

 

2. Implementing Simple Expressions

Lets start by implementing a simple mathematical expression, say a multiplication in Theano and see how the system works. In later sections, we will take a deep dive into individual components. The general structure of a Theano code works in 3 steps:

  1. Define variables/objects
  2. Define a mathematical expression in the form of a function
  3. Evaluate expressions by passing values

Lets look at the following code for simply multiplying 2 numbers:

Step 0: Import libraries

import numpy as np
import theano.tensor as T
from theano import function

Here, we have simply imported 2 key functions of theano – tensor and function.

Step 1: Define variables

a = T.dscalar('a')
b = T.dscalar('b')

Here 2 variables are defined. Note that we have used Theano tensor object type here. Also, the arguments passed to dscalar function are just name of tensors which are useful while debugging. They code will work even without them.

Step 2: Define expression

c = a*b
f = function([a,b],c)

Here we have defined a function f which has 2 arguments:

  1. Inputs [a,b]: these are inputs to system
  2. Output c: this has been previously defined

Step 3: Evaluate Expression

f(1.5,3)

1. output 1

Now we are simply calling the function with the 2 inputs and we get the output as a multiple of the two. In short, we saw how we can define mathematical expressions in Theano and evaluate them. Before we go into complex functions, lets understand some inherent properties of Theano which will be useful in building neural networks.

 

3. Theano Variable Types

Variables are key building blocks of any programming language. In Theano, the objects are defined as tensors. A tensor can be understood as a generalized form of a vector with dimension t. Different dimensions are analogous to different types:

  • t = 0: scalar
  • t = 1: vector
  • t = 2: matrix
  • and so on..

Watch this interesting video to get a deeper level of intuition into vectors and tensors.

These variables can be defined similar to our definition of ‘dscalar’ in the above code. The various keywords for defining variables are:

  • byte: bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4
  • 16-bit integers: wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4
  • 32-bit integers: iscalar, ivector, imatrix, irow, icol, itensor3, itensor4
  • 64-bit integers: lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4
  • float: fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4
  • double: dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4
  • complex: cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4

Now you understand that we can define variables with different memory allocations and dimensions. But this is not an exhaustive list. We can define dimensions higher than 4 using a generic TensorType class. You’ll find more details here.

Please note that variables of these types are just symbols. They don’t have a fixed value and are passed into functions as symbols. They only take values when a function is called. But, we often need variables which are constants and which we need not pass in all the functions. For this Theano provides shared variables. These have a fixed value and are not of the types discussed above. They can be defined as numpy data types or simple constants.

Lets take an example. Suppose, we initialize a shared variable as 0 and use a function which:

  • takes an input
  • adds the input to the shared variable
  • returns the square of shared variable

This can be done as:

from theano import shared
x = T.iscalar('x')
sh = shared(0)
f = function([x], sh**2, updates=[(sh,sh+x)])

Note that here function has an additional argument called updates. It has to be a list of lists or tuples, each containing 2 elements of form (shared_variable, updated_value). The output for 3 subsequent runs is:

2. shared

You can see that for each run, it returns the square of the present value, i.e. the value before updating. After the run, the value of shared variable gets updated. Also, note that shared variables have 2 functions “get_value()” and “set_value()” which are used to read and modify the value of shared variables.

 

4. Theano Functions

Till now we saw the basic structure of a function and how it handles shared variables. Lets move forward and discuss couple more things we can do with functions:

Return Multiple Values

We can return multiple values from a function. This can be easily done as shown in following example:

a = T.dscalar('a')
f = function([a],[a**2, a**3])
f(3)

3. multiple output

We can see that the output is an array with the square and cube of the number passed into the function.

Computing Gradients

Gradient computation is one of the most important part of training a deep learning model. This can be done easily in Theano. Let’s define a function as the cube of a variable and determine its gradient.

x = T.dscalar('x')
y = x**3
qy = T.grad(y,x)
f = function([x],qy)
f(4)

This returns 48 which is 3x2 for x=4. Lets see how Theano has implemented this derivative using the pretty-print feature as following:

from theano import pp  #pretty-print
print(pp(qy))

4. pp

In short, it can be explained as: fill(x3,1)*3*x3-1 You can see that this is exactly the derivative of x3. Note that fill(x3,1) simply means to make a matrix of same shape as x3 and fill it with 1. This is used to handle high dimensionality input and can be ignored in this case.

We can use Theano to compute Jacobian and Hessian matrices as well which you can find here.

There are various other aspects of Theano like conditional and looping constructs. You can go into further detail using following resources:

  1. Theano Conditional Constructs
  2. Theano Looping Statements
  3. Handling Shape Information

 

5. Modeling a Single Neuron

Lets start by modeling a single neuron.

Note that I will take examples from my previous article on neuron networks here. If you wish to go in the detail of how these work, please read this article. For modeling a neuron, lets adopt a 2 stage process:

  1. Implement Feed Forward Pass
    • take inputs and determine output
    • use the fixed weights for this case
  2. Implement Backward Propagation
    • calculate error and gradients
    • update weights using gradients

Lets implement an AND gate for this purpose.

 

Feed Forward Pass

An AND gate can be implemented as:

2

Now we will define a feed forward network which takes inputs and uses the shown weights to determine the output. First we will define a neuron which computes the output a.

import theano
import theano.tensor as T
from theano.ifelse import ifelse
import numpy as np

#Define variables:
x = T.vector('x')
w = T.vector('w')
b = T.scalar('b')

#Define mathematical expression:
z = T.dot(x,w)+b
a = ifelse(T.lt(z,0),0,1)

neuron = theano.function([x,w,b],a)

I have simply used the steps we saw above. If you are not sure how this expression works, please refer to the neural networks article I have referred above. Now let’s test out all values in the truth table and see if the AND function has been implemented as desired.

#Define inputs and weights
inputs = [
    [0, 0],
    [0, 1],
    [1, 0],
    [1, 1]
]
weights = [ 1, 1]
bias = -1.5

#Iterate through all inputs and find outputs:
for i in range(len(inputs)):
    t = inputs[i]
    out = neuron(t,weights,bias)
    print 'The output for x1=%d | x2=%d is %d' % (t[0],t[1],out)

5. single neuron

Note that, in this case we had to provide weights while calling the function. However, we will be required to update them while training. So, its better that we define them as a shared variable. The following code implements w as a shared variable. Try this out and you’ll get the same output.

import theano
import theano.tensor as T
from theano.ifelse import ifelse
import numpy as np

#Define variables:
x = T.vector('x')
w = theano.shared(np.array([1,1]))
b = theano.shared(-1.5)

#Define mathematical expression:
z = T.dot(x,w)+b
a = ifelse(T.lt(z,0),0,1)

neuron = theano.function([x],a)

#Define inputs and weights
inputs = [
    [0, 0],
    [0, 1],
    [1, 0],
    [1, 1]
]

#Iterate through all inputs and find outputs:
for i in range(len(inputs)):
    t = inputs[i]
    out = neuron(t)
    print 'The output for x1=%d | x2=%d is %d' % (t[0],t[1],out)

Now the feedforward step is complete.

 

Backward Propagation

Now we have to modify the above code and perform following additional steps:

  1. Determine the cost or error based on true output
  2. Determine gradient of node
  3. Update the weights using this gradient

Lets initialize the network as follow:

#Gradient
import theano
import theano.tensor as T
from theano.ifelse import ifelse
import numpy as np
from random import random

#Define variables:
x = T.matrix('x')
w = theano.shared(np.array([random(),random()]))
b = theano.shared(1.)
learning_rate = 0.01

#Define mathematical expression:
z = T.dot(x,w)+b
a = 1/(1+T.exp(-z))

Note that, you will notice a change here as compared to above program. I have defined x as a matrix here and not a vector. This is more of a vectorized approach where we will determine all the outputs together and find the total cost which is required for determining the gradients.

You should also keep in mind that I am using the full-batch gradient descent here, i.e. we will use all training observations to update the weights.

Let’s determine the cost as follows:

a_hat = T.vector('a_hat') #Actual output
cost = -(a_hat*T.log(a) + (1-a_hat)*T.log(1-a)).sum()

In this code, we have defined a_hat as the actual observations. Then we determine the cost using a simple logistic cost function since this is a classification problem. Now lets compute the gradients and define a means to update the weights.

dw,db = T.grad(cost,[w,b])

train = function(
    inputs = [x,a_hat],
    outputs = [a,cost],
    updates = [
        [w, w-learning_rate*dw],
        [b, b-learning_rate*db]
    ]
)

In here, we are first computing gradient of the cost w.r.t. the weights for inputs and bias unit. Then, the train function here does the weight update job. This is an elegant but tricky approach where the weights have been defined as shared variables and the updates argument of the function is used to update them every time a set of values are passed through the model.

#Define inputs and weights
inputs = [
    [0, 0],
    [0, 1],
    [1, 0],
    [1, 1]
]
outputs = [0,0,0,1]

#Iterate through all inputs and find outputs:
cost = []
for iteration in range(30000):
    pred, cost_iter = train(inputs, outputs)
    cost.append(cost_iter)
    
#Print the outputs:
print 'The outputs of the NN are:'
for i in range(len(inputs)):
    print 'The output for x1=%d | x2=%d is %.2f' % (inputs[i][0],inputs[i][1],pred[i])
    
#Plot the flow of cost:
print '\nThe flow of cost during model run is as following:'
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(cost)

6. output single update

Here we have simply defined the inputs, outputs and trained the model. While training, we have also recorded the cost and its plot shows that our cost reduced towards zero and then finally saturated at a low value. The output of the network also matched the desired output closely. Hence, we have successfully implemented and trained a single neuron.

 

6. Modeling a Two-Layer Neural Network

I hope you have understood the last section. If not, please do read it multiple times and proceed to this section. Along with learning Theano, this will enhance your understanding of neural networks on the whole.

Lets consolidate our understanding by taking a 2-layer example. To keep things simple, I’ll take the XNOR example like in my previous article. If you wish to explore the nitty-gritty of how it works, I recommend reading the previous article.

The XNOR function can be implemented as:

6

As a reminder, the truth table of XNOR function is:

8. tt xnor case 1

Now we will directly implement both feed forward and backward at one go.

Step 1: Define variables

import theano
import theano.tensor as T
from theano.ifelse import ifelse
import numpy as np
from random import random

#Define variables:
x = T.matrix('x')
w1 = theano.shared(np.array([random(),random()]))
w2 = theano.shared(np.array([random(),random()]))
w3 = theano.shared(np.array([random(),random()]))
b1 = theano.shared(1.)
b2 = theano.shared(1.)
learning_rate = 0.01

In this step we have defined all the required variables as in the previous case. Note that now we have 3 weight vectors corresponding to each neuron and 2 bias units corresponding to 2 layers.

 

Step 2: Define mathematical expression

a1 = 1/(1+T.exp(-T.dot(x,w1)-b1))
a2 = 1/(1+T.exp(-T.dot(x,w2)-b1))
x2 = T.stack([a1,a2],axis=1)
a3 = 1/(1+T.exp(-T.dot(x2,w3)-b2))

Here we have simply defined mathematical expressions for each neuron in sequence. Note that here an additional step was required where x2 is determined. This is required because we want the outputs of a1 and a2 to be combined into a matrix whose dot product can be taken with the weights vector.

Lets explore this a bit further. Both a1 and a2 would return a vector with 4 units. So if we simply take an array [a1, a2] then we’ll obtain something like [ [a11,a12,a13,a14], [a21,a22,a23,a24] ]. However, we want this to be [ [a11,a21], [a12,a22], [a13,a23], [a14,a24] ]. The stacking function of Theano does this job for us.

 

Step 3: Define gradient and update rule

a_hat = T.vector('a_hat') #Actual output
cost = -(a_hat*T.log(a3) + (1-a_hat)*T.log(1-a3)).sum()
dw1,dw2,dw3,db1,db2 = T.grad(cost,[w1,w2,w3,b1,b2])

train = function(
    inputs = [x,a_hat],
    outputs = [a3,cost],
    updates = [
        [w1, w1-learning_rate*dw1],
        [w2, w2-learning_rate*dw2],
        [w3, w3-learning_rate*dw3],
        [b1, b1-learning_rate*db1],
        [b2, b2-learning_rate*db2]
    ]
)

This is very similar to the previous case. The key difference being that now we have to determine the gradients of 3 weight vectors and 2 bias units and update them accordingly.

 

Step 4: Train the model

inputs = [
    [0, 0],
    [0, 1],
    [1, 0],
    [1, 1]
]
outputs = [1,0,0,1]

#Iterate through all inputs and find outputs:
cost = []
for iteration in range(30000):
    pred, cost_iter = train(inputs, outputs)
    cost.append(cost_iter)
    
#Print the outputs:
print 'The outputs of the NN are:'
for i in range(len(inputs)):
    print 'The output for x1=%d | x2=%d is %.2f' % (inputs[i][0],inputs[i][1],pred[i])
    
#Plot the flow of cost:
print '\nThe flow of cost during model run is as following:'
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(cost)

7. 2 layer op

We can see that our network has successfully learned the XNOR function. Also, the cost of the model has reduced to reasonable limit. With this, we have successfully implemented a 2-layer network.

 

End Notes

In this article, we understood the basics of Theano package in Python and how it acts as a programming language. We also implemented some basic neural networks using Theano. I am sure that implementing Neural Networks on Theano will enhance your understanding of NN on the whole.

If hope you have been able to follow till this point, you really deserve a pat on your back. I can understand that Theano is not a traditional plug and play system like most of sklearn’s ML models. But the beauty of neural networks lies in their flexibility and an approach like this will allow you a high degree of customization in models. Some high-level wrappers of Theano do exist like Keras and Lasagne which you can check out. But I believe knowing the core of Theano will help you in using them.