关于电商网站的数据中心建设方案,网站规划的意义,阿胶在那种网站做推广好,qml 网站开发点击上方蓝字关注我们#xff08;本文阅读时间#xff1a;18分钟#xff09;Microsoft Azure Machine Learning Studio 是微软强大的机器学习平台#xff0c;在设计器中#xff0c;微软内置了15个场景案例#xff0c;但网上似乎没有对这15个案例深度刨析的分析资料#…点击上方蓝字关注我们本文阅读时间18分钟Microsoft Azure Machine Learning Studio 是微软强大的机器学习平台在设计器中微软内置了15个场景案例但网上似乎没有对这15个案例深度刨析的分析资料所以我就计划写一个系列来完成。既然是深度刨析就不再是简单的介绍操作而是深入每一个细节宁愿过度详细扩展也不简单扫过。这次我们刨析的案例是基于广泛和深入的推荐 - 餐厅评级预测。微软MVP实验室研究员王豫翔Leo微软圈内人称王公子。微软10年MVP大龄程序员。目前核心工作是使用微软AI技术设计可以落地的解决方案也就是写PPT。虽然热爱代码但只有午夜时分才是自由敲代码的时间。喜欢微软技术不喜欢无脑照抄。 预备知识▍Wide Deep 模型2016年Google 提出了一种兼具模型记忆性和模型泛化性的神经网络——wide deep for recommender systems。这篇文章是推荐系统中的经典被应用于 Google Play 中的应用推荐。文章的主要贡献就是提出了兼顾模型记忆性和泛化性的通用模型结构。记忆性简单的说就是根据用户之前的行为推荐类似的信息。这种模式计算简单统计频率的计算量相对较小但是缺陷也很明显就是用户的信息茧房越来越封闭除非用户主动的了解了新类型的信息否则不太会推荐给用户新类型资讯。泛化性是指延申用户的行为推荐其兴趣点有关的信息。但显然这种模式虽然好但计算肯定复杂了。Google 将这两个模型结合起来得到了 widedeep 模型其中 wide 部分就是简单的线性模型deep 部分就是深度学习模型它同时具有“记忆能力”和“泛化能力”。▍数据集该数据集是 Restaurant consumer data Data Set 的部分。原生数据http://archive.ics.uci.edu/ml/datasets/Restaurant%26consumerdata原始数据分三类共9份文件分类文件Restaurantschefmozaccepts.csvchefmozcuisine.csvchefmozhours4.csvchefmozparking.csvgeoplaces2.csvConsumersusercuisine.csvuserpayment.csvuserprofile.csvUser-Item-Ratingrating_final.csv经过对比和分析后本次案例用了以下三个文件rating_final.csv采纳列名含义值描述userIDplaceIDrating总体评价012food_rating食物评价012否service_rating服务评价012否userprofile.csvuserIDLatitude经度longitude维度Smoker吸烟drink_leve饮酒酗酒 社交饮酒者 休闲饮酒者dress_preference着装偏好非正式正式没有偏好 优雅ambience氛围家庭朋友 孤独transport交通步行 公共 车主marital status婚姻状态单身 已婚 丧偶hijos子女独立 孩子 依赖birth_yearinterest兴趣多样性技术无复古环保personality性格节俭保护者 猎人炫耀 勤奋工作者 墨守成规者religion宗教天主教 基督教 摩门教 犹太人activity学生 专业 失业 工人阶级color黑色 红色 蓝色 绿色 紫色 橙色 黄色 白色weight体重budget预算中低高height身高geoplaces2.csvplaceIDlatitudelongitudethe_geom_meter地理空间name名字address地址city城市state州country国家zip邮编Alcohol含酒精饮料不含酒精葡萄酒啤酒酒吧smoking_area吸烟区无仅吧台允许部分不允许dress_code着装要求非正式休闲 正式Accessibilityprice价格中低 高url网址Rambience氛围franchise特许经营权是否area区域开放 关闭other_services其他服务无互联网品种▍Vowpal Wabbit 数据格式Vowpal Wabbit简称 VW是一个功能强大的开源在线online和外存学习out-of-core machine learning系统由微软研究院的John Langford及其同事创建。Azure ML 通过 Train VW 和 Score VW 模块对 VW 提供本机支持。可以使用它来训练大于 10 GB 的数据集这通常是 Azure ML 中学习算法允许的上限。它支持许多学习算法包括 OLS 回归OLS regression矩阵分解matrix factorization单层神经网络single layer neural network隐狄利克雷分配模型Latent Dirichlet Allocation上下文赌博机Contextual Bandits等。VW 的输入数据每行表示一个样本每个样本的格式必须如下label | feature1:value1 feature2:value2 ...简单的说每一条样本的第一个是标签Label后面是特征Feature。也就是每一条样本都是有标签样本(labeled)。▍Parquet 列式存储格式Parquet 是 Hadoop 生态圈中主流的列式存储格式最早是由 Twitter 和 Cloudera 合作开发2015 年 5 月从 Apache 孵化器里毕业成为 Apache 顶级项目。有这样一句话流传如果说 HDFS 是大数据时代文件系统的事实标准Parquet 就是大数据时代存储格式的事实标准。Parquet 列式存储格式的压缩比很高所以 IO 操作更小。Parquet 是与语言无关的而且不与任何一种数据处理框架绑定在一起适配多种语言和组件能够与 Parquet 适配的查询引擎包括 Hive, Impala, Pig, Presto, Drill, Tajo, HAWQ, IBM Big SQL 等计算框架包括 MapReduce, Spark, Cascading, Crunch, Scalding, Kite 等数据模型包括 Avro, Thrift, Protocol Buffer, POJOs 等。所以 Parquet 就是一个数据存储提供引擎快速查询数据的格式。▍优化器优化的目标是希望找到一组模型参数使模型在所有训练数据上的平均损失最小。优化器能力优点SGD用单个训练样本的损失来近似平均损失即每次随机采样一个样本来估计当前梯度对模型参数进行一次更新训练速度快内存开销小AdaGradAdaptive Gradient Algorithm自适应地确定参数的学习速度对更新频率低的参数做较大的更新对更新频率高的参数做较小的更新减少学习率的手动调整更适用于稀疏数据提高 SGD 的鲁棒性AdaDelta针对 AdaGrad 改进采用指数衰减平均的计算方法用过去梯度平方的衰减平均值代替他们的求和不需要提取设定学习速率使用指数衰减平均计算防止学习速率衰减过快RMSProp是 Geoff Hinton 提出的一种自适应学习率方法。结合了 Momentum 的惯性原则加上 AdaGrad 对错误方向的阻力解决 AdaGrad 学习率急剧下降Adam结合 Momentum 和 AdaGrad 的优点还包含了偏置修正为不同参数产生自适应的学习速率FTRLFollow the Regularized Leader能学习出有效的且稀疏的模型FTRL 算法融合了 RDA 算法能产生稀疏模型的特性和 SGD 算法能产生更有效模型的特性。它在处理诸如 LR 之类的带非光滑正则化项例如1范数做模型复杂度控制和稀疏化的凸优化问题上性能非常出色国内各大互联网公司都已将该算法应用到实际产品中▍激活函数Activation Function在神经网络中输入经过权值加权计算并求和之后需要经过一个函数的作用这个函数就是激活函数。如果在神经网络中不引入激活函数那么在该网络中每一层的输出都是上一层输入的线性函数无论最终的神经网络有多少层输出都是输入的线性组合。也就是说如果没有激活函数那么再多层的神经网络也只能处理线性可分问题。激活函数说明类型ReLURectified linear unit修正线性单元深度学习目前最常用的激活函数减轻了神经网络的梯度消失问题。ReLU 函数有很多变体如 LeakyReLUpReLU 等。使用梯度下降GD法时收敛速度更快 。只需要一个门限值即可以得到激活值计算速度更快。但如果输入值为负的时候输出始终为0也就是神经元不学习了这种现象叫做“Dead Neuron”。非饱和Leaky Relu针对 Relu 函数中存在的 Dead Relu ProblemLeaky Relu 函数在输入为负值时给予输入值一个很小的斜率在解决了负输入情况下的0梯度问题的基础上也很好的缓解了 Dead Relu 问题。但实测不稳定所以现在用的也不多。非饱和sigmoidsigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。以前很常用现在用的少了。它在⼤部分时候被更简单、更容易训练的 ReLU 所取代。饱和tanh (Hyperbolic tangent function双曲正切函数)将 一个实值输入压缩至 [-1, 1]的范围这类函数具有平滑和渐近性并保持单调性。饱和▍偏差和方差偏差描述的是预测值的期望与真实值之间的差距。偏差越大越偏离真实数据。方差描述的是预测值的变化范围离散程度也就是离其期望值的距离。方差越大数据的分布越分散。下面这张图非常生动的描述了偏差和方差的含义深入分析这套案例一共九个工作节点但其中有两组六个节点是一样的。这个案例中不需要我们进行编码但提供了我们关于非常经典的广告推荐训练的最佳实践值得我们认真了解。我们逐个分析每一个节点中值得关注的细节和核心信息。▍数据源输入节点这一组节点有三个分别是Restaurant Ratings、Restaurant Customer Data、Restaurant Feature Data。这些节点的数据可以在节点属性中看到有两个核心信息。Datastore nameazureml_globaldatasets 是一个链接点击可以跳转到数据存储的位置Relative path描述在 Datastore 中当前文件的位置。点击 azureml_globaldatasets 将跳转到 Datastore 浏览器您可以在这个浏览器下观察到您存储的数据。大致的界面如下以下表格可以帮助您快速对这三个节点数据有全局的了解。节点含义相对路径对应RCD数据Restaurant Ratings餐厅评级Restaurant_Ratingsrating_final.csvRestaurantCustomer Data就餐的客户特征Restaurant_User_Featuresuserprofile.csvRestaurant Feature Data餐厅特征Restaurant_Item_Featuresgeoplaces2.csv▍Split Data 节点这个节点比较简单按行将 Restaurant Ratings 数据集分为50%和50%目的是将数据集分成两个不同的集。拆分的方式有三种拆分行就是简单的讲输入的数据集拆分为两个部分。默认是对半拆分并且是随机选定内容。正则表达式拆分如果我们需要把数据集按某些特征分为符合和不符合就可以用这个选项进行拆分。相对表达式拆分如果我们希望对数据集按某些范围进行拆分比如日期范围数据范围就可以用这个选项。当前案例采用了对半随机拆分行。▍Select Columns in Dataset 节点这个组件节点有两个分别是 Restaurant Customer Data 和 Restaurant Feature Data 做数据处理。Select Columns in Dataset 节点的目的是得到一个输入数据集的子集过滤一些原始数据集的干扰列。数据集原始集合子集Restaurant Customer DatauserID、latitude、longitude、smoker、drink_level、dress_preference、ambience、transport、marital_status、hijos、birth_year、interest、personality、religion、activity、color、weight、budget、heightuserID、latitude、longitude、interest、personalityRestaurant Feature DataplaceID、latitude、longitude、the_geom_meter、name、address、city、state、country、zip、alcohol、smoking_area、dress_code、accessibility、price、url、Rambience、franchise、area、other_servicesplaceID、latitude、longitude、price明显可以看出 Select Columns in Dataset 节点将设计者认为不必要的特征都排除了。▍Train Wide and Deep Recommender 节点这个节点是本次案例的核心。Wide Deep 推荐器需要接受三个输入训练集、用户特征集、评价目标特征集。特别要注意Wide Deep 对训练集的格式是有约定的训练集是一个用户-目标-评分的标准结构也就是说这个集合只能有三个列并且依次是用户标识、目标标识、对目标的评级。用户特征集合必须包含用户的标识符并使用训练集第一列中提供的相同标识符。其余列可以包含任意数量的用于描述用户的特征。目标特征数据集必须在其第一列中包含目标标识符并使用训练集第二列中提供的相同标识符。其余列可以包含任意数量的项目的描述性特征。对应上面的概念下表可以全面的了解 Wide Deep 的输入输入参数对应数据集关键特征Training_dataset_of_user_item_rating_triplesRestaurant RatingsuserIDplaceIDratingUser_featuresRestaurant Customer DatauserIDItem_featuresRestaurant Feature DataplaceID配置这个组件我们需要关注的参数有时期Epochs算法应处理整个训练数据的次数。这个数字越高训练就越充分但是训练会花费更多的时间并可能导致过度拟合。批处理大小Batch size训练步骤中使用的训练示例数。此超参数会影响训练速度。批处理越大时间成本时期越短但可能会增加收敛时间。如果批太大不适合 GPU/CPU可能会引发内存错误。Wide 部分优化器Wide part optimizer选择一个优化器对模型的 wide 部分应用梯度可以从 AdaGrad 优化器开始多次测试。Wide 优化器学习速率Wide optimizer learning rate输入 0.0 和 2.0 之间的数字该数字定义 wide 部分优化器的学习速率。此超参数确定每个训练步骤的步骤大小同时不断接近损失函数的最小值。学习速过高可能导致学习跳升超过最小值而学习率过小可能会导致收敛问题。交叉特征维度Crossed feature dimension通过输入所需的用户 ID 和项目 ID 特征来键入此维度。默认情况下Wide Deep 推荐器会针对用户 ID 和项目 ID 特征执行跨产品转换。将根据此数字对交叉结果进行哈希处理以确保维持该维度。Deep 部分优化器Deep part optimizer选择一个优化器对模型的 deep 部分应用梯度。Deep 优化器学习速率Deep optimizer learning rate输入介于 0.0 和 2.0 之间的数字该数字定义 deep 部分优化器的学习速率。用户嵌套维度User embedding dimension键入整数以指定用户 ID 嵌套的维度。Wide Deep 推荐器会为 Wide 部分和 Deep 部分创建共享的用户 ID 嵌套和项目 ID 嵌套。嵌套维度Item embedding dimension键入整数以指定项目 ID 嵌套的维度。分类特征嵌套维度Categorical features embedding dimension输入整数以指定分类特征嵌套的维度。在 Wide Deep 推荐器的 deep 组件中会针对每个分类特征习得一个嵌套矢量。这些嵌套矢量具有相同的维度。隐藏单位Hidden units键入 deep 组件的隐藏节点数。每个层中的节点数用逗号分隔。例如可以通过类型“1000,500,100”指定 deep 组件有三个层第一层到最后一层分别有1000个节点、500个节点和100个节点。激活函数Activation function选择一个应用于每个层的激活函数基本上就选 ReLU 就对了。丢弃Dropout输入 0.0 和 1.0 之间的数字以确定训练期间每个层中丢弃输出的概率。丢弃是一种可以防止神经网络过度拟合的正则化方法。关于此值的一个常见决策是从 0.5 开始对于许多网络和任务而言这一值似乎都接近最优值。批标准化Batch Normalization选择此选项可在 deep 组件中的每个隐藏层之后使用批标准化。批标准化是应对网络训练中内部协变量偏移问题的一种技术。一般来说它可以帮助提高网络的速度、性能和稳定性。▍Score Wide and Deep Recommender 节点Wide and Deep 推荐器评分有两种选择对用户给出评级的预测对输入的用户的特征寻找和他相近用户对目标的评价。给用户推荐提供用户和项目列表作为输入。在此数据中该模型利用其关于现有项目和用户的知识来生成可能对每个用户都具有吸引力的项目列表。可以自定义返回的建议数并为生成建议所需的先前建议数设置阈值。▍Evaluate Recommender 节点我们会得到几个回归问题常用的评估指标MAEMean Absolute Error平均绝对误差这个指标通常用来反映预测值误差的实际情况风险度。通常用于在连续变量数据上测量性能。它对异常值不是很敏感因为它不会惩罚错误。RMSERoot Mean Square Error均方根误差 是回归模型的典型指标常用于衡量模型预测结果的标准。在 RMSE 中误差在平均之前先平方这意味着 RMSE 为更大的错误分配更高的权重。这表明当存在大错误并且它们会极大地影响模型的性能时RMSE 更有用。RMSE 比 MSE 更广泛用于评估回归模型于其他随机模型的性能因为它的因变量Y轴具有相同的单位。R2 判别系数。对于回归类算法而言只探索数据预测是否准确是不足够的。除了数据本身的数值大小之外我们还希望我们的模型能够捕捉到数据的“规律”比如数据的分布规律单调性等等而是否捕获了这些信息并无法使用 MSE 来衡量。R2 测量了回归直线对预测数据拟合的程度。分子是真实值和预测值之差的差值也就是我们的模型没有捕获到的信息总量分母是真实标签所带的信息量所以两者都衡量 1 - 我们的模型没有捕获到的信息量占真实标签中所带的信息量的比例所以两者都是越接近1越好。如果结果是0说明模型拟合效果很差如果结果是1说明模型无错误。Explained Variance可解释变异用方差来量化变异故又称为可解释方差explained variance。结束语到这里Wide Deep based Recommendation - Restaurant Rating Prediction 案例的分析我们完成了在这个过程中我们详细的了解到各个节点的核心信息和相关的概念。从数据源、数据处理到模型质量报告也同时接触到了大量的机器学习概念本篇非常值得推荐作为 Microsoft Azure Machine Learning Studio 和机器学习的入门和深入读物。在这之后我将继续编写其他 Microsoft Azure Machine Learning Studio 案例。每一篇案例都可以独立阅读因此有些概念会重复出现在每一篇中。微软最有价值专家MVP微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项。29年来世界各地的技术社区领导者因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。MVP是经过严格挑选的专家团队他们代表着技术最精湛且最具智慧的人是对社区投入极大的热情并乐于助人的专家。MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人并最大程度地帮助微软技术社区用户使用 Microsoft 技术。更多详情请登录官方网站https://mvp.microsoft.com/zh-cn了解如何使用 Azure 机器学习训练和部署模型以及管理 ML 生命周期 (MLOps)。教程、代码示例、API 参考和其他资源。点击「阅读原文」获取相关文档~