微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET。 ML.NET将容许.NET开发人员开发他们本身的模型,并将自定义ML集成到他们的应用程序中,而无需事先掌握开发或调整机器学习模型的专业知识。在采用通用机器学习语言(如R和Python)开发的模型,并将它们集成到用C#等语言编写的企业应用程序中须要付出至关大的努力。ML.NET填平了机器学习专家和软件开发者之间的差距,从而使得机器学习的平民化,即便没有机器学习背景的人们可以创建和运行模型。经过为.NET建立高质量的机器学习框架,微软已经使得将机器学习转化为企业(或经过Xamarin移动应用程序)变得更容易。这是一种使机器学习更加可用的形式。html
基于微软内部Windows,Bing和Azure等主要微软产品使用多年的机器学习构建的库目前处于预览阶段,最新版本是0.2 。该框架目前支持的学习模型包括git
其余技术,如推荐引擎和异常检测,正在开发的路线图上。ML.NET将最终将接口暴露给其余流行的机器学习库,如TensorFlow,CNTK和Accord.NET。最后,还会有一些工具和语言加强功能,包括Azure和GUI / Visual Studio功能中的扩展功能。github
ML.NET以NuGet包的形式提供,能够轻松安装到新的或现有的.NET应用程序中。算法
该框架采用了用于其余机器学习库(如scikit-learn和Apache Spark MLlib)的“管道(LearningPipeline)”方法。数据经过多个阶段“传送”以产生有用的结果(例如预测)。典型的管道可能涉及apache
管道为使用机器学习模型提供了一个标准API。这使得在测试和实验过程当中更容易切换一个模型。它还将建模工做分解为定义明确的步骤,以便更容易理解现有代码。scikit-learn库实现了不少机器学习算法,咱们能够多多参考scikit-learn :http://sklearn.apachecn.org/cn/0.19.0/index.html 数据结构
ML.NET机器学习管道的核心组件:架构
ML数据结构(例如IDataView
,LearningPipeline
)框架
TextLoader(将数据从分隔文本文件加载到LearningPipeline
)和 CollectionDataSource 从一组对象中加载数据集机器学习
转换(以得到正确格式的数据进行训练):函数
TextFeaturizer
ColumnConcatenator
,ColumnSelector
和ColumnDropper
CategoricalOneHotVectorizer
和CategoricalHashOneHotVectorizer
MissingValueHandler
RowTakeFilter
,RowSkipFilter
,RowRangeFilter
FeatureSelectorByCount
和FeatureSelectorByMutualInformation
学习算法(用于训练机器学习模型)用于各类任务:
FastTreeBinaryClassifier
,StochasticDualCoordinateAscentBinaryClassifier
,AveragedPerceptronBinaryClassifier
,BinaryLogisticRegressor
,FastForestBinaryClassifier
,LinearSvmBinaryClassifier
,和GeneralizedAdditiveModelBinaryClassifier
StochasticDualCoordinateAscentClassifier
,LogisticRegressor
,和NaiveBayesClassifier
FastTreeRegressor
,FastTreeTweedieRegressor
,StochasticDualCoordinateAscentRegressor
,OrdinaryLeastSquaresRegressor
,OnlineGradientDescentRegressor
,PoissonRegressor
,和GeneralizedAdditiveModelRegressor
聚类 KMeansPlusPlusClusterer
评估器(检查模型的工做状况):
BinaryClassificationEvaluator
ClassificationEvaluator
RegressionEvaluator
在构建机器学习模型时,首先须要定义您但愿经过数据实现的目标。以后,您能够针对您的状况选择正确的机器学习任务。如下列表描述了您能够选择的不一样机器学习任务以及一些常见用例。在ML.NET 0.2增长了一个 支持从一组对象中加载数据集的能力,之前这些只能从分隔的文本文件加载。另外一个补充是交叉验证,这是一种验证机器学习模型性能的方法。交叉验证方法的一个有用方面是它不须要与用于建立模型的数据集分开的数据集。相反,它将屡次提供的数据划分为不一样组的训练和测试数据。ML.NET 0.2加入了一个示例代码库,演示了如何使用这个新框架,地址是https://github.com/dotnet/machinelearning-samples。
二元分类属于 监督学习,用于预测数据的一个实例属于哪些两个类(类别)任务。分类算法的输入是一组标记示例,其中每一个标记都是0或1的整数。二进制分类算法的输出是一个分类器,您可使用该分类器来预测新的未标记实例的类。二元分类场景的例子包括:
将Twitter评论的情绪理解为“积极”或“消极”。
诊断患者是否患有某种疾病。
决定将电子邮件标记为“垃圾邮件”。
有关更多信息,请参阅Wikipedia上的二元分类 文章。
多元分类属于 监督学习,用于预测的数据的实例的类(类别)的任务。分类算法的输入是一组标记示例。每一个标签都是0到k-1之间的整数,其中k是类的数量。分类算法的输出是一个分类器,您可使用它来预测新的未标记实例的类。多类分类方案的例子包括:
有关更多信息,请参阅Wikipedia上的多类分类文章。
分类步骤设置:
聚类属于无监督机器学习,用于数据的一组实例为包含相似特征的簇的任务。聚类还可用于识别数据集中的关系,这些关系可能不是经过浏览或简单观察而在逻辑上得出的。聚类算法的输入和输出取决于所选择的方法。您能够采用分布、质心、连通性或基于密度的方法。ML.NET目前支持使用K-Means聚类的基于质心的方法。聚类场景的例子包括:
聚类设置步骤:
回归是 监督的机器学习,用于从一组相关的功能预测标签的值。标签能够具备任何实际价值,而且不像分类任务那样来自有限的一组值。回归算法对标签对其相关特征的依赖性进行建模,以肯定标签随着特征值的变化而如何变化。回归算法的输入是一组具备已知值标签的示例。回归算法的输出是一个函数,您可使用该函数来预测任何新的输入要素集的标注值。回归情景的例子包括: