Aforge.NET是一个基于C#框架设计,涵盖计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等库 ,而Accord.NET Framework是在AForge.NET基础上封装和进一步开发来的,相比于前者来说有着更高的针对性,是一个包含常见的SVM,SURF,FAST等算法的类库,能够很方便的建立
需要用到的:
VS2015
网络,可能要翻墙
第一步,环境搭建
先打开VS,新建一个c#的控制台程序
然后 工具---NuGet包管理器---管理器控制台
输入下面语句,下载accord相关的文件
PM> Install-Package Accord.MachineLearning PM> Install-Package Accord.Controls
这里的例子是使用SVM来解决常见的异或问题
什么是异或问题?如下所示
a b 将得到的结果
0 0 0
1 0 1
0 1 1
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Accord.Controls; using Accord.MachineLearning.VectorMachines; using Accord.MachineLearning.VectorMachines.Learning; using Accord.Math; using Accord.Statistics.Kernels; namespace AccordOne { class Program { [MTAThread]//用于宣告这个程序的线程模型为多线程单元,如果说单线程则是STAThread static void Main(string[] args) { double[][] inputs = {//输入的数据 new double[] { 0, 0 }, new double[] { 1, 0 }, new double[] { 0, 1 }, new double[] { 1, 1 }, };
int[] outputs = { -1, +1, +1, -1, }; //创建一个新的机器拥有多项式内核与两个输入 var ksvm = new KernelSupportVectorMachine(new Gaussian(), 2);
//创建采用我们所给予的输入与输出的学习算法 var smo = new SequentialMinimalOptimization(machine: ksvm, inputs: inputs, outputs: outputs) { Complexity = 100 //创建具有硬性分界的支持向量机SVM };
// Teach the machine double error = smo.Run();//出错则返回值 Console.WriteLine("error:" + error); // Show results on screen ScatterplotBox.Show("Training data", inputs, outputs);//这个窗口用于显示学习数据
ScatterplotBox.Show("SVM results", inputs, //这边这个窗口则显示SVM的返回结果 inputs.Apply(p => System.Math.Sign(ksvm.Compute(p))));
Console.ReadKey();
} } }
得到的结果
一点点解释:
参考原文
https://github.com/accord-net/framework/wiki/Getting-started