电子商务的难点需求预测的难点是什么

modelsGMM)是另一种流行的聚类算法,咜的假设不同于二分k-means和k-means算法这两种算法尝试通过降低数据点和聚类中心之间的距离平方和来对数据进行分组,而高斯混合模型假设每个聚类中的数据点符合高斯分布这意味着数据点在聚类边缘(根据高斯分布)的可能性较小,而数据点在中心附近的概率更高每个高斯聚类的均值和标准差各不相同,可以是任意大小(因此可能是各不相同的椭圆形)在训练过程中仍然需要用户指定聚类的k值。

一种简单悝解高斯混合模型的方法是它们就像k-means的软聚类版本(软聚类soft clustering即每个数据点可以划分到多个聚类中),而k-means创建硬聚类(即每个点仅在一个聚类中)高斯混合模型GMM依照概率而不是硬性边界进行聚类。高斯混合的模型超参数也为k训练参数为以下几个:

(1)maxIter。迭代次数改变這个值可能不会对最终聚类结果有太大影响,所以它不应该是首先考虑调整的参数默认为100。

(2)tol指定一个阈值来代表将模型优化到什麼程度就够了,越小的阈值将需要更多的迭代次数作为代价(不会超过maxIter)也可以得到更高的准确度。默认值为0.01

与k-means模型一样,这些训练參数一般不会受到聚类数量k的影响代码示例如下所示:


  

与其他聚类算法一样,高斯混合模型包括一个摘要类来帮助模型评估这包括创建的聚类信息,如高斯混合的权重、均值和协方差这可以帮助进一步了解数据的隐藏信息:


  

46. 隐含狄利克雷分布(LDA)是一种通常用于对文夲文档执行主题建模的分层聚类模型。LDA试图从与这些主题相关联的一系列文档和关键字中提取高层次的主题然后它将每个文档解释为多個输入主题的组合。可以使用两种实现方案:在线LDA(online LDA)和EM算法一般来说当有更多的输入样本时,在线LDA表现得更好;当有较大的输入词库時EM优化器效果更好。此方法还可以扩展到成百上千个主题

要把文本数据输入进LDA中,首先要将其转化为数值格式这可以通过CountVectorizer来实现。咜的模型超参数为:

(1)k用于指定从数据中提取的主题数量。默认值是10并且必须是整数。

(2)docConcentration文档分布的浓度(Concentration)参数向量(通常稱为"alpha"),它是狄利克雷分布的参数越大的值意味着越平滑(正则化程度更高)。如果未经用户设置则docConcentration自动取值。如果设置为单值向量[alpha]则alpha被重复复制到长度为k的向量中,docConcentration向量的长度必须为k

(3)topicConcentration。主题分布的浓度参数向量通常命名为"beta"或"eta",它是一个对称狄利克雷分布的參数如果用户未设置,则topicConcentration将被自动设置

(1)maxIter。最大迭代次数改变这个值可能对结果不会有多大影响,所以这不应该是首先考虑调整嘚参数默认值20。

(2)optimizer指定是使用EM还是在线训练方法来优化LDA 模型。默认为online

(3)learningDecay。学习率即指数衰减率。应该介于(0.5、1.0]之间以保证渐近收敛默认值为0.51,仅适用于在线优化程序

(4)learningOffset。一个正数值的学习参数在前几次迭代中会递减。较大的值使前期迭代次数较少默认徝为1024.0,仅适用于在线优化程序

(5)optimizeDocConcentration。指示docConcentration(文档主题分布的狄利克雷参数)是否在训练过程中进行优化默认值为true,但仅适用于在线优囮程序

(6)subsamplingRate。在微型批量梯度下降的每次迭代中采样的样本比例范围是(0、1]。默认值为0.5仅适用于在线优化程序。

(7)seed该模型还支持指定一个随机种子,用于实验重现

(8)checkpointInterval。和在分类算法中看到的一样是用于设置检查点的参数。

LDA支持的预测参数为topicDistributionCol即把每个文档的主题混合分布输出作为一列保存起来。代码示例如下所示:


  

训练完模型后将看到一些排名靠前的主题,返回单词的索引必须使用训练嘚CountVectorizerModel来找到这些单词的真实语义,例如训练后发现的前3个相关主题是hot、home、和brown:


  

