如何使用 C# 在 Accord.NET 中构建观察数组

Posted

技术标签:

【中文标题】如何使用 C# 在 Accord.NET 中构建观察数组【英文标题】:How to build up the observation array in Accord.NET using C# 【发布时间】:2018-01-27 03:23:35 【问题描述】:

我正在努力学习 Accord.NET 和 AI 世界的基本原理... 目标是使用 K-Means 算法对客户列表进行聚类。 对于每个客户,我获得了三个功能:

CustomerID, ProductCategory, TotQty, TotAmount

AAA, 01, 50, 3000
AAA, 02, 10, 150
BBB, 01, 45, 2700
...

现在,我必须将观察结果传递给 K-Means 算法:

double[][] observations = ... (?)

// Create a new K-Means algorithm
KMeans kmeans = new KMeans(k: 10);

// Compute and retrieve the data centroids
var clusters = kmeans.Learn(observations);

// Use the centroids to parition all the data
int[] labels = clusters.Decide(observations);

第一个问题:我必须按客户对数据进行分组吗?像这样:

double[][] observation =
                 
  new double[]  1, 50, 3000,  2, 10, 150 ,
  new double[]  1, 45, 2700

或:

double[][] observation =
                 
  new double[]  1, 50, 3000,
  new double[]  2, 10, 150,
  new double[]  1, 45, 2700

第二个问题:我如何将结果追溯到原始 CustomerID? 我的意思是,一旦我得到带有分配标签int[] labels = clusters.Decide(observations); 的结果,我如何确定哪个客户属于哪个集群/标签?

【问题讨论】:

1) 可能 - 如果您的客户可以被视为个人观察,那么是的,您可以按客户对他们进行分组 - 但只保留每个客户之间不同的功能。 2) Decide 方法的输出将与您传递给它的观察数组的顺序相同 - 因此,如果第一个客户是第一个观察值,则 Decide 函数的第一个输出将是第一个客户的标签.如果可以,请在此处或在 Accord.NET 的问题跟踪器中发布您的数据的简短示例,我们可以尝试为您提供一个工作示例! :-) 感谢塞萨尔的支持!我将直接在 Accord.NET 问题跟踪器上提供示例数据 【参考方案1】:

我为 c# 制作了通用 K-means 库

所以你可以用它来回答你的第二个问题。 (获得质心后,您可以获得属于该质心的对象)

https://github.com/pashkovdenis/K-means/

【讨论】:

我看过你的代码,但是:1)它需要修复.sln(解决方案)文件,它似乎指的是旧版本的VS,基本上,我从刮。 2) 该项目不使用 Accord.NET。我更喜欢使用 Accord.NET 方式,因为它是一个非常广泛的解决方案,拥有强大的社区基础。不过还是谢谢大家的支持

以上是关于如何使用 C# 在 Accord.NET 中构建观察数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用朴素贝叶斯和主成分分析(C#、Accord.NET)对文档进行分类

无法使用 Accord.Net 框架实现基本决策树

在c#中将XML文件转换为csv文件格式

Accord.NET多类SVM分类Kernel如何解决Out of memory异常

使用 ID3 算法进行预测,Accord.Net 框架

在 Accord.Net SVM 中有一个“未识别”类