Процедуры отображения

Для полноты картины ниже показаны некоторые упрощенные процедуры отображения. В пакете исходного кода эти процедуры посложнее. Если вы используете упрощенные процедуры, то должны будете модифицировать их вызовы в методе Main. Чтобы отобразить исходные данные, средние и центры масс, вы можете применить:

1. static void ShowMatrix(double[][] matrix)

2. {

3. for (int i = 0; i < numRows; ++i)

4. {

5. Console.Write("[" + i.ToString().PadLeft(2) + "] ");

6. for (int j = 0; j < matrix[i].Length; ++j)

7. Console.Write(matrix[i][j].ToString("F1") + " ");

8. Console.WriteLine("");

9. }

10. }

Для вывода массива clustering можно использовать:

1. static void ShowVector(int[] vector)

2. {

3. for (int i = 0; i < vector.Length; ++i)

4. Console.Write(vector[i] + " ");

5. Console.WriteLine("");

6. }

Чтобы показать выпадающие данные:

1. static void ShowVector(double[] vector)

2. {

3. for (int i = 0; i < vector.Length; ++i)

4. Console.Write(vector[i].ToString("F1") + " ");

5. Console.WriteLine("");

6. }

А для отображения исходных данных, сгруппированных по кластерам:

1. static void ShowClustering(double[][] rawData,

2. int numClusters, int[] clustering)

3. {

4. for (int k = 0; k < numClusters; ++k) // Каждый кластер

5. {

6. for (int i = 0; i < rawData.Length; ++i) // Каждая последовательность

7. if (clustering[i] == k)

8. {

9. for (int j = 0; j < rawData[i].Length; ++j)

10. Console.Write(rawData[i][j].ToString("F1") + " ");

11. Console.WriteLine("");

12. }

13. Console.WriteLine("");

14. }

15. }

Заключение

Кластеризация данных тесно связана с классификацией (категоризацией) данных, и эти концепции иногда путают. Кластеризация — это неконтролируемая методика, которая обеспечивает группирование элементов данных без предварительного знания того, что представляют собой эти группы. Кластеризация, как правило, является исследовательским процессом. Классификация, напротив, представляет собой контролируемую методику, которая требует спецификации известных групп в обучающих данных (training data), после чего каждая последовательность данных помещается в одну из этих групп. Классификация обычно применяется в целях прогнозирования.

Код и пояснения, представленные в этой статье, должны дать вам достаточно информации для экспериментов с кластеризацией k-средних, для создания обособленных полностью настраиваемых средств кластеризации или для добавления средств кластеризации в .NET-приложение, не полагающиеся ни на какие внешние зависимости. Существует много других алгоритмов кластеризации, помимо вычисления k-средних, и я представляю некоторые из них в будущих статьях, в том числе минимизацию энтропии данных, оценку категорий (category utility) и байесовский вывод (naive Bayes inference).

Джеймс Маккафри (Dr. James McCaffrey) — руководит в компании Volt Information Sciences Inc. повышением квалификации инженеров ПО из Microsoft, работающих в Редмонде (штат Вашингтон). Принимал участие в создании нескольких продуктов Microsoft, в том числе Internet Explorer и MSN Search. Автор книги «.NET Test Automation Recipes» (Apress, 2006). С ним можно связаться по адресу[email protected].

Выражаю благодарность за рецензирование статьи эксперту Даррену Герингу (Darren Gehring).

Наши рекомендации