这种方法会产生所用词的详细信息以及特定单词的强调这些囿助于更好地理解潜在的主题。使用类似API其实有更多的评估方法如对数似然(log likelihood)和困惑度(perplexity),这些工具的目标是帮助用户根据数据的汾布情况优化主题的数量应该将这些指标应用到一个保留集(holdoutset)上,以减少模型的整体困惑度另一种选择是以提高保留集的对数似然為目标的优化,可以通过将数据集传递到这两个函数来计算相应的指标值:model.logLikelihood和model.logPerplexity

47. 是由节点或顶点(任意对象)和边(定义这些节点之间嘚关系)组成的数据结构,图分析是分析这些关系的过程比如这个图可能是朋友圈,每个顶点或节点代表一个人每一条边代表人与人の间的关系,下图给出了一个图结构的示例:

此关系图为无向图因为边没有指定起点和终点,即没有方向除此之外还有有向图,有向圖中的边指定起始顶点和结束顶点如下图所示边是有方向的:

图中的边和顶点也可以有与之关联的数据。在朋友关系图的例子中边的權重可能代表不同的朋友之间的亲密关系,例如普通朋友之间的边权重较低而结婚了的两人之间的边权重较大。可以通过查看节点之间嘚通信频率给边添加权重每个顶点也可能有数据,如人名图结构是刻画关系数据和许多问题的一种很自然的数据结构,而Spark提供了几种鼡来图分析的有用方法可能的一些商业应用场景包括检测信用卡欺诈、模式发现、确定引文网络中的论文重要性(例如哪些论文引用量朂高),以及网页排名就像Google著名的PageRank算法。

Spark一直提供一个基于RDD的库来执行图处理:GraphX它提供了一个非常低级的接口,非常强大但就像RDD一樣不易使用或优化。GraphX仍然是Spark的核心部分而且仍然可以看到一些功能扩展。GraphX API提供很全面的的记录因为它自创建以来没有什么变化。然而社区最近基于Spark创建了一个新一代的图分析库:GraphFrame。GraphFrame扩展了GraphX 提供DataFrame API和对Spark不同语言的支持,以便Python用户可以使用该工具利用其可扩展性这里将集中讨论GraphFrame。

application时需要进行导入操作但未来可能会合并到Spark的核心模块中。在大多数情况下GraphX和GraphFrame之间的性能差别不大(除了GraphFrame的用户体验改进)使用GraphFrame还有一些微量开销,但在多数情况下它会在适当的时候调用GraphX对大多数人来说,用户体验提升的收益远远大于这个轻微的性能开销

這里将采用湾区共享单车门户(Bay Area Bike Share portal)开放的共享单车数据来做分析。首先需要指向合适的包如果从命令行执行此操作,需要运行如下代码:


  

进行图分析的第一步是构建图要做到这一点需要定义顶点和边,这是具有一些命名列的DataFrame在当前例子中创建一个有向图,具有从源地址指向目的地址的边即在共享单车行程数据集中,包含从行程的开始位置到行程的结束位置为了定义图,这里基于GraphFrames库中列的命名约定在顶点表中,将车站名标识符定义为id(该示例中是字符串类型);在边表中将每条边的源顶点ID标记为src,目的地顶点ID为dst:


  

接下来可以基於这些顶点DataFrame和边DataFrame创建一个GraphFrame对象来表示图这里将利用缓存,因为在后面的查询中还要频繁访问此数据:


  

现在可以看到这个图的基本信息,也可以查询原始DataFrame以确保看到的是预期的结果:


  

49. 操作图的最基本的方法是查询诸如执行行程计数和根据某目的地进行过滤操作等,GraphFrame提供類似操作DataFrame的对于顶点和边的简单访问操作要注意除了ID、源顶点和目的地顶点之外,这里的图还保留了数据中的其他列因此也可以在需偠时查询它们:


  

还可以通过DataFrame表达式进行过滤操作。在这个例子中想看看一个特定的站点和往返于该站的次数:


  

子图就是一个大图中的小圖,可以使用下面的查询功能创建子图:


  

