Я могу довольно легко вычислить членство в кластере с помощью KMeans
:
open System
open System.IO
open Utils
open Accord
open Accord.Math
open Accord.MachineLearning
let vals = [|
[|1.0; 2.0; 3.0; 2.0|]
[|1.1; 1.9; 3.1; 4.0|]
[|2.0; 3.0; 4.0; 4.0|]
[|3.0; 3.1; 2.0; 3.0|]
[|2.0; 4.0; 3.0; 6.0|]
[|1.0; 5.0; 5.0; 7.0|]
[|4.0; 3.0; 6.0; 8.0|]
[|5.0; 4.0; 3.0; 6.0|]
[|6.0; 4.0; 8.0; 7.0|]
[|5.0; 6.0; 5.0; 9.0|]
[|4.0; 2.0; 7.0; 8.0|]
[|8.0; 9.0; 3.1; 2.2|]
[|8.0; 9.0; 2.0; 2.0|]
[|10.0; 2.0; 3.0; 2.0|]
[|10.1; 1.9; 3.1; 4.0|]
[|20.0; 3.0; 4.0; 4.0|]
[|22.0; 7.0; 2.0; 3.0|]
[|21.0; 4.0; 3.0; 6.0|]
|]
let kmeans = new KMeans 5
let clusterModel = kmeans.Learn vals
let clusters = clusterModel.Decide vals
Могу ли я рассчитать частичное членство с помощью стандартного алгоритма KMeans
? Коллега предложил использовать среднее значение и дисперсии членов кластера для определения пропорционального членства, и сегодня я изучал нечеткие множества и их реализации для F#
. Например, вот некоторая документация по реализации Accord.net для нечетких множеств. Я могу перевести/выполнить пример для F#
, но на первый взгляд я не вижу простого способа получить данные из моего запуска Kmeans
выше, чтобы они соответствовали формату назначения частичного членства.
Вопросы:
Как бы я использовал среднее/дисперсию членов кластера для расчета частичного членства?
Есть ли простой способ рассчитать частичное членство с
KMeans
кластеризацией с библиотекой Accord.net?Алгоритм KMeans в Accord.net прост в реализации; должен ли я потратить некоторое время, пытаясь изучить этот метод кластеризации/членства для решения моей проблемы, вместо того, чтобы пытаться заставить Kmeans кластеризоваться в соответствии с моими потребностями?