.NET数据挖掘与机器学习开源框架
一 框架概述
(一)AForge.NET
AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域。这个框架由一系列的类库组成。主要包括有:
AForge.Imaging —— 一些日常的图像处理和过滤器
AForge.Vision —— 计算机视觉应用类库
AForge.Neuro —— 神经网络计算库AForge.Genetic -进化算法编程库
AForge.MachineLearning —— 机器学习类库
AForge.Robotics —— 提供一些机器学习的工具类库
AForge.Video —— 一系列的视频处理类库
AForge.Fuzzy —— 模糊推理系统类库
AForge.Controls—— 图像,三维,图表显示控件
来自:http://baike.haosou.com/doc/1786119-1888850.html
官方网站:http://www.aforgenet.com/
(二) Accord.NET Framework
Accord.NET Framework是在AForge.NET基础上封装和进一步开发来的。功能也很强大,因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器学习这个专业,在其基础上提供了更多统计分析和处理函数,包括图像处理和计算机视觉算法,所以侧重点不同,但都非常有用。
官方网站:http://accord-framework.net/
(三)Math.NET
不管是机器学习还是数据挖掘,都与数学离不开关系,既然是在.NET平台,那么这个组件以后你也许用得上。Math.NET是.NET平台下最全面的数学计算组件之一,基础功能非常完善。我的博客有对这个组件的详细研究:http://www.cnblogs.com/asxinyu/p/4329737.html 。当然更多的功能还得大家自己使用中发掘,毕竟提供了源代码。Math.NET初衷是开源建立一个稳定并持续维护的先进的基础数学工具箱,以满足.NET开发者的日常需求。目前该组件主要分为以下几个子项目,该组件同时也支持Mono,而且支持的平台也非常广泛。Math.NET Numerics是核心功能是数值计算。主要是提供日常科学工程计算相关的算法,包括一些特殊函数,线性代数,概率论,随机函数,微积分,插值,最优化等相关计算功能。详细的介绍和使用可以参考本站的菜单“Math.NET”,查看目录。
官方网站:http://www.mathdotnet.com/
(四)Infer.NET
上面说的那些很强大,强大一方面是说包括的面广,一方面是代码,注释,资源,案例也很完善。如果说上面那些是大炮,那么这个Infer.NET就是战斗机,博客已经发表了2篇翻译的文档:http://www.cnblogs.com/asxinyu/p/4329742.html,请关注。
Infer.NET是微软剑桥研究院基于.NET平台开发的一款机器推理组件,该组件的采用的是Microsoft Research License Agreement 授权,Non-Commercial Use Only.Infer.NET是一个概率图模型中(graphical models)用于运行贝叶斯推理机(Bayesian inference)的框架。如果对概率图模型或者贝叶斯推理的意义不了解,你可以参考一下相关资源文件,在Resources and References page页面。Infer.NET为各种应用程序所需要推理提供了先进的消息传递算法和统计程序。Infer.NET更关注与概率图编程或者贝叶斯理论的相关应用。这个随机因素和不确定世界中的很多问题,都可以适用,所以他的强大一方面是专注,另一方面是提供的建模语言。与其他的组件不同,其他组件是算法级,而Infer.NET是建模级别,附带了各种通用和常见的推理算法。可以通过简单的代码来创建模型,按照微软的话说是MSL建模语言,这也是这个组件让我肃然起敬的地方,估计也只有微软的研究人员才会想到这么干一劳永逸的事情。
官方网站:http://research.microsoft.com/en-us/um/cambridge/projects/infernet/default.aspx
(五) numl
另外一个小巧的,包含比较多的机器学习算法类库,支持监督式和非监督式学习。支持很多常见的机器学习算法,文档资源还不错。包括Cluster,KMeans,PCA,DecisionTree,KNN,NaiveBayes,NeuralNetwork等学习算法,内容也非常丰富,功能强大,同时也包括一些数值计算的实现。这个组件个人认为没有以上的那么复杂,结构小巧合理,代码也很优雅。看看下面这段代码,很快就可以构建一个决策树学习器进行预测:
var generator = new DecisionTreeGenerator(); generator.Descriptor = Descriptor.Create<Tennis>(); generator.SetHint(false); Tennis[] tennis = TennisData.GetData(); var learned = Learner.Learn(tennis, 0.80, 1000, generator); IModel model = learned.Model;10 double accuracy = learned.Accuracy; Tennis t = new Tennis { Outlook = Outlook.Sunny, Temperature = Temperature.High, Windy = false }; Tennis predictedVal = model.Predict(t);
numl的入门案例和文档比较全面,如果本身对算法比较了解,熟悉C#,那入门应该不是问题。并且可以通过组件本身构建和解决更加复杂的问题。
官方网站:http://numl.net/
(六) Alglib
ALGLIB是一个跨平台的数值分析和数据处理函数库,该函数库包括开源版本和商业版本。它支持多种编程语言,如C++,C#,Pascal,VBA等,可以在多个操作系统平台上运行,如:Windows,Linux和Solaris。ALGLIB有以下特点:
(1)线性代数(包括矩阵分析);
(2)方程求解(线性和非线性);
(3)插值;
(4)最优化;
(5)快速傅里叶变换;
(6)数值积分;
(7)线性和非线性最小二乘拟合;
(8)常微分方程求解;
(9)特殊函数;
(10)统计(描述统计、假设检验);
(11)数据分析(分类、回归、神经网络);
二、 Accord.NET框架
Accord.NET为.NET应用程序提供了统计分析、机器学习、图像处理、计算机视觉相关的算法。
Accord.NET框架扩展了AForge.NET框架,
提供了一些新功能。
同时为.NET环境下的科学计算提供了一个完整的开发环境。
该框架被分成了多个程序集,
可以直接从官网下载安装文件或者使用NuGet得到。
可以参考以下链接:https://github.com/accord-net/framework/wiki
(一)框架的三大功能模块
Accord.NET框架主要有三个大的功能性模块。
分别为科学技术,
信号与图像处理,
支持组件。
下面将对3个模型的命名空间和功能进行简单介绍。
可以让大家更快的接触和了解其功能是否是自己想要的,
下面是主要的命名空间介绍。
(二) 科学计算
Accord.Math:包括矩阵扩展程序,以及一组矩阵数值计算和分解的方法,也包括一些约束和非约束问题的数值优化算法,还有一些特殊函数以及其他一些辅助工具。
Accord.Statistics:包含概率分布、假设检验、线性和逻辑回归等统计模型和方法,隐马尔科夫模型,(隐藏)条件随机域、主成分分析、偏最小二乘判别分析、内核方法和许多其他相关的技术。
Accord.MachineLearning: 为机器学习应用程序提供包括支持向量机,决策树,朴素贝叶斯模型,k-means聚类算法,高斯混合模型和通用算法如Ransac,交叉验证和网格搜索等算法。
Accord.Neuro:包括大量的神经网络学习算法,如Levenberg-Marquardt,Parallel Resilient Backpropagation,Nguyen-Widrow初始化算法,深层的信念网络和许多其他神经网络相关的算法。具体看参考帮助文档。
(三)信号与图像处理
Accord.Imaging:包含特征点探测器(如Harris, SURF, FAST and FREAK),图像过滤器、图像匹配和图像拼接方法,还有一些特征提取器。
Accord.Audio:包含一些机器学习和统计应用程序说需要的处理、转换过滤器以及处理音频信号的方法。
Accord.Vision:实时人脸检测和跟踪,以及对人流图像中的一般的检测、跟踪和转换方法,还有动态模板匹配追踪器。
(四) 支持组件
主要是为上述一些组件提供数据显示,绘图的控件,分为以下几个命名空间:
Accord.Controls:包括科学计算应用程序常见的柱状图、散点图和表格数据浏览。
Accord.Controls.Imaging:包括用来显示和处理的图像的WinForm控件,包含一个方便快速显示图像的对话框。
Accord.Controls.Audio:显示波形和音频相关性信息的WinForm控件。
Accord.Controls.Vision:包括跟踪头部,脸部和手部运动以及其他计算机视觉相关的任务WinForm控件。
(五) 支持的算法介绍
下面将Accord.NET框架包括的主要功能算法按照类别进行介绍。来源主要是官网介绍,进行了简单的翻译和整理。
1、分类(Classification)
SVM(支持向量机,类SupportVectorMachine、类KernelSupportVectorMachine、类SequentialMinimalOptimization—序列最小优化算法)、
K-NN邻近算法(类KNearestNeighbors);
Logistic Regression(逻辑回归)、
Decision Trees(决策树,类DecisionTree、ID3Learning、C45Learning)、
Neural Networks(神经网络)、
Deep Learning(深度学习)
(Deep Neural Networks深层神经网络)、
Levenberg-Marquardt with Bayesian Regularization、
Restricted Boltzmann Machines(限制玻耳兹曼机)、
Sequence classification (序列分类),
Hidden Markov Classifiers and Hidden Conditional Random Fields(隐马尔科夫分类器和隐藏条件随机域)。
2、回归(Regression)
Multiple linear regression(多元线性回归-单因变量多自变量)、
SimpleLinearRegression(线性回归,类SimpleLinearRegression)、
Multivariate linear regression(多元线性回归-多因变量多自变量)、polynomial regression (多项式回归)、logarithmic regression(对数回归)、Logistic regression(逻辑回归)、multinomial logistic regression(多项式逻辑回归)(softmax) and generalized linear models(广义线性模型)、L2-regularized L2-loss logistic regression , L2-regularized logistic regression , L1-regularized logistic regression , L2-regularized logistic regression in the dual form and regression support vector machines。
3、聚类(Clustering)
K-Means、K-Modes、Mean-Shift(均值漂移)、Gaussian Mixture Models(高斯混合模型)、Binary Split(二元分裂)、Deep Belief Networks(深层的信念网络)、 Restricted Boltzmann Machines(限制玻耳兹曼机)。聚类算法可以应用于任意数据,包括图像、数据表、视频和音频。
4、概率分布(Distributions)
包括40多个分布的参数和非参数估计。包括一些常见的分布如正态分布、柯西分布、超几何分布、泊松分布、伯努利;也包括一些特殊的分布如Kolmogorov-Smirnov , Nakagami、Weibull、and Von-Mises distributions。也包括多元分布如多元正态分布、Multinomial 、Independent 、Joint and Mixture distributions。
5、假设检验(Hypothesis Tests)
超过35统计假设测试,包括单向和双向方差分析测试、非参数测试如Kolmogorov-Smirnov测试和媒体中的信号测试。contingency table tests such as the Kappa test,with variations for multiple tables , as well as the Bhapkar and Bowker tests; and the more traditional Chi-Square , Z , F , T and Wald tests .
6、核方法(Kernel Methods)
内核支持向量机,多类和多标签向量机、序列最小优化、最小二乘学习、概率学习。Including special methods for linear machines such as LIBLINEAR's methods for Linear Coordinate Descent , Linear Newton Method , Probabilistic Coordinate Descent , Probabilistic Coordinate Descent in the Dual , Probabilistic Newton Method for L1 and L2 machines in both the dual and primal formulations .
7、图像(Imaging)
兴趣和特征点探测器如Harris,FREAK,SURF,FAST。灰度共生矩阵,Border following,Bag-of-Visual-Words (BoW),RANSAC-based homography estimation , integral images , haralick textural feature extraction , and dense descriptors such as histogram of oriented gradients (HOG) and Local Binary Pattern (LBP).Several image filters for image processing applications such as difference of Gaussians , Gabor , Niblack and Sauvola thresholding。还有几个图像处理中经常用到的图像过滤器。
8、音频信号(Audio and Signal)
音频信号的加载、解析、保存、过滤和转换,如在空间域和频域应用音频过滤器。WAV文件、音频捕捉、时域滤波器,高通,低通,波整流过滤器。Frequency-domain operators such as differential rectification filter and comb filter with Dirac's delta functions . Signal generators for Cosine , Impulse , Square signals.
9、视觉(Vision)
实时人脸检测和跟踪,以及图像流中检测、跟踪、转换的一般的检测方法。Contains cascade definitions , Camshift and Dynamic Template Matching trackers . Includes pre-created classifiers for human faces and some facial features such as noses。
10、降维技术
SVD奇异值分解(OctaveEnvironment.svd方法);
PCA主成分分析(类PrincipalComponent);
ICA独立成份分析(类IndependentComponetAnalysis)
11、算法精度测算
混淆矩阵(类ConfusionMatrix);
ROC曲线评估(类ReceiverOperatingCharacteristic);
Bootstrap算法(自助算法;类(Bootstrap));
CrossValidation算法(交叉检验;类(CrossValidation));
(三) 相关资源
从项目主页:http://accord-framework.net/下载的压缩包中,包括了几乎所有的在线资源。如下图,介绍几个主要的资源:
Debug是一些用于调试的程序集,Docs是帮助文档,Externals是一些辅助的组件,Release是不同.NET环境的Dll程序集版本,Samples是案例源代码,Setup是安装的程序,Sources是项目的源代码,Unit Tests是单元测试代码。
Accord.Net框架源代码托管在GitHub:
https://github.com/accord-net/framework/
三、Math.Net框架
(一)Math.NET基本介绍
Math.NET官方网站:http://www.mathdotnet.com/
Math.NET初衷是开源建立一个稳定并持续维护的先进的基础数学工具箱,以满足.NET开发者的日常需求。目前该组件主要分为以下几个子项目,该组件同时也支持Mono,而且支持的平台也非常广泛(PCL Portable Profile 47: Windows 8, Silverlight 5,Xamarin: Android, iOS)。
(二)Math.NET Numerics
Math.NET Numerics是核心功能是数值计算。主要是提供日常科学工程计算相关的算法,包括一些特殊函数,线性代数,概率论,随机函数,微积分,插值,最优化等相关计算功能。它是在 Math.NET Iridium和dnAnalytics 的基础上合并而来。该组件里面包括了一个读取Matlab数据格式的功能,我们将在后几篇博客中加以介绍。其主要特征有:http://en.wikipedia.org/wiki/Math.NET_Numerics
支持概率分布:离散型、连续型和多元
伪随机数生成器
支持稀疏矩阵和向量的复杂的线性代数解决方法
LU, QR, SVD, EVD,Cholesky分解
矩阵读写功能,支持Matlab和一些分开的文件
复数计算
特殊函数: Gamma, Beta, Erf,Bessel,Struve 等等
插值,线性回归,曲线拟合
数值积分,方程求解
描述性统计、统计直方图,皮尔森相关系数
马尔可夫链蒙特卡罗抽样
基本的财务统计数据
傅里叶变换(FFT)
重载的数学操作符来简化复杂的表达式
Mono平台支持,可选支持英特尔数学内核库(Microsoft Windows和Linux)
可选更多的的F#扩展用法
该子项目的主页:https://github.com/mathnet/mathnet-numerics
(三)Math.NET Symbolics
Math.NET Symbolics是一个Math.NET下一个基础的代数计算项目,该项目的最终目的并不是要成为如Maple,Mathematica那样一个完善的计算机代数计算系统。以前在做Matlab.NET混合编程的时候,经常就有人问为什么混合编程的符号计算用不了,其实就是用不了,官方不支持,那怎么办,其实简单的功能,就可以使用这个项目来完成。详细的使用可以参考项目主页的帮助文档,接下来的文章也会加以介绍。
项目主页:https://github.com/mathnet/mathnet-symbolics
(四)Math.NET Filtering
Math.NET Filtering是一个数字信号处理工具箱,提供了数字滤波器的基础功能,以及滤波器应用到数字信号处理和数据流转换的相关功能。
项目主页:https://github.com/mathnet/mathnet-filtering
(五)Math.NET Spatial
是Math.NET下的一个几何处理工具箱。
项目主页:https://github.com/mathnet/mathnet-spatial
(六)其他
Math.NET在发展过程中的一些其他项目如Math.NET Iridium ,Math.NET Classic, Math.NET Linq Algebra, Math.NET Yttrium等都是历史(有一些是实验性的),现在都已经合并到上述几个子项目中。