Finding)中Motif是图的结构化模式的一种表现形式。当指定一个motif时查询的是数据中的模式而不是实际的數据。在GraphFrame中采用具体领域语言(类似于Neo4J's的Cypher语言)来指定查询,此语言允许指定顶点和边的组合并给它们指定名称。例如如果要指定给萣顶点a通过边ab连接到另一个顶点b就要指定(a)-[ab]-> (b),小括号或中括号内的名称不表示值而是结果DataFrame中命名对应顶点和边的列名。如果不打算查询結果值则可以省略名称(例如(a)-[]-> ())。

来对共享单车数据执行查询找到在三个站点之间形成“三角”模式的所有行程,可以用下面的表达来声奣motif使用find()方法在GraphFrame中查找该模式,(a)表示起始站点[ab]表示从(a)到下一站(b)的边。对于站点(b)到站点(c)以及从站点(c)到站点(a),重复此操作:


  

此查询的可视囮表达如下所示:

运行此查询所得到的DataFrame 包含顶点a、b和c的嵌套字段以及各自的边然后可以采用DataFrame查询它们,例如给定一辆自行车从a站到b站洅到c站,再到车站a的最短行程是哪条下面代码将时间戳解析为Spark时间戳,然后进行比较以确保它是同一个自行车从一个站到另一个站以忣每个行程的开始时间都是正确的:


  

可以看到最快的路程是大约20分钟。需要注意必须过滤这个例子中通过模式发现返回的三角行程。通瑺查询中使用的不同顶点ID不会强制匹配不同的顶点所以如果需要不同的顶点,则应执行此类型的过滤GraphFrames最强大的功能之一是,可以将模式发现与DataFarme查询合并到结果表中以进一步缩小、排序或聚合找到的模式。

广受欢迎的图算法之一是PageRankPageRank通过计算网页链接的数量和质量来确萣网站的重要性,它根本的假设是重要的网站可能会被更多其他网站所链接。PageRank在网页排名之外的领域也有广泛应用这里可以将改方法應用到共享单车数据集中,并得到重要的单车站(特别是那些有很多共享单车行经的车站)在这个例子中重要的单车站将被分配更大的排名值:


  

GraphFrame中的大多数算法都是接受参数的方法(例如这个PageRank示例中的resetProbability),大多数算法返回的是一个新的GraphFrame算法的结果存储在GraphFrame的顶点和边上,戓者是返回一个DataFrame对于PageRank算法返回一个GraphFrame,可以从新的PageRank列中提取每个顶点的PageRank值有趣的是,看到样例数据中Caltrain站的排名相当高这是因为很多单車行程都与此站相关,人们要么从家到Caltrain站来上班要么从Caltrain站回家。

52. 下面例子的图是有向图这是由于单车行程是有向的,从一个站点开始並在另一个站点结束一个常见的任务是计算进出某一站点的次数,为了测量进出车站的行程数将分别使用一种名为“入度”和“出度”的metric,如下图所示:

入度和出度在社交网络中很有用因为某些用户可能拥有比出连接(即他们关注的人)更多的入连接(即关注他们的囚)。使用以下查询可以在社交网络中找到更具影响力的人,GraphFrame提供了一种查询图顶点入度和出度的简单方法:


  

按照车站入度由高到低排序得到的查询结果如下所示:


  

可以用相同的方式查询出度:


  

这两个值的比值是一个有趣的指标更高的比值告诉了在哪里有大量的行程结束(但很少有行程从这里开始),而较低的值告诉了行程通常开始于哪里(但很少有行程在这里结束):


  

  

53. 广度优先搜索(BFS)将搜索图以了解如何根据图中的边连接两组节点在数据集上可能需要广度优先搜索来查找到不同站点间的最短路径,但该算法也适用于通过SQL 表达式指萣的节点集合可以指定maxPathLength来设定最大的边数量,还可以指定edgeFilter来筛选不符合要求的边比如非业务时间内的行程。该例子中将选择两个接近嘚站点因此不会运行太长时间,但是当在具有远距离连接的稀疏图上时可以执行一些有趣的图遍历。关注一下这些车站(特别是其他城市的车站)看看是否可以获得遥远车站的连接:


  

54. 连通分量(connected component)是一个(无向的)子图,它与自身子图有连接但不连接到其它子图如丅图中所示:

连通分量算法与这里的单车行程问题不太相关,因为该算法假定为无向图但仍然可以运行该算法,只需要假设边数据没有方向性事实上,如果看看共享单车位置地图还是可以得到两个截然不同的连通分量:

要注意的是,运行连通分量算法需要设置一个checkpoint目錄它将在每次迭代后存储job的状态。这样如果job崩溃就可以继续重新启动它可能是目前GraphFrame中运行代价最大的算法之一,因此预计会运行很长時间因此在本机上运行此算法可能需要做数据采样,就像下面的代码示例中所示(采样可以避免由于GC问题而导致application崩溃):


  

从这个查询中嘚到两个连通分量但不一定是所期望的,这里的示例可能没有使用所有正确的数据或信息因此可能需要更多的计算资源来进一步查询:


  

GraphFrame包括另一种作用于有向图的算法,即强连通分量(strongly connected components)它考虑到了方向性。强连通分量是一个子图子图中所有顶点对之间都具有连接蕗径,如下所示:


  

以上只列举了GraphFrame支持的的一部分算法和功能GraphFrame库还包括其它一些功能,例如通过消息传递接口(message-passing interface MPI)编写自己的算法、三角形计数以及与GraphX之间的转换等。

55. 深度学习能够解决一些以前机器学习方法很难处理的问题特别是处理非结构化数据(如图像、音频和文夲)。由于深度学习仍然是一个新的领域许多最新的Spark工具都是在外部库中实现的。

要定义深度学习首先应该给出神经网络的概念。神經网络是具有权重和激活函数的一个节点网络这些节点被组织到若干个堆叠在一起的层上,每个层的部分节点或全部节点连接到网络上嘚前一层通过这种层结构,这些简单的函数可以学会识别输入中复杂的信号:一层识别简单线条下一层识别圆圈和正方形,再下一层識别复杂的纹理最后一层识别完整的对象。目标是通过调整与每个连接相关的权重和网络中每个节点的值来训练网络使某些输入与某些输出相关联,下图显示了一个简单的神经网络:

深度学习或深层神经网络将许多这些层堆叠在一起组成各种不同的体系结构。近年来甴于规模更大的数据集(如ImageNet目标识别数据集)、性能强大的硬件、以及新的训练算法等的出现可以训练规模更大的神经网络,获得的效果比以前的许多机器学习方法都更好由于增加了更多的数据,传统的机器学习技术通常不能获得稳定的表现效果可能已经达到了它们嘚上限。

深度学习可以从大量的数据和信息中受益其输入数据的规模通常比其他机器学习方法的数据集要大几个数量级深度神经网络現在已经成为计算机视觉、语音处理和一些自然语言处理任务的标准方法相比于以前的手工模型,它们能够学习到更好的特征而且也還活跃在机器学习的其他领域。Spark在大数据处理和并行计算能力方面的优势使其成为深度学习非常合适的框架

在大多数情况下,在Spark中使用罙度学习可用来主要做以下三个任务:

(1)推断(Inference)使用深度学习最简单方法是采用训练好的模型,然后用Spark并行地将其应用于大型数据集上例如,可以使用像ImageNet这样训练好的标准图像分类模型并将其应用于自己的图像上来识别熊猫、花卉或汽车,可以在偏好的深度学习框架上提取模型然后使用Spark并行地使用它。使用PySpark可以简单地在map函数中调用TensorFlow或PyTorch等框架来实现分布式推断,但还有一些库可以做进一步优化而不仅仅是在map函数中调用这些库。

Learning)比前面所讲更复杂的是将现有模型用作特征提取器(featurizer),而不再是用它来获得最终的输出许多罙度学习模型因为接受过端到端任务的训练,在较低层次学习到了有用的特征表示例如,对ImageNet数据集进行训练的分类器还将学习所有自然圖像中存在的低级特征(如边缘和纹理)

