1.分类
分类是一个监督学习问题。分类是一种基于训练样本数据(这些数据都已经被贴标签)区分另外的样本数据标签的过程,即另外的样本数据应该如何贴标签的问题。分类问题通过对被贴过标签的样本数据运行一个学习算法,然后返回一个训练好的分类模型,应用这个分类模型,能对另外未被贴标签的数据进行归类。目前分类问题的算法常见的应用场景有客户流失预测、精准营销、客户获取、个性偏好等。MLlib目前支持分类学习问题的算法有:逻辑回归、线性支持向量机(SVMs)、朴素贝叶斯和决策树。
下面我们使用朴素贝叶斯算法作为案例来看下关于分类问题在MLlib中的实现。
朴素贝叶斯是一种简单的多类分类方法,它假定分类特征之间两两不相关。朴素贝叶斯在训练上非常有效率,对训练集中的每一记录,它计算每一特征在类标签上的条件概率分布,然后运用贝叶斯理论计算某一观察在类标签的条件概率分布并用之来预测。MLlib支持多模朴素贝叶斯(multinomial naive Bayes),一种主要用于文档分类的算法。用于此场景时,每个观察者是一个文档,每个特征代表一个单词,特征的值是单词的频率。特征值必须是非零的单词出现频率。附加的平滑处理可通过设置参数λ(默认值为1.0)来完成。对于文档分类,输入特征向量通常是稀疏向量,并且能够获得稀疏输入的特有优势。由于熟练数据只是用一次,因此没有必要缓冲它。
下面代码片段演示了如何加载数据集,运用算法对象的静态方法执行训练算法,以及运用模型预测来计算训练误差。NaiveBayes实现了多模朴素贝叶斯算法。它接收一个Labeled-Point格式的RDD和一个可选的平滑参数lambda作为输入,输出一个用于评估和预测的NaiveBayesModel模型。
2.回归
线性回归是另一个经典的监督学习问题。在这个问题中,每个个体都有一个与之相关联的实数标签,并且我们希望在给出用于表示这些实体的数值特征后,所预测出的标签值可以尽可能接近实际值。MLlib目前支持回归算法有:线性回归、岭回归、Lasso和决策树。
下面我们使用随机森林算法作为案例来看下关于回归问题在MLlib中的实现。
随机森林(Random Forest),顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。随机森林可以看作是决策树的复数集合,在分类和回归应用中是最为成功的机器学习模型之一。随机森林整合了许多决策树以降低过度拟合的风险,并且同决策树算法一样,随机森林在处理类别特征时不需要进行特征自适应(feature scaling),并能把这一特点延伸到多元分类问题上。除此以外,随机森林还能应对非线性问题以及交互变量。MLlib中的随机森林支持二元和多类分类,支持连续特征和分类特征的回归,使用随机森林可以按照现成的决策树实现方式。
随机森林对于一系列决策树采用区分训练的方式,因此训练过程可以并行进行。这个算法在训练过程中注入了随机性特征因此每棵决策树都会有小量差异,随机森林算法将每棵树的预测结果进行整合来降低预测结果的方差值,以此来提高测试数据的正确率。
下面代码片段演示了如何加载LIBSVM格式的数据,将其解析为LabeledPoint格式的RDD,然后采用随机森林来进行回归,我们通过计算均方误差(MSE)来评估拟合度。
3.聚类
聚类,Cluster analysis,有时也被翻译为簇类,其核心任务是:将一组目样本数据划分为若干个簇,每个簇之间的数据尽可能的相似,簇与簇之间的数据尽可能的相异。聚类算法是机器学习(或者说是数据挖掘更合适)中重要的一部分,除了最为简单的K-Means聚类算法外,较常见的还有:层次法(CURE、CHAMELEON等)、网格算法(STING、Wave-Cluster等)等。
聚类是一个非监督学习问题,所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。其中每个子集叫作一个簇。与分类不同,分类是监督学习,要求分类前明确各个类别,并断言每个元素映射到一个类别,而聚类是观察式学习,在聚类前可以不知道类别甚至不给定类别数量,是非监督学习的一种。目前聚类广泛应用于统计学、生物学、数据库技术和市场营销等领域,相应的算法也非常的多。
MLlib目前已经支持的聚类算法是K-Means聚类算法,K-Means属于非监督学习,最大的特别和优势在于模型的建立不需要训练数据。在日常工作中,很多情况下没有办法事先获取到有效的训练数据,这时采用K-Means是一个不错的选择。但K-Means需要预先设置有多少个簇类(K值),这对于像计算某省份全部电信用户的交往圈这样的场景就完全的没办法用K-Means进行。对于可以确定K值不会太大但不明确精确的K值的场景,可以进行迭代运算,然后找出评估最小时所对应的K值,这个值往往能较好地描述有多少个簇类MLlib的实现中包含一个k-means++方法的并行化变体kmeansⅡ,算法的停止条件是迭代次数达到设置的最大迭代次数值,或者是某次迭代计算后结果有所收敛。该算法在MLlib里面的实现有如下的参数:
●k:所需的类簇的个数。
●maxIterations:最大的迭代次数。
●initializationMode:这个参数决定了是用随机初始化还是通过k-meansⅡ进行初始化。(www.xing528.com)
●runs:跑k-means算法的次数(k-mean算法不能保证能找出最优解,如果在给定的数据集上运行多次,算法将会返回最佳的结果)。
●initializiationSteps:决定了k-meansⅡ算法的步数。
●epsilon:决定了判断k-means是否收敛的距离阀值。
下面我们使用KMeans算法作为案例来看下关于回归问题在MLlib中的实现。在下面的例子中,在载入和解析数据之后,我们使用KMeans对象来将数据聚类到两个类簇当中。所需的类簇个数会被传递到算法中。然后我们将计算集内均方差总和(WSSSE).你可以通过增加类簇的个数k来减小误差。实际上,最优的类簇数通常是1,因为这一点通常是WSSSE图中的“低谷点”。
4.协同过滤
协同过滤常被应用于推荐系统,这些技术旨在补充用户-商品关联矩阵中所缺失的部分。基于协同过滤的推荐可以分为三类:
(1)基于用户的推荐(通过共同口味与偏好找相似邻居用户,K-邻居算法,你朋友喜欢,你也可能喜欢);
(2)基于项目的推荐(发现物品之间的相似度,推荐类似的物品,你喜欢物品A,C与A相似,可能也喜欢C);
(3)基于模型的推荐(基于样本的用户喜好信息构造一个推荐模型,然后根据实时的用户喜好信息预测推荐)。
MLlib当前支持基于模型的协同过滤推荐,其中用户和商品通过一小组隐语义因子(如浏览,单击,购买,点赞,分享等)进行表达,并且这些因子也用于预测缺失的元素。为此,MLlib实现了交替最小二乘法(ALS)来学习这些隐性语义因子。在MLlib中的实现有如下的参数:
numBlocks:是用于并行化计算的分块个数(设置为-1为自动配置)。
rank:是模型中隐语义因子的个数。
iterations:是迭代的次数。
lambda:是ALS的正则化参数。
implicitPrefs:决定了是用显性反馈ALS的版本还是用适用隐性反馈数据集的版本。
alpha:是一个针对于隐性反馈ALS版本的参数,这个参数决定了偏好行为强度的基准。
下面我们使用KMeans算法作为案例来看下关于回归问题在MLlib中的实现。在下面例子中,首先加载评级数据,每行由一个用户,一个产品和一个评级组成。然后假定评级信息是显性的,使用默认的ALS.train()方法来训练。最后计算评级预测的均方误差来评估推荐模型。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。