如何使用 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)对文档进行分类