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

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作者的著作,适合本科生和入门者边动手边学