我想使用Microsoft.ML聚类KMeans对颜色进行量化。我有一个带有颜色的数据集,关键是获取关于训练过的聚类的信息。
有没有办法从模型/上下文中获取关于经过训练的集群的信息?
代码:
var mlContext = new MLContext();
// color is System.Drawing.Color array
var trainingColors = colors
.Select(s => new ColorTrainingModel() { R = s.R, G = s.G, B = s.B })
.ToArray();
var trainingData = mlContext.Data.LoadFromEnumerable(trainingColors);
var kmeans = mlContext.Clustering.Trainers.KMeans(
featureColumnName: "Features",
numberOfClusters: 4);
var pipeline = mlContext.Transforms.Concatenate(
"Features",
nameof(ColorTrainingModel.R),
nameof(ColorTrainingModel.G),
nameof(ColorTrainingModel.B)
)
.Append(kmeans);
var model = pipeline.Fit(trainingData);
// kinda result I am looking for
var colorPalette = model.Clusters.Select(s => new { R = s[0], G = s[1], ...发布于 2019-09-08 12:41:13
得到了一个解决方案,它基本上与Microsoft.ML无关,但是,它使用KMeans并执行以下操作:
使用Accord.NET框架:http://accord-framework.net/docs/html/T_Accord_MachineLearning_KMeans.htm
var observations = colors
.Select(s => new double[] { s.R, s.G, s.B })
.ToArray();
var kmeans = new Accord.MachineLearning.KMeans(k: colorCount);
var clusters = kmeans.Learn(observations);
var palette = new List<System.Drawing.Color>();
foreach (var c in clusters)
{
var col = System.Drawing.Color.FromArgb(
(int)Math.Round(c.Centroid[0], 0), //R
(int)Math.Round(c.Centroid[1], 0), //G
(int)Math.Round(c.Centroid[2], 0) //B
);
palette.Add(col);
}
return palette.ToArray();https://stackoverflow.com/questions/57836752
复制相似问题