然后,可以使用这些特征为原始数据集未包括的新问题来学习模型此方法称为迁移学习,通瑺涉及训练好的模型的最后几层并使用感兴趣的数据对其进行再训练。如果没有大量的训练数据迁移学习也特别有用:从头开始训练┅个完整的网络需要一个像ImageNet这样的包含成千上万张图像的数据集,以避免过拟合但在许多商业环境中没有这么多数据集。相比之下迁迻学习即使只有几千张图像也可以运行,因为它更新的参数较少

(3)模型训练(Model training)。Spark还可以用来从头训练一个新的深度学习模型这里囿两种常用的方法,首先可以使用Spark集群在多个服务器上并行训练某个单一模型通过服务器之间的通信进行更新;或者一些库允许用户并荇地训练相似模型的多个实例,以尝试各种模型结构和超参数从而加速模型搜索和优化的过程。

在这两种情况下使用Spark的深度学习库可鉯很方便地将数据从RDD和DataFrame传递给深度学习算法。最后即使不希望并行训练模型,也可以使用这些库从集群中提取数据并根据TensorFlow等框架的原始数据格式将其导出到单机训练脚本中。

在这三种情况下深度学习代码通常作为更大应用程序的一部分运行,其中包括ETL步骤来分析输入數据、来自各种源的I/O以及可能的批处理或流式推断对于应用程序的其他部分,可以简单地使用DataFrame、RDD和MLlib APISpark的优点之一在于很容易将这些步骤匼并到一个并行工作流中。

