此时,数据已经为训练模型做了适当的准备。训练是无监督的,这意味着它必须用一个例子来推断信息。你没有将样本类别输入到模型中,所以算法必须通过分析特征如何聚类来找出数据的相互关联。你将使用k-means 聚类算法。该算法使用特征计算文档之间的“距离”,然后围绕分组后的文档“绘制”边界。该算法涉及随机化,因此两次运行结果会是不相同的。主要的挑战是确定训练的最佳聚类大小。不同的文档集最好有不同的最佳类别数,但算法需要你在训练前输入类别数。
代码在 2 到 20 个簇之间迭代,以确定最佳大小。对于每次运行,它都会获取特征数据并应用算法或训练器。然后,它根据预测模型对现有数据进行转换。对结果进行评估,以确定每个簇中文档的平均距离,并选择平均距离最小的结果。
var options = new KMeansTrainer.Options { FeatureColumnName = features, NumberOfClusters = categories, }; var clusterPipeline = pipeline.Append(context.Clustering.Trainers.KMeans(options)); var model = clusterPipeline.Fit(dataToTrain); var predictions = model.Transform(dataToTrain); var metrics = context.Clustering.Evaluate(predictions); distances.Add(categories, metrics.AverageDistance);经过培训和评估后,你可以保存最佳模型,并使用它对数据集进行预测。将生成一个输出文件以及一个摘要,该摘要显示有关每个类别的一些元数据并在下面列出标题。标题只是几个功能之一,因此有时需要仔细研究细节才能使类别有意义。在本地测试中,教程之类的文档归于一组,API 文档归于另一组,而例外归于它们自己的组。
ML zip 文件可与 Prediction Engine 一起用于其他项目中的新数据。
机器学习模型另存为单个 zip 文件。该文件可以包含在其他项目中,与 Prediction Engine 一起使用以对新数据进行预测。例如,你可以创建一个 WPF 应用程序,该应用程序允许用户浏览目录,然后加载并使用经过训练的模型对文档进行分类,而无需先对其进行训练。
下一步是什么Spark for .NET 计划与.NET 5 同时在 GA(译注:GA=General Availability,正式发布的版本)发布。请访问 https://aka.ms/spark-net-roadmap 阅读路线图和推出功能的计划。(译注:.NET 5 正式发布时间已过,Spark for .NET 已随 .NET 5 正式发布)
本文着重于本地开发体验,为了充分利用大数据的力量,你可以将 Spark 作业提交到云中。有各种各样的云主机可以容纳 PB 级数据,并为你的工作负载提供数十个核的计算能力。Azure Synapse Analytics 是一项 Azure 服务,旨在承载大量数据,提供用于运行大数据作业的群集,并允许通过基于图表的仪表盘进行交互式探索。若要了解如何将 Spark for .NET 作业提交到 Azure Synapse,请阅读官方文档(https://aka.ms/spark-net-synapse)。
下面这张表列举了 ML.NET 机器学习的常见任务和场景:
任务 示例场景分类(基于文本)
Classification 将邮件信息分类为垃圾邮件或非垃圾邮件,或根据内容将调查评论分为不同的组别。
回归
Regression 根据二手车的品牌、型号、里程数来预测二手车的价格,或者根据广告预算来预测产品的销量。
预测
Forecasting 根据过去的销售情况来预测未来产品的销售情况,或天气预报。
异常检测
Anomaly detection 检测产品在一段时间内的销售高峰或检测断电情况。
排名
Ranking 预测搜索引擎结果的最佳显示顺序,或为用户的新闻排序。
聚类
Clustering 对客户进行细分。
推荐
Recommendation 根据用户之前看的电影向用户推荐电影,或者推荐经常一起购买的产品。
图像分类
Image classification 对机器零件的图像进行分类。
对象检测
Object detection 检测汽车图像上的车牌。