【发布时间】: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 问题跟踪器上提供示例数据
标签: c# algorithm k-means accord.net