.NET數據挖掘與機器學習開源框架


1.    數據挖掘與機器學習開源框架

1.1 框架概述

1.1.1 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/

1.1.2 Accord.NET Framework

    Accord.NET Framework是在AForge.NET基礎上封裝和進一步開發來的。功能也很強大,因為AForge.NET更注重與一些底層和廣度,而Accord.NET Framework更注重與機器學習這個專業,在其基礎上提供了更多統計分析和處理函數,包括圖像處理和計算機視覺算法,所以側重點不同,但都非常有用。    

官方網站http://accord-framework.net/

1.1.3 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/

1.1.4 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

1.1.5 numl

  另外一個小巧的,包含比較多的機器學習算法類庫,支持監督式和非監督式學習。支持很多常見的機器學習算法,文檔資源還不錯。包括Cluster,KMeans,PCA,DecisionTree,KNN,NaiveBayes,NeuralNetwork等學習算法,內容也非常豐富,功能強大,同時也包括一些數值計算的實現。這個組件個人認為沒有以上的那么復雜,結構小巧合理,代碼也很優雅。看看下面這段代碼,很快就可以構建一個決策樹學習器進行預測:

 
 1 var generator = new DecisionTreeGenerator(); 
2 generator.Descriptor = Descriptor.Create<Tennis>();
 3 generator.SetHint(false); 
4  
5 Tennis[] tennis = TennisData.GetData(); 
6  
7 var learned = Learner.Learn(tennis, 0.80, 1000, generator); 
8  
9 IModel model = learned.Model;10 double accuracy = learned.Accuracy;
11 12 Tennis t = new Tennis
13 {
14     Outlook = Outlook.Sunny,
15     Temperature = Temperature.High,
16     Windy = false
17 };
18
 19 Tennis predictedVal = model.Predict(t);
 

  numl的入門案例和文檔比較全面,如果本身對算法比較了解,熟悉C#,那入門應該不是問題。並且可以通過組件本身構建和解決更加復雜的問題。

官方網站http://numl.net/

1.1.6 Alglib

  ALGLIB是一個跨平台的數值分析和數據處理函數庫,該函數庫包括開源版本和商業版本。它支持多種編程語言,如C++,C#,Pascal,VBA等,可以在多個操作系統平台上運行,如:Windows,Linux和Solaris。ALGLIB有以下特點:

(1)線性代數(包括矩陣分析);
(2)方程求解(線性和非線性);
(3)插值;
(4)最優化;
(5)快速傅里葉變換;
(6)數值積分;
(7)線性和非線性最小二乘擬合;
(8)常微分方程求解;
(9)特殊函數;
(10)統計(描述統計、假設檢驗);
(11)數據分析(分類、回歸、神經網絡);

官方網站http://www.alglib.net/

2. Accord.NET框架

Accord.NET為.NET應用程序提供了統計分析、機器學習、圖像處理、計算機視覺相關的算法。

Accord.NET框架擴展了AForge.NET框架,

提供了一些新功能。

同時為.NET環境下的科學計算提供了一個完整的開發環境。

該框架被分成了多個程序集,

可以直接從官網下載安裝文件或者使用NuGet得到。

可以參考以下鏈接:https://github.com/accord-net/framework/wiki

 

2.1框架的三大功能模塊

Accord.NET框架主要有三個大的功能性模塊。

分別為科學技術,

信號與圖像處理,

支持組件。

下面將對3個模型的命名空間和功能進行簡單介紹。

可以讓大家更快的接觸和了解其功能是否是自己想要的,

下面是主要的命名空間介紹。

2.1.1 科學計算

Accord.Math:包括矩陣擴展程序,以及一組矩陣數值計算和分解的方法,也包括一些約束和非約束問題的數值優化算法,還有一些特殊函數以及其他一些輔助工具。

Accord.Statistics:包含概率分布、假設檢驗、線性和邏輯回歸等統計模型和方法,隱馬爾科夫模型,(隱藏)條件隨機域、主成分分析、偏最小二乘判別分析、內核方法和許多其他相關的技術。

Accord.MachineLearning: 為機器學習應用程序提供包括支持向量機,決策樹,朴素貝葉斯模型,k-means聚類算法,高斯混合模型和通用算法如Ransac,交叉驗證和網格搜索等算法。

Accord.Neuro:包括大量的神經網絡學習算法,如Levenberg-Marquardt,Parallel Resilient Backpropagation,Nguyen-Widrow初始化算法,深層的信念網絡和許多其他神經網絡相關的算法。具體看參考幫助文檔。

2.1.2 信號與圖像處理

Accord.Imaging:包含特征點探測器(如Harris, SURF, FAST and  FREAK),圖像過濾器、圖像匹配和圖像拼接方法,還有一些特征提取器。

Accord.Audio:包含一些機器學習和統計應用程序說需要的處理、轉換過濾器以及處理音頻信號的方法。

Accord.Vision:實時人臉檢測和跟蹤,以及對人流圖像中的一般的檢測、跟蹤和轉換方法,還有動態模板匹配追蹤器。

