选自Medium
文|Jesus Rodriguez
乌镇智库编译
Python的简洁性、易读性和可扩展性,使其慢慢建立了框架、丰富的工具组件以及研究的健康大生态。Python作为解释性语言,虽然跑的比谁都慢,但减少了开发者的工作量,以及对数据进行处理、分析以及预测的能力的显著提升(包括云计算提供的强大分布式运算能力,摩尔定律下每一个计算单元成本的持续降低,加之以神经网络为代表的深度学习算法的应用),使我们得到了超乎想象的人工智能,催生了庞大的用户群体和活跃社区,一瞬间似乎吃机器学习这口饭的码农们生死存亡都寄托在Python上。
但是,我们也越来越多的发现,新的框架和工具试图将机器学习功能引入现有的大型开发人员社区当中,比如.NET.Microsoft,慢慢引入机器学习基本组件和库,使.NET开发人员更容易上手机器学习。
此前微软宣布推出新版ML.NET,尝试为.NET开发人员构建机器学习应用提供更为便捷的体验,ML.NET最早的版本由Microsoft Research开发,提供C#和F#编程模型,能够创建包括训练和执行的机器学习模型,ML.NET的核心架构可以分为四个基本组成:
...
- Data Transforms:是机器学习工作流中启用数据集转换的组件,例如组合算法、分类器、特征工程、行键过滤器等等;
-Learners:是ML.NET中包含的基本机器学习模型,算法组合目前相对基础,但它仍旧涵盖一些基本的模型,如线性回归(linear regression)和K-均值聚类(K-means);
-Misc:这部分是构建机器学习(模型优化或正则化)所必须的实用功能,例如评估和校准等;
-Extensions: ML.NET充分利用深度学习库,例如TensorFlow,Accord.NET和Microsoft自己的Cognitive Toolkit
...
-如何使用ML.NET-
使用ML.NET的第一步就是使用以下代码安装NuGet包:
接着就可以创建一个LearningPipeline 实例了,它用于封装机器学习模型数据加载、特征化:
使用工作流,开始组装机器学习应用,很容易完成从文本文件加载数据:
数据和特征决定机器学习的上限,在大多数机器学习中,需要对数据进行预处理和清理,于是我们在工作流中添加另一个元素:
此时,我们可以选择我们将要使用的算法并适当配置超参数(hyperparameters):
调用Train训练模型,使用Evaluate routine进行评估:
最后执行模型并评估结果:
如你所见,ML.NET为.NET开发人员提供了一个进入机器学习世界非常基础的切入点,但是与许多其他机器学习桥接模式一样,我们应该为使用ML.NET设置正确的约束。
-ML.NET的能见局限-
ML.NET是.NET开发人员开始开发基础机器学习应用的绝佳工具,但是这个框架同时具有一些较为明显的局限,我们在实际应用中遇到的许多机器学习场景都会变得非常不适用,在当前版本中,开发人员在使用ML.NET之前应该注意一些问题:
-对于初学者来说,算法库非常有限,这就减少了我们能在特定工作流上一些架构的可能性;
-Pipeline模型的易用让开发人员上手简单,但也是它的限制,因为大多数机器学习工作流几乎不遵循ML.NET的4步顺序;
-目前没有优化或正则化工具支持ML.NET,这也限制了它在实际应用中的可能;
-没有明确的编程模型可以扩展到更复杂的堆栈,例如Cognitive Toolkit。
总的来说,ML.NET是为.NET开发人员和机器学习社区的桥接而努力,如果.NET社区接受ML.NET,那么新的框架就能成为机器学习生态中一个不错的选择,但目前要说ML.NET已成为有力的竞争者,还为时尚早了。
IBM披露深度图像分类模型健壮性研究新进展:别一味追求高准确率!
推荐阅读
比人工智能威胁更可怕的是,那些曾被你抛弃的互联网软件
尼克谈人工智能的历史、现实与未来