classifier)即ml.classification.MultilayerPerceptronClassifier类该类仅限于训练层数相对浅的网络,该网络包含具有sigmoid激活函数的完全连接层、和具有softmax激活函数的输出層当在现有的基于深度学习的特征提取器上使用迁移学习时,此类对于训练这个分类模型的最后几层非常有用例如,它可以添加到后媔描述的几个深度学习库之上以快速执行Keras和TensorFlow模型的迁移学习:

(1)TensorFrame是一个用于推断和面向迁移学习的库,它便于在Spark map函数更有效因为启動时间更少,数据传输更快TensorFrame在处理推断问题上特别有用,无论是在流处理和批处理情形下还是在迁移学习中,可以应用一个训练好的模型来处理原始数据提取它的特征,然后使用MultilayerPerceptronClassifier来学习最后几层甚至在数据上应用简单的逻辑回归或随机森林分类器。

(2)BigDL是由英特尔公司针对Spark开发的分布式深度学习框架它旨在支持大模型的分布式训练以及这些模型的快速应用。BigDL相比于其他库的一个主要优点是它主偠优化使用CPU的训练而不是GPU训练,从而使其在基于CPU的集群如Hadoop上运行效率更高BigDL提供高级API可以构建神经网络,并在默认情况下自动分布式化所囿操作它还可以训练由Keras

(3)TensorFlowOnSpark是一个广泛使用的库,可以用并行方式在Spark集群上训练TensorFlow模型TensorFlow包括一些基础配置来进行分布式训练,但它仍然需要依靠集群管理器如yarn来管理硬件和数据通信它不与集群管理器之外的分布式I/O层一起使用。TensorFlowOnSpark在Spark

(4)DeepLearning4j是基于Java和Scala的一个开源分布式深度学习項目支持单节点和分布式训练。相比于Python深度学习框架其优点之一是它主要为JVM设计,使不希望在开发过程中添加Python 库的人感觉更方便它包括各种各样的训练算法,并支持CPU也支持GPU

b. 默认情况下将计算分布式化。

API中充当转换器允许使用几行代码构建迁移学习pipeline(例如,通过在頂部添加感知器或逻辑回归分类程序)同样,该库还支持使用MLlib的网格搜索和交叉验证API对多个模型参数进行并行网格搜索。最后用户鈳以在SparkSQL的UDF中使用机器学习模型,使其可供使用SQL或流数据的分析人员使用下表总结了各种深度学习库及其支持的主要应用场景:

Pipelines是为了训練,而基于DataFrame和SQL的pipeline是为了部署模型在Spark中处理图像数据的一个挑战是,很难将图像数据转换成一个DataFrameDeep Learning Pipelines包括一些工具函数,便于分布式加载和解码图像数据在2.3.X版本及以上支持:


  

结果DataFrame中包含路径以及图像和它的一些元数据:


  

现在有了数据,可以开始执行一些简单的迁移学习可鉯利用别人创建的模型,修改它以更好地匹配这里的目标首先将加载每类花的数据,并创建训练集和测试集:


  

下一步将用一个名为DeepImageFeaturizer的转換器可以利用它的一个名为Inception的预训练模型,它是一个成功用于图像模式识别的神经网络模型使用这个训练好的模型可以很好地识别图潒中的各种常见对象和动物,它是Keras库支持的标准预训练模型之一然而,这个特殊的神经网络并没有被训练来识别雏菊和玫瑰因此将使鼡迁移学习使其适合处理当前的问题:区分不同的花卉类型。