2.1.3 支持組件

主要是為上述一些組件提供數據顯示,繪圖的控件,分為以下幾個命名空間:

Accord.Controls:包括科學計算應用程序常見的柱狀圖、散點圖和表格數據瀏覽。

Accord.Controls.Imaging:包括用來顯示和處理的圖像的WinForm控件,包含一個方便快速顯示圖像的對話框。 

Accord.Controls.Audio:顯示波形和音頻相關性信息的WinForm控件。

Accord.Controls.Vision:包括跟蹤頭部,臉部和手部運動以及其他計算機視覺相關的任務WinForm控件。

2.2 支持的算法介紹

下面將Accord.NET框架包括的主要功能算法按照類別進行介紹。來源主要是官網介紹,進行了簡單的翻譯和整理。

2.2.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.2.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。

2.2.3 聚類(Clustering)

K-Means、K-Modes、Mean-Shift(均值漂移)、Gaussian Mixture Models(高斯混合模型)、Binary Split(二元分裂)、Deep Belief Networks(深層的信念網絡)、 Restricted Boltzmann Machines(限制玻耳茲曼機)。聚類算法可以應用於任意數據,包括圖像、數據表、視頻和音頻。

2.2.4 概率分布(Distributions)

包括40多個分布的參數和非參數估計。包括一些常見的分布如正態分布、柯西分布、超幾何分布、泊松分布、伯努利;也包括一些特殊的分布如Kolmogorov-Smirnov , Nakagami、Weibull、and Von-Mises distributions。也包括多元分布如多元正態分布、Multinomial 、Independent 、Joint and Mixture distributions。

2.2.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 .

2.2.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 .

2.2.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。還有幾個圖像處理中經常用到的圖像過濾器。

2.2.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.

2.2.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。

2.2.10降維技術

SVD奇異值分解(OctaveEnvironment.svd方法);

PCA主成分分析(類PrincipalComponent);

ICA獨立成份分析(類IndependentComponetAnalysis)

 

2.2.11算法精度測算

混淆矩陣(類ConfusionMatrix);

ROC曲線評估(類ReceiverOperatingCharacteristic);

Bootstrap算法(自助算法;類(Bootstrap));

CrossValidation算法(交叉檢驗;類(CrossValidation));

 

2.3 相關資源

    從項目主頁:http://accord-framework.net/下載的壓縮包中,包括了幾乎所有的在線資源。如下圖,介紹幾個主要的資源:

    Debug是一些用於調試的程序集,Docs是幫助文檔,Externals是一些輔助的組件,Release是不同.NET環境的Dll程序集版本,Samples是案例源代碼,Setup是安裝的程序,Sources是項目的源代碼,Unit Tests是單元測試代碼。

Accord.Net框架源代碼托管在GitHub:

https://github.com/accord-net/framework/

3、Math.Net框架

3.1.Math.NET基本介紹

Math.NET官方網站:http://www.mathdotnet.com/

  Math.NET初衷是開源建立一個穩定並持續維護的先進的基礎數學工具箱,以滿足.NET開發者的日常需求。目前該組件主要分為以下幾個子項目,該組件同時也支持Mono,而且支持的平台也非常廣泛(PCL Portable Profile 47: Windows 8, Silverlight 5,Xamarin: Android, iOS)。 

3.2.Math.NET Numerics

  Math.NET Numerics是核心功能是數值計算。主要是提供日常科學工程計算相關的算法,包括一些特殊函數,線性代數,概率論,隨機函數,微積分,插值,最優化等相關計算功能。它是在 Math.NET IridiumdnAnalytics 的基礎上合並而來。該組件里面包括了一個讀取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

3.3.Math.NET Symbolics

  Math.NET Symbolics是一個Math.NET下一個基礎的代數計算項目,該項目的最終目的並不是要成為如Maple,Mathematica那樣一個完善的計算機代數計算系統。以前在做Matlab.NET混合編程的時候,經常就有人問為什么混合編程的符號計算用不了,其實就是用不了,官方不支持,那怎么辦,其實簡單的功能,就可以使用這個項目來完成。詳細的使用可以參考項目主頁的幫助文檔,接下來的文章也會加以介紹。

  項目主頁:https://github.com/mathnet/mathnet-symbolics

3.4.Math.NET Filtering

  Math.NET Filtering是一個數字信號處理工具箱,提供了數字濾波器的基礎功能,以及濾波器應用到數字信號處理和數據流轉換的相關功能。

  項目主頁:https://github.com/mathnet/mathnet-filtering

3.5.Math.NET Spatial

  是Math.NET下的一個幾何處理工具箱。

  項目主頁:https://github.com/mathnet/mathnet-spatial

3.6.其他

  Math.NET在發展過程中的一些其他項目如Math.NET Iridium ,Math.NET Classic, Math.NET Linq Algebra, Math.NET Yttrium等都是歷史(有一些是實驗性的),現在都已經合並到上述幾個子項目中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM