Accord.Net框架介绍

孙清野
2023-12-01

0.背景

公司做的软件是一C#为主的一些工控软件,一般涉及算法也就是统计学,谱图寻峰的一些核仪器相关的算法。但是对于机器学习方面,很早之前做过一个建模软件,但是缺少维护,曾有人尝试重构该软件,最后也是不了了之。这里笔者对Net的机器学习算法库做了一些调研。

1.调研

网上介绍Accord.NET的文章不少,但是具体讲如何使用的反而不多,可能跟.NET在机器学习领域应用不多有关。诚然,如果做项目的话,可能用Python更好一些,但是如果把了解Accord.NET作为进入机器学习领域的一个接入点,对于.NET开发者来说可能更合适,并且Accord.NET还在不断的更新(2017年停止更新),源代码的注释和测试都很详细,配合自身的Samples,做一些简单的应用开发,还是很快的。再Github上左右.Net相关的机器学习库,主要有成熟的Accord.Net和微软近期推出的ML.Net。
ML.NET是.net的跨平台开源机器学习(ML)框架。ML.NET允许开发人员在他们的.net应用程序中轻松地构建、训练、部署和使用自定义模型,而不需要事先具备开发机器学习模型的专业知识或使用其他编程语言(如Python或r)的经验。框架提供了从文件和数据库加载数据的功能,支持数据转换,并包括许多ML算法。通过ML.NET,您可以为各种场景训练模型,比如分类、预测和异常检测。你也可以在ML.NET中使用TensorFlow和ONNX模型,这使得框架更具可扩展性,并扩展了支持场景的数量。ML.Net使用也很简单,VisualStudio也为它配置了可视化的建模步骤界面,降低了机器学习的入门门槛。不过在这个库里没有找到我需要的PartialLeastSquaresAnalysis(偏最小二乘分析),所以就Pass掉这个库了。
Accord.Net项目介绍如下:
经过14~15年的发展,Accord.NET项目终于被归档了。我想向每一个曾经承诺、奉献或以其他方式奉献他们的时间
和努力使这个存储库每天都更好的人表示非常感谢。这个以算法和实现的形式存储知识的项目,从15年前我第一次进入大学并开始从事研究以来,发展远远超出了我的预期。与此同时,发生了许多事情,从那时起ML领域也发生了很大的发展。项目为.NET提供了机器学习、统计、人工智能、计算机视觉和图像处理方法。它可以在微软Windows, Xamarin, Unity3D, Windows Store应用程序,Linux或移动设备上使用。
按照作者的叙述,这个库在20年前就开始做了,十几年的时间维护这个项目,实在是太不太容易了。也为我在.Net平台上研究算法提供了可能。这个库主要是对传统机器学习的实现,很多都是基于统计学相关的机器学习算法,什么多元线性回归,支持向量机啊。对于深度学习方面涉及很少,关于深度学习,还是在python上先研究好在来C#平台吧。计算机视觉、信号处理、模式识别等方面均有丰富的示例。

2.Accord.Net

Accord.Net提供了很多矩阵相关的处理,类似numpy,不过效率还有功能啥的比numpy少了。很多常规的数据操作都有,什么转置,变形,行区间取数,列区间取数,矩阵相乘啥的,总好过我们自己造轮子,完事还一大堆bug。
读取数据:

 // open selected file
 using (TextReader stream = new StreamReader(PATH.FILEPATH))
 using (CsvReader reader = new CsvReader(stream, true))
 {
 		//这个Copy很重要,要不然数据没法显示
     var table = reader.ToTable().Copy();
     dgvData.DataSource = table;
     dgvData.Refresh();
 }

数据转换

double[,] matrix = table.ToMatrix();
double[][] jagged = table.ToJagged();

模型训练

private void Fit(double[,] X, double[,] Y,int components)
 {
     var plsAnalysis = new PartialLeastSquaresAnalysis() { NumberOfLatentFactors = components };
     _reg = plsAnalysis.Learn(X.ToJagged(), Y.ToJagged());
 }

该框架通过扩展方法提供矩阵操作例程。只需导入Accord.Math命名空间扩展到源文件中,所有公共的.net数据类型都将使用与数学相关的一些扩展方法进行扩展。更多详情,可以看看Accord.Net项目地址

3.后记

关于机器学习,感觉还是python平台上的资源要更多,而且也有很多比较成熟的解决方案。Accord.Net虽然还不错,但是C#本身的机器学习生态就是不太好。建议可以在学习了Accord.Net之后还是再去看看sklearn等python上的库,先把流行的库搞明白,在来搞这个不太流行的库,遇到问题也更容易有解决思路。后续的学习计划是一边在C#上做项目,一边学习python的机器学习库,对二者都熟悉了后,新项目来的时候也能更好地权衡到底用哪个框架。

 类似资料: