对于一个初学者或者使用机器学习算法项目经验不够充分的人来说,当面对多种机器学习算法的时候,我们应该如何取舍?这个问题的答案是由很多因素决定的,这些因素包括:
1.数据的大小,质量以及性质
2.可用的计算时间
3.项目的紧迫性
4.你想用这些数据做什么
不过这也只是一种选择优先尝试模型的方法,要得出你工程数据的最好算法,可能最好的方式是把这些算法都尝试一遍。(当然,这张备忘单里的算法并不完备,但是可以学习判别标准)
阅读方法: 注意备忘单里的labels,根据yes,no的指标,eg:
If you want to perform dimension then use principal component analysis.
If you need a numeric prediction quickly, use decision trees or logistic regression.
If you need a hierarchical result, use hierarchical clustering.
监督学习
输入数据包含了有标记的训练样本和希望的输出,我们建立模型训练输入和输出之间的关系,当出现新数据的时候,我们可以根据已有数据建立的模型来预测输出。
Classification:当数据用于预知数据的类别(有类别的离散数据)时,这种监督学习称为分类。这种情况发生于给定离散的标签或者指示器的时候,可以是判断一张图片是猫还是狗。当有两个标签的时候,我们称为binary classification,当超过两类的时候,我们称为multi-class classification.
Regression:当需要预知的数据是连续的时候,这就是一个回归问题了。
Forecasting:这是一种根据历史和当前数据来进行预知的过程。主要常用来分析趋势。最常用的例子应该是根据当年和前几年的销售量,预判下一年的销售量
半监督学习
当监督学习的样本标记很昂贵和耗时的时候,在有限的样本标记下,我们使用未标记样本来强化监督学习,这种情况称为semi-supervised.半监督的学习,可以使用未标记样本数据和一小部分标记的样本数据来改进学习精度。
无监督学习
当使用无监督学习时,采用的是完全没有标记的数据样本。用于发现数据里面的内在模式,如聚类结构,低维流形,稀疏树和图
Clustering:把一堆数据样本中最为接近的样本聚类为一类。这通常用于把一整个数据集划分为多个组。分析在每个组进行来帮助用户来找到内在模式
Dimension reduction:减少数据的维度。在许多用用中,原始数据有很高维度的特征,但有些特征是冗余或者是于当前任务无关的。减小维度有助于帮助我们找到真实的,潜在的关系
强化学习
强化学习基于环境的反馈来分析和优化代理的行为。算法尝试不同的场景来发现那种行为会产生最大的回报,而不是被告知采取哪种行为。尝试-错误和延迟奖励是强化学习区分与其他技术的特点。
当选择算法的时候,需要考虑这几个因素:精度,训练时间和易用性。许多用户会把准确度放在第一位,而初学者则倾向于关注他们最了解的算法。
当获得一个数据集的时候,首先要考虑的是如何获得结果,而不管这结果看起来怎么样。初学者倾向于选择易于实现并能快速获得结果的算法。这是很好的第一步,一旦你获得结果并熟悉数据后,你可能花更多的时间使用更复杂的算法来增强对数据的理解从而进一步改进结果。
即时在这个阶段,最好的算法们都未必可以获得最高的精度,因为算法通常需要仔细的调整和广泛的训练已获得起最佳可以达到的性能。
当因变量不是连续而是分类的,则可以使用logit链接函数将Linear Regression转化为Logistic Regression
Logistic Regression是一种简单,快速,但强大的分类算法。这里我们讨论因变量的二类情形:y只有两个值yi∈(−1,1),i=1~N(这可以很容易的扩展为multi-class分类问题)
在logistic 回归中 我们使用一个不同的假设累来尝试预测一个给定的示例属于“1”类概率与它属于“-1”类的概率。函数形式为:p(yi=1|xi)=σ(wxi) 和 p(yi=−1|xi)=1−σ(wxi),这能保证任意数据属于这两类的概率和为1即:p(yi=−1|xi)+p(yi=1|xi)=1,其中 σ(x)=1/(1+exp(−x)),这是一个sigmoid函数。对于给定的训练样本,参数W可以通过最大化数据集的log-likelihood来获得。
Linear SVM and kernel SVM
核技巧是用于将低维上非线性可分的函数映射成高维线性可分函数。支持向量机(SVM)训练算法发现有超平面的法向量和偏差b表示的分类器。这个超平面(边界)尽可能宽地分隔不同的类。该问题可以转化为约束优化问题:
近年来,新的改进的训练方法,如无监督的预训练和逐层贪婪训练引起了对神经网络兴趣的复苏。日益强大的计算能力,如图形处理单元(GPU)和大规模并行处理(MPP),也刺激了神经网络的复兴。随着神经网络的复兴,发明了具有数千层的模型。
换言之,浅层神经网络已经发展成为深度学习神经网络。深度神经网络在监督学习中非常成功。当用于语言和图像识别的时候,深度学习和人类一样好,甚至更好。应用于无监督学习任务时,如特征提取,深度学习也可以在较少的人为干预下,从原始图像或演讲中提取特征。
一个神经网络由三部分组成:输入层,隐藏层和输出层。训练样本定义输入和输出层。当输出层是一个分类变量的时候,这个神经网络用于解决分类问题。当输出层是一个连续变量的时候,这个神经网络用于解决回归问题。当输出层和输入层个数一样的时候,神经网络可以用来提取内在特征。隐藏层的数量决定了模型的复杂度和建模能力。
k-means/k-modes, GMM (Gaussian mixture model) clustering
PCA,SVD and LDA
通常我们并不想把大量的特征直接用于机器学习算法中,因为一些特征可能是无关的,或者内在的维度可能小于特征值的数量。主成分分析(PCA),奇异值分解(SVD)和潜在狄利克雷分配(LDA)都可以用来降低维度。
PCA是一种无监督的聚类方法,它在尽可能多的保存信息的基础上,将原始数据映射到低维空间。PCA基本上找到了一个子空间,它保留了数据方差,子空间由数据协方差矩阵的主特征向量定义。
SVD和PCA有关,SVD是中心化数据矩阵的奇异值分解提供了主元的左奇异向量,该向量和PCA发现的子空间是相同的。而SVD是一种更通用的技术,因为他可以做PCA可能无法做的事情。例如,用户与电影举证的SVD能够提取可以在推荐系统中使用的用户档案盒电影档案。此外,在自然 语言处理(NLP)中,SVD也被广泛地用作主题建模工具,被称为潜在语义分析。
NLP的一个相关技术是潜在狄利克雷分配(LDA),LDA是以概率为主题的文档生成模型,它将文档分解成主题,这与高斯混合模型(GMM)将连续数据分解为不同的高斯密度有异曲同工之处。但与GMM不同的是,LDA模型是离散数据(文档中的单词),且限制了主题分布是服从Dirichlet先验分布的。
这是一个容易遵循的工作流程。当试图解决一个新问题时我们可以获取的信息为:
1.定义问题:希望解决什么问题?
2.简单开始:熟悉数据和基线的结果