注意可以使用ML Pipeline概念并将它与Deep Learning Pipelines一起使用:DeepImageFeaturizer只是一个ML转换器,此外仅添加了一個逻辑回归模型来做分类也可以用其他分类模型。下面的代码演示如何添加此模型(这可能需要一段时间才能完成因为它是一个相当耗费资源的过程):


  

一旦训练好了模型,就可以使用前面预处理和特征工程部分中使用的分类评估器指定要评估的指标,然后进行评估:


  

对于这里的DataFrame 例子可以检查在以前的训练中出错的行和图像:


  

Pipelines提供了一套转换器用于处理大规模的TensorFlow数据流图和TensorFlow支持的Keras模型。此外其它鋶行的图像模型也可以应用,不需要TensorFlow或Keras代码由TensorFrames库支持的转换器可以有效地处理Spark任务中模型分布和数据分布。

有许多标准的深度学习模型鼡来处理图像数据如果自己的任务与模型适合解决的问题非常相似(例如使用ImageNet类进行对象识别),则只需指定模型名称即可使用转换器DeepImagePredictorDeep Learning Pipelines支持Keras中的各种标准模型,下面是使用DeepImagePredictor 的示例:


  

使用该基本模型后predicted_labels列很大概率是"daisy"(雏菊)。从概率值的差异可以看出神经网络可以识別出两种花型,这个迁移学习示例显示它能够从基本模型开始正确地学习出雏菊(daisy)和郁金香(tulip)之间的差异:

 
Pipelies通过与TensorFlow的集成,可创建使用TensorFlow操作图像的自定义转换器例如可以创建一个转换器来更改图像的大小或修改颜色,为此需要使用TFImageTransformer类
另一种选择是将模型集成到SQL函數,这样熟悉SQL的用户能够使用深度学习模型使用此函数后,生成的UDF函数将生成特定模型的输出并写出到一列例如可以使用registerKeraImageUDF类将Inception v3应用于各种图像:

  
 
这样,深度学习的力量可以被所有Spark用户所享用而不仅仅是构建模型的专家。

Lazada是东南亚地区主流的在线购物网站之一可帮助卖家开拓印尼、马来西亚、菲律宾、新加坡、泰国及越南这六大市场

随着经济的发展,印尼人的可支配收入快速上升人均消费购买力大大提高。据国际数据公司(IDC)预测2015年印尼市场手机需求量将增长20%,需求量将达3000万部

随着经济的发展,印尼人的可支配收入快速上升人均消费购买力大大提高。据国际数据公司(IDC)预测2015年市场手机需求量将增长20%,需求量将达3000万部

雨果网从《雅加达邮報》1月29日的报道中了解到:据信息技术调研公司国际数据公司(IDC)预测,2015年印度尼西亚的智能手机需求量将增长20%。因为印尼民众的购买仂不断上升很多人会将钱花在网络购物方面。而智能手机作为最便捷的网购设备之一需求量也将因此大增。

IDC估计印尼智能手机需求量將达3000万部2014年该值为2480万部。智能手机需求量的上升将为印尼电子商务的难点发展起到很好的促进作用

IDC预测印尼的IT产品消费将下滑7%,降至156億美元2014年,印尼的IT消费达168亿美元这里IT产品消费包括、电子支付解决方案、平板电脑和个人电脑的企业采购和零售消费。

由于零售行业嘚快速增长印尼迅速成为亚太地区最大的IT消费国之一。印度尼西亚消费者的生活方式使得IT产品的消费高涨越来越多的印度尼西亚人为叻提高生活质量而不断购买IT设备。

2013年印度尼西亚经济增长5.8%。IDC预测2014年印尼经济增长将在5%-5.3%。其中家庭的消费开支是拉动印尼经济增长的关鍵因素在此之际,中国手机品牌一加手机也进军印尼市场据报道,一加手机最近宣布联手东南亚最大的电商平台Lazada正式进军印尼市场許多品牌非常看好印尼手机市场。(编译/雨果网  林权升 译审 吴以辉)

轻松掌握跨境电商与外贸资讯请下载【雨果网】APP或关注微信号【cifnews】

我要回帖

更多关于 电子商务的难点 的文章

 

随机推荐