1632
правки
Изменения
м
[[Файл:Confusion_matrix.png|500px]]
Здесь <math>a ( x )</math> — это ответ алгоритма на объекте, а <math>y </math> — истинная метка класса на этом объекте ().
Таким образом, ошибки классификации бывают двух видов: False Negative (FN) и False Positive (FP).
== Методы оценки качества кластеризации ==Здесь <math>a ( x )</math> — это ответ алгоритма на объекте, а <math>y </math> — истинная метка класса на этом объекте.Таким образом, ошибки классификации бывают двух видов: '''Метод оценки качества кластеризацииFalse Negative''' ('''FN''') и '''False Positive''' ('''FP'''). '''P''' означает что классификатор определяет класс объекта как положительный ('''N''' {{---}} отрицательный). '''T''' значит что класс предсказан правильно (соответственно '''F''' {{---}} неправильно). Каждая строка в матрице ошибок представляет спрогнозированный класс, а каждый столбец {{---}} инструментарий для количественной оценки результатов кластеризациифактический класс.
Принято выделять две группы методов оценки качества кластеризации: <font color="green"># код для матрицы ошибок</font> <font color="green">'''# Пример классификатора, способного проводить различие между всего лишь двумя</font> <font color="green">'''# классами, "пятерка" и "не пятерка" из набора рукописных цифр MNIST</font> '''import''' numpy '''as''' np* '''Внешниеfrom''' (англsklearn. datasets ''Internal'import') меры основаны на сравнении результата кластеризации с априори известным разделением на классы'' fetch_openml '''from''' sklearn. model_selection '''import''' cross_val_predict* '''from''Внутренние'sklearn.metrics '' (англ'import''' confusion_matrix '''from''' sklearn. linear_model '''import'''ExternalSGDClassifier mnist = fetch_openml('mnist_784', version=1) меры отображают качество кластеризации только по информации X, y = mnist["data"], mnist["target"] y = y.astype(np.uint8) X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:] y_train_5 = (y_train == 5) <font color="green"># True для всех пятерок, False для в данныхсех остальных цифр. Задача опознать пятерки</font> y_test_5 = (y_test == 5) sgd_clf = SGDClassifier(random_state=42)<font color="green"> # классификатор на основе метода стохастического градиентного спуска (англ. Stochastic Gradient Descent SGD)</font> sgd_clf.fit(X_train, y_train_5) <font color="green"># обучаем классификатор распозновать пятерки на целом обучающем наборе</font> <font color="green"># Для расчета матрицы ошибок сначала понадобится иметь набор прогнозов, чтобы их можно было сравнивать с фактическими целями</font> y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3) print(confusion_matrix(y_train_5, y_train_pred)) <font color="green"># array([[53892, 687], # [ 1891, 3530]])</font>
== Внешние меры оценки качества ==Данные меры используют дополнительные знания о кластеризуемом множествеБезупречный классификатор имел бы только истинно-положительные и истинно отрицательные классификации, так что его матрица ошибок содержала бы ненулевые значения только на своей главной диагонали (от левого верхнего до правого нижнего угла): распределение по кластерам, количество кластеров и т.д.
Пусть <math>p_{ij} = \dfrac{ n_{ij} }{ n }, p_{i} = \dfrac{ a_{i} }{ n }, p_{j} = \dfrac{ b_{j} }{ n } </math>Аккуратность (англ.Accuracy) ===
Также рассмотрим пары <math>(x_iИнтуитивно понятной, x_j)</math> из элементов кластеризуемого множества <math>X</math>. Подсчитаем количество пар, в которыхочевидной и почти неиспользуемой метрикой является ''accuracy'' — доля правильных ответов алгоритма:* Элементы принадлежат одному кластеру и одному классу {{---}} <math>TP</math>* Элементы принадлежат одному кластеру, но разным классам {{---}} <math>TN</math>* Элементы принадлежат разным кластерам, но одному классу {{---}} <math>FP</math>* Элементы принадлежат разным кластерам и разным классам {{---}} <math>FN</math>
=== Индекс Rand ===
Индекс Rand оценивает, насколько много из тех пар элементов, которые находились в одном классе, и тех пар элементов, которые находились в разных классах, сохранили это состояние после кластеризации алгоритмом.
Rand accuracy = \dfrac{TP+FNTN}{TP+TN+FP+FN}
Имеет область определения от 0 до 1, где 1 {{---}} полное совпадение кластеров с заданными классами, а 0 {{---}} отсутствие совпадений.
=== Индекс Adjusted Rand ===:<math>\overbrace{ARI}^\text{Adjusted Index} = \frac{ \overbrace{\sum_{ij} \binom{n_{ij}}{2}}^\text{Index} - \overbrace{Эта метрика бесполезна в задачах с неравными классами, что как вариант можно исправить с помощью [\sum_i \binom{a_i}{2} \sum_j \binom{b_j}{2}] / \binom{n}{2}}^\text{Expected Index} }{ \underbrace{\frac{1}{2} [\sum_i \binom{a_i}{2} + \sum_j \binom{b_j}{2}алгоритмы сэмплирования|алгоритмов сэмплирования]}_\text{Max Index} - \underbrace{[\sum_i \binom{a_i}{2} \sum_j \binom{b_j}{2}] / \binom{n}{2}}_\text{Expected Index} }</math>где <math>n_{ij}, a_i, b_j</math> {{---}} значения из таблицы сопряженностии это легко показать на примере.
В отличие от обычного [[{{NAMESPACE}}:{{PAGENAME}}#Индекс_Rand|индекса Rand]]Допустим, мы хотим оценить работу спам-фильтра почты. У нас есть 100 не-спам писем, 90 из которых наш классификатор определил верно (True Negative = 90, False Positive = 10), и 10 спам-писем, индекс Adjusted Rand может принимать отрицательные значения5 из которых классификатор также определил верно (True Positive = 5, если <math>Index < Expected Index</math>False Negative = 5).Тогда accuracy:
=== Индекс Жаккара (англ. Jaccard Index) ===
Индекс Жаккара похож на [[#Индекс_Rand|Индекс Rand]], только не учитывает пары элементов находящиеся в разные классах и разных кластерах (<math>FN</math>).
Jaccard accuracy = \dfrac{TP5+90}{TP5+TN90+FP10+5}= 86,4
Имеет область определения от 0 до 1, где 1 {{---}} полное совпадение кластеров с заданными классами, а 0 {{---}} отсутствие совпадений.
=== Индекс Фоулкса – Мэллова (англ. FowlkesОднако если мы просто будем предсказывать все письма как не-Mallows Index) ===спам, то получим более высокую ''аккуратность'':Индекс Фоулкса – Мэллова используется для определения сходства между двумя кластерами.
FM accuracy = \sqrt{ \dfrac{TP0+100}{TP0+TN} \cdot \dfrac{TP}{TP100+0+FP} 10}= 90,9
Более высокое значение индекса означает большее сходство между кластерами. Этот индекс также хорошо работает на зашумленных данных.
Чем больше значение меры {{---}} тем лучше=== Точность (англ.Precision) ===
=== Индекс Phi ===Классическая мера корреляции между двумя переменными:: <math>\Phi = \dfracТочностью (''precision'') называется доля правильных ответов модели в пределах класса {{ TP \times FN - TN \times FP --}{ (TP + TN)(TP + FP)(FN + FP)(FN + TN) }</math>это доля объектов действительно принадлежащих данному классу относительно всех объектов которые система отнесла к этому классу.
=== Minkowski Score ===
MS Precision = \dfrac{ \sqrt{ \sum_i \binom{a_iTP}{2} TP+ \sum_j \binom{b_i}{2} - 2\sum_{ij} \binom{ n_{ij} }{ 2 } } }{ \sqrt{ \sum_j \binom{b_i}{2} } FP}
=== Индекс Гудмэна-Крускала (англИменно введение ''precision'' не позволяет нам записывать все объекты в один класс, так как в этом случае мы получаем рост уровня ''False Positive''. Goodman-Kruskal Index) ===: <math>GK = \sum_i p_i(1 - \max_j \dfrac{ p_{ij} }{ p_i })</math>
Стоит отметитьПолнота {{---}} это доля истинно положительных классификаций. Полнота показывает, что если все кластера состоят из какую долю объектов одного класса, то энтропия равна 0реально относящихся к положительному классу, мы предсказали верно.
=== Purity ===
Чистота ставит в соответствие кластеру самый многочисленный в этом кластере класс.
P Recall = \sum_i p_i ( \max_j \dfrac{ p_{ij} TP}{ p_i TP+FN} )
Чистота находится в интервале [0Полнота (''recall'') демонстрирует способность алгоритма обнаруживать данный класс вообще. Имея матрицу ошибок, 1], причём значение = 1 отвечает оптимальной кластеризацииочень просто можно вычислить точность и полноту для каждого класса. Точность (''precision'') равняется отношению соответствующего диагонального элемента матрицы и суммы всей строки класса. Полнота (''recall'') {{---}} отношению диагонального элемента матрицы и суммы всего столбца класса.Формально:
=== F-мера ===
F-мера представляет собой гармоническое среднее между точностью (precision) и полнотой (recall).
F Precision_c = \sum_j p_j \max_i \big\lbrack 2 \dfrac{ p_{ij} }{ p_i } \dfrac{ p_A_{ijc,c} }{ p_j } \big/ (sum \dfraclimits_{ p_{ij} i=1}^{ p_i n} + \dfracA_{ p_{ij} c,i}{ p_j }) \big\rbrack
=== Variation of Information ===
Данная мера измеряет количество информации, потерянной и полученной при переходе из одного кластера в другой.
VI Recall_c = - \sum_i p_i \log p_i - \sum_i p_j log p_j - 2 \sum_i \sum_j p_dfrac{A_{ijc,c} }{\log sum \dfraclimits_{ p_i=1}^{ijn} A_{i,c}{ p_i p_j }
== Внутренние меры оценки качества ==Данные меры оценивают качество структуры кластеров опираясь только непосредственно на нее, не используя внешней информацииРезультирующая точность классификатора рассчитывается как арифметическое среднее его точности по всем классам. То же самое с полнотой. Технически этот подход называется '''macro-averaging'''.
Таким образом, необходимо минимизировать внутриклассовое расстояние, например, сумму квадратов отклонений:: <math>WSS = \sum \limits_{j=1}^{M} \sum \limits_{i = 1}^{|C_j|} F-мера (x_{ij} англ. F- \overline{x_j}score)^2=== ''Precision'' и ''recall'' не зависят, в отличие от ''accuracy'', от соотношения классов и потому применимы в условиях несбалансированных выборок.</math>Часто в реальной практике стоит задача найти оптимальный (для заказчика) баланс между этими двумя метриками. Понятно что чем выше точность и полнота, тем лучше. Но в реальной жизни максимальная точность и полнота не достижимы одновременно и приходится искать некий баланс. Поэтому, где <math>M</math> {{хотелось бы иметь некую метрику которая объединяла бы в себе информацию о точности и полноте нашего алгоритма. В этом случае нам будет проще принимать решение о том какую реализацию запускать в производство (у кого больше тот и круче). Именно такой метрикой является ''F-мера''. F--}} количество кластеровмера представляет собой [https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%B5_%D0%B3%D0%B0%D1%80%D0%BC%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5 гармоническое среднее] между точностью и полнотой. Она стремится к нулю, если точность или полнота стремится к нулю.
Поэтому здесь стоит задача максимизации суммы квадратов отклонений:: <math>BSS = n \cdot \sum \limits_{j=1}^{M} (\overline{x_{j}} - \overline{x})^2</math>Данная формула придает одинаковый вес точности и полноте, где <math>M</math> {{поэтому F-мера будет падать одинаково при уменьшении и точности и полноты. Возможно рассчитать ''F--}} количество кластеров.меру'' придав различный вес точности и полноте, если вы осознанно отдаете приоритет одной из этих метрик при разработке алгоритма:
=== Индекс Данна (англ. Dunn Index) ===
Индекс Данна имеет множество вариаций, оригинальная версия выглядит следующим образом:
D(C) F_β = \dfrac{ min_{c_k \in C} \{ min_{c_l \in C \setminus c_k} \{ \delta(c_k, c_l1+β^2) \} times precision \} times recall }{ max_{c_k \in C} \{ \Delta(c_k) β^2 \} } </math>,где:: <math>\delta</math> {{---}} межкластерное расстояние (оценка разделенияtimes precision), <math>\delta(c_k, c_l) = min_{x_i \in c_k, x_j \in c_l+ recall } \|x_i - x_j\|</math>,: <math>\Delta(c_k)</math> {{---}} диаметр кластера (оценка сплоченности), <math>\Delta(c_k) = max_{x_i,x_j \in c_k} \|x_i - x_j\|</math>.
=== Обобщенный Индекс Данна (gD31где <math>β</math> принимает значения в диапазоне <math>0<β<1</math> если вы хотите отдать приоритет точности, gD41, gD51, gD33, gD43, gD53) ===Все эти вариации являются комбинациями 3 вариантов вычисления оценки разделения а при <math>β>1</math> приоритет отдается полноте. При <math>\deltaβ=1</math> формула сводится к предыдущей и оценки компактности вы получаете сбалансированную F-меру (также ее называют <math>\DeltaF_1</math>).
Оценки разделения:
: <math>\delta^3(c_k, c_l) = \dfrac{1}{|c_k| * |c_l|} \sum_{x_i \in c_k} \sum_{x_j \in c_l} \|x_i - x_j\| </math>,
: <math>\delta^5(c_k''F-мера'' достигает максимума при максимальной полноте и точности, и близка к нулю, c_l) = \dfrac{1}{|c_k| + |c_l|} (\sum_{x_i \in c_k} \|x_i - \overline{c_k}\| + \sum_{x_j \in c_l} \|x_j - \overline{c_l}\|) </math>если один из аргументов близок к нулю.
Оценки компактности''F-мера'' является хорошим кандидатом на формальную метрику оценки качества классификатора. Она сводит к одному числу две других основополагающих метрики:точность и полноту. Имея "F-меру" гораздо проще ответить на вопрос: <math>\Delta^1(c_k) = \Delta(c_k) </math>,"поменялся алгоритм в лучшую сторону или нет?"
Обобщенный индекс Данна, как и обычный, должен возрастать вместе с улучшением качества кластеризации.=== ROC-кривая ===
=== Индекс S_Dbw ==='''Кривая рабочих характеристик''' (англ. '''Receiver Operating Characteristics curve'''). Основан на вычислении Евклидовой нормыИспользуется для анализа поведения классификаторов при различных пороговых значениях. Позволяет рассмотреть все пороговые значения для данного классификатора. Показывает долю ложно положительных примеров (англ. '''false positive rate, FPR''') в сравнении с долей истинно положительных примеров (англ. '''true positive rate, TPR''').
и стандартных отклонений: <math> TPR = \dfrac{TP}{TP+FN} = Recall</math>
: <math> stdev(C) = \dfracДоля '''FPR''' {1}{K}\sqrt{\sum_{c_k \in C---} \|\sigma(c_k)\|} </math>это пропорция отрицательных образцов, которые были некорректно классифицированы как положительные.
Сам индекс определяется формулой:<math> FPR = 1 - TNR</math>,
: <math> SDbw(C) = \dfracгде '''TNR''' {1}{K} \sum_{c_k \in C} \dfrac{\|\sigma(c_k)\|---}{\|\sigma(X)\|} + \dfrac{1}{Kдоля истинно отрицательных классификаций (K-1англ. '''Тrие Negative Rate''')} \sum_{c_k \in C} \sum_{c_l \in C \setminus c_k} \dfrac{den(c_k,c_l)}{max(den(c_k)представляющая собой пропорцию отрицательных образцов,den(c_l))} </math>которые были корректно классифицированы как отрицательные.
ЗдесьДоля '''TNR''' также называется '''специфичностью''' (англ. '''specificity'''). Следовательно, ROC-кривая изображает '''чувствительность''' (англ. '''seпsitivity'''), т.е. полноту, в сравнении с разностью '''1 - specificity'''.
: <math> denПрямая линия по диагонали представляет ROC-кривую чисто случайного классификатора. Хороший классификатор держится от указанной линии настолько далеко, насколько этовозможно (c_kстремясь к левому верхнему углу) = \sum_{x_i \in c_k} f(x_i, \overline{c_k}) </math>,.
: <math> denОдин из способов сравнения классификаторов предусматривает измерение '''площади под кривой''' (c_k, c_l) = \sum_англ. '''Area Under the Curve {x_i \in c_k \cup c_l} f(x_i, \dfrac{\overline{c_k---} + \overline{c_l}}{2}AUC'''). Безупречный классификатор будет иметь площадь под ROC-кривой ('''ROC-AUC''') </math>,равную 1, тогда как чисто случайный классификатор - площадь 0.5.
: <font color="green"># Код отрисовки ROC-кривой '''# На примере классификатора, способного проводить различие между всего лишь двумя классами '''# "пятерка" и "не пятерка" из набора рукописных цифр MNIST<math/font> f '''from''' sklearn.metrics '''import''' roc_curve '''import''' matplotlib.pyplot '''as''' plt '''import''' numpy '''as''' np '''from''' sklearn.datasets '''import''' fetch_openml '''from''' sklearn.model_selection '''import''' cross_val_predict '''from''' sklearn.linear_model '''import''' SGDClassifier mnist = fetch_openml(x_i'mnist_784', c_kversion=1) X, y = mnist["data"], mnist["target"] y = y.astype(np.uint8) X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:] y_train_5 = (y_train = 0 = 5) </mathfont color="green"># True для всех пятерок, если False для в сех остальных цифр. Задача опознать пятерки<math/font> \|x_i - \overline{c_k}\| y_test_5 = (y_test == 5) sgd_clf = SGDClassifier(random_state=42) <font color="green"> stdev# классификатор на основе метода стохастического градиентного спуска (CStochastic Gradient Descent SGD) </mathfont> и sgd_clf.fit(X_train, y_train_5) <mathfont color="green">1# обучаем классификатор распозновать пятерки на целом обучающем наборе</mathfont> в ином случае y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3) y_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3, method="decision_function") fpr, tpr, thresholds = roc_curve(y_train_5, y_scores) def plot_roc_curve(fpr, tpr, label=None): plt.plot(fpr, tpr, linewidth=2, label=label) plt.plot([0, 1], [0, 1], 'k--') # dashed diagonal plt.xlabel('False Positive Rate, FPR (1 - specificity)') plt.ylabel('True Positive Rate, TPR (Recall)') plt.title('ROC curve') plt.savefig("ROC.png") plot_roc_curve(fpr, tpr) plt.show()
Должен снижаться с улучшением кластеризации.=== Precison-recall кривая ===
=== Силуэт '''Чувствительность к соотношению классов.''' Рассмотрим задачу выделения математических статей из множества научных статей. Допустим, что всего имеется 1.000.100 статей, из которых лишь 100 относятся к математике. Если нам удастся построить алгоритм <math>a(англx)</math>, идеально решающий задачу, то его TPR будет равен единице, а FPR — нулю. Silhouette) =Рассмотрим теперь плохой алгоритм, дающий положительный ответ на 95 математических и 50.000 нематематических статьях. Такой алгоритм совершенно бесполезен, но при этом имеет TPR =0.95 и FPR = 0.05, что крайне близко к показателям идеального алгоритма.Значение силуэта показываетТаким образом, если положительный класс существенно меньше по размеру, то AUC-ROC может давать неадекватную оценку качества работы алгоритма, поскольку измеряет долю неверно принятых объектов относительно общего числа отрицательных. Так, насколько объект похож алгоритм <math>b(x)</math>, помещающий 100 релевантных документов на свой кластер позиции с 50.001-й по сравнению с другими кластерами50.101-ю, будет иметь AUC-ROC 0.95.
Оценка для всей кластерной структуры:: <math> Sil(С) = \dfrac{1}{N} \sum_{c_k \in C} \sum_{x_i \in c_k} \dfrac{ b(x_i, c_k) '''Precison- arecall (x_i, c_kPR) }{ max \{ a(x_iкривая.''' Избавиться от указанной проблемы с несбалансированными классами можно, c_k), b(x_i, c_k) \} }</math>,где:: <math>a(x_i, c_k) = \dfrac{1}{|c_k|} \sum_{x_j \in c_k} \|x_i перейдя от ROC- x_j\|</math> {{кривой к PR-кривой. Она определяется аналогично ROC--}} среднее расстояние от <math>x_i \in c_k</math> до других объектов из кластера <math>c_k</math> кривой, только по осям откладываются не FPR и TPR, а полнота (компактностьпо оси абсцисс),: <math>bи точность (x_i, c_kпо оси ординат) = min_{c_l \in C \setminus c_k } \{ \dfrac{1}{|c_l|} \sum_{x_j \in c_l} \|x_i . Критерием качества семейства алгоритмов выступает '''площадь под PR- x_j\| \}</math> {{---}} среднее расстояние от <math>x_i \in c_k</math> до объектов из другого кластера <math>c_l: k \neq l</math> кривой''' (отделимость)англ.Можно заметить, что : <math> '''Area Under the Curve — AUC-1 \le Sil(CPR''') \le 1</math>.Чем ближе данная оценка к 1, тем лучше.
Есть также упрощенная вариация силуэта[[Файл: <math>a(x_i, c_k)</math> и <math>b(x_i, c_k)</math> вычисляются через центры кластеровPR_curve.png]]
=== Индекс Дэвиcа-Болдуина (англ. Davies–Bouldin Index) ===Это, возможно, одна из самых используемых мер оценки Наиболее типичными мерами качества кластеризации.<br/>Она вычисляет компактность как расстояние от объектов кластера до их центроидов, а отделимость - как расстояние между центроидами.: <math>DB(C) = \dfrac{1}{K} \sum \limits_{c_k \in C} \max \limits_{c_l \in C \setminus c_k} \Big\{ \dfrac{ S(c_k)+S(c_l) }{ \| \overline{c_k} - \overline{c_l} \| } \Big\}</math>,где:: <math>S(c_k) = \dfrac{ 1 }{ |c_k| } \sum \limits_{x_i \in c_k} \|x_i - \overline{c_k}\|</math> Существует еще одна вариация данной меры, которая была предложена автором вместе с основной версией:: <math>DB^*(C) = \dfrac{1}{K} \sum \limits_{c_k \in C} \dfrac{ \max \limits_{c_l \in C \setminus c_k} \{ S(c_k)+S(c_l) \} }{ \min \limits_{c_l \in C \setminus c_k} \{ \| \overline{c_k} - \overline{c_l} \| \} }</math>в задачах регрессии являются
C-индекс и индекс Дэвиcа-Болдуина должны минимизироваться для роста кластеризации=== Средняя квадратичная ошибка (англ.Mean Squared Error, MSE) ===
=== Score function ===Индекс''MSE'' применяется в ситуациях, когда нам надо подчеркнуть большие ошибки и выбрать модель, основанный на суммированиикоторая дает меньше больших ошибок прогноза. Здесь оценка компактности выражается Грубые ошибки становятся заметнее за счет того, что ошибку прогноза мы возводим в дистанции от точек кластера до его центроидаквадрат. И модель, а оценка разделимости — в дистанции от центроидов кластеров до глобального центроидакоторая дает нам меньшее значение среднеквадратической ошибки, можно сказать, что что у этой модели меньше грубых ошибок.
SF(C) MSE = 1 - \dfrac{ 1 }{ e^{e^{bcd(C) + wcd(C)}} n}</math>,где:: <math>bcd(C) = \dfrac{ \sum \limits_{c_k \in C} |c_k| \cdot \|\overline{c_k} - \overline{X}\| }{ N \times K }</math>,: <math>wcd(C) i= \sum \limits_{c_k \in C} \dfrac{ 1 }^{ |c_k| n} \sum \limits_{x_i \in c_k} \|(a(x_i ) - \overline{c_k}\|y_i)^2</math> и
Чем больше данный индекс=== Cредняя абсолютная ошибка (англ. Mean Absolute Error, тем выше качество.MAE) ===
=== Индекс Gamma ===
G(C) MAE = \dfrac{ 1}{n}\sum \sum_limits_{c_k \in Ci=1} \sum_^{x_i,x_j \in c_kn} |c_k| \cdot dla(x_i, x_j) }{ n_w (\binom{N}{2} - n_w) }y_i|
где:: <math>dl(x_iСреднеквадратичный функционал сильнее штрафует за большие отклонения по сравнению со среднеабсолютным,x_j)</math> {{---}} число пар <math>(x_kи поэтому более чувствителен к выбросам. При использовании любого из этих двух функционалов может быть полезно проанализировать, x_l) \in X</math> такихкакие объекты вносят наибольший вклад в общую ошибку — не исключено, что (1) <math>x_k</math> и <math>x_l</math> принадлежат разным кластерам, и (2) <math>\|x_k - x_l\| < \|x_i - x_j\|</math>,: <math>n_w = \sum_{c_k \in C} \binom{|c_k|}{2}</math>на этих объектах была допущена ошибка при вычислении признаков или целевой величины.
CS(C) R^2 = 1 - \dfrac{\sum_{c_k \in C} sum \limits_{ i=1 / |c_k| \sum_{x_i \in c_k} \max_^{x_j \in c_kn}\{\|(a(x_i ) - x_j\|\} \}y_i)^2}{\sum_{c_k sum \in C} \min_limits_{c_l \in C \setminus c_ki=1} \^{\|\overline{c_k} - \overline{c_l}\| \}n}</math>. Чем меньше значение данного индекса, тем выше качество кластеризации. === Индекс Sym ===: <math>Sym(C) = \dfrac {\max_{c_k, c_l \in C} \{\|\overline{c_k} y_i - \overline{c_l}\|\y}}{K\sum_{c_k \in C}\sum_{x_i \in c_k} \overset{\ast}{d_{ps}}(x_i, c_k)^2}</math>. Здесь <math>\overset{\ast}{d_{ps}}(x_i, c_k)</math> — дистанция симметрии для точки <math>x_i</math> из кластера <math>c_k</math>. Чем выше данное значение, тем лучше. === Индексы SymDB, SymD, Sym33 ===Модифицируют оценку компактности для индексов Дэвиса-Боулдина, Данна и gD33 соответственно. SymDB вычисляется аналогично DB с изменением вычисления <math>S</math> на: : <math> S(c_k) = \dfrac{1}{|c_k| \sum_{x_i \in c_k} \overset{\ast}{d_{ps}}(x_i, c_k)} </math>.
Данная оценка должна уменьшаться для улучшения Коэффициент детерминации измеряет долю дисперсии, объясненную моделью, в общей дисперсии целевой переменной. Фактически, данная мера качества кластеризации— это нормированная среднеквадратичная ошибка. Если она близка к единице, то модель хорошо объясняет данные, если же она близка к нулю, то прогнозы сопоставимы по качеству с константным предсказанием.
В SymD переопределена функция <math>\Delta</math>: : <math> \Delta(c_k) = \max_{x_i \in c_k} \{\overset{\ast}{d_{ps}}== Средняя абсолютная процентная ошибка (x_i, c_k)\} </math>англ. в Sym33 аналогично SymD переопределена <math>\Delta</math>: : <math> \Delta(c_k) = \dfrac{2}{|c_k| \sum_{x_i \in c_k} \overset{\ast}{d_{ps}}(x_iMean Absolute Percentage Error, c_kMAPE)} </math>. Последние две оценки должны расти для улучшения качества кластеризации. === Negentropy increment ===В отличие от подавляющего большинства других оценок, не основывается на сравнении компактности и разделимости. Определяется следующим образом:
NI(C) MAPE = 100\% \times \dfrac{1}{2n} \sum_sum \limits_{c_k \in Ci=1} p(c_k)log|cov_^{c_kn}| - \dfrac{1|y_i - a(x_i)|}{2}log|cov_Xy_i| - \sum_{c_k \in C} p(c_k)log p(c_k)</math>.
Здесь <math>p(c_k) Это коэффициент, не имеющий размерности, с очень простой интерпретацией. Его можно измерять в долях или процентах. Если у вас получилось, например, что MAPE= |c_k| / N</math>11.4%, то это говорит о том, <math>|cov_{c_k}|</math> - определитель ковариационной матрицы кластера <math>c_k</math>что ошибка составила 11, <math>|cov_X|</math> - определитель ковариационной матрицы всего датасета4% от фактических значений.Основная проблема данной ошибки — нестабильность.
Данная оценка должна уменьшаться пропорционально росту качества кластеризации.=== Индекс SV Корень из средней квадратичной ошибки (англ. Root Mean Squared Error, RMSE) ===Одна из самых новых из рассматриваемых в данном разделе оценок. Измеряет разделимость по дистанции между ближайшими точка кластеров, а компактность — по расстоянию от пограничных точек кластера до его центроида.
SV(C) RMSE = \dfracsqrt{\sum_dfrac{c_k \in C1} \min_{c_l \in C \setminus c_kn} \{sum \|\overlinelimits_{c_ki=1} - \overline^{c_ln}\|\}}{\sum_{c_k \in C} 10 / |c_k| \sum \max_{(a(x_i \in c_k}(0.1 * |c_k|) * \|\overline{x_i} - \overline{c_k}\|y_i)^2}</math>.
Данная оценка должна увеличиватьсяПримерно такая же проблема, как и в MAPE: так как каждое отклонение возводится в квадрат, любое небольшое отклонение может значительно повлиять на показатель ошибки. Стоит отметить, что существует также ошибка MSE, из которой RMSE как раз и получается путем извлечения корня.
OS(C) SMAPE = \dfrac{\sum_1}{c_k n}\in C} sum \sum_limits_{x_i \in c_ki=1} ov(x_i, c_k)^{n}{\sum_dfrac{c_k 2 \in C} 10 / times |c_ky_i - a(x_i)| \sum \max_}{x_i \in c_k}(0.1 * |c_ky_i|) * \+ |\overline{a(x_i} - \overline{c_k}\)|}</math>.
Где=== Средняя абсолютная масштабированная ошибка (англ. Mean absolute scaled error, MASE) ===
при <math> \dfrac{b(x_i''MASE'' является очень хорошим вариантом для расчета точности, c_k) так как сама ошибка не зависит от масштабов данных и является симметричной: то есть положительные и отрицательные отклонения от факта рассматриваются в равной степени.Обратите внимание, что в ''MASE'' мы имеем дело с двумя суммами: та, что в числителе, соответствует тестовой выборке, та, что в знаменателе - a(x_iобучающей. Вторая фактически представляет собой среднюю абсолютную ошибку прогноза. Она же соответствует среднему абсолютному отклонению ряда в первых разностях. Эта величина, c_k)}{b(x_iпо сути, c_k) + a(x_iпоказывает, c_k)} < 0насколько обучающая выборка предсказуема.4 </math>Она может быть равна нулю только в том случае, когда все значения в обучающей выборке равны друг другу, что соответствует отсутствию каких-либо изменений в ряде данных, ситуации на практике почти невозможной. Кроме того, если ряд имеет тенденцию к росту либо снижению, его первые разности будут колебаться около некоторого фиксированного уровня. В результате этого по разным рядам с разной структурой, знаменатели будут более-менее сопоставимыми. Всё это, конечно же, является очевидными плюсами ''MASE'', так как позволяет складывать разные значения по разным рядам и <math>0</math> в ином случаеполучать несмещённые оценки.
Функции <math>a</math> Недостаток ''MASE'' в том, что её тяжело интерпретировать. Например, ''MASE''=1.21 ни о чём, по сути, не говорит. Это просто означает, что ошибка прогноза оказалась в 1.21 раза выше среднего абсолютного отклонения ряда в первых разностях, и <math>b</math> определены следующим образом:ничего более.
: <math>a(x_i, c_k) = \dfrac{1}{|c_k|\sum_{x_j \in c_k}\|x_i = Кросс- x_j\|}</math>.валидация ==
: <math>b(x_i, c_k) = \dfrac{1}{Хороший способ оценки модели предусматривает применение [[Кросс-валидация|c_k|\sum_{x_j \notin c_k}\ \minкросс-валидации]] (|c_kcкользящего контроля или перекрестной проверки)\|x_i - x_j\|}</math>.
Данная оценка, как В этом случае фиксируется некоторое множество разбиений исходной выборки на две подвыборки: обучающую и предыдущаяконтрольную. Для каждого разбиения выполняется настройка алгоритма по обучающей подвыборке, должна возрастатьзатем оценивается его средняя ошибка на объектах контрольной подвыборки. Оценкой скользящего контроля называется средняя по всем разбиениям величина ошибки на контрольных подвыборках.
rollbackEdits.php mass rollback
== Оценки качества классификации ==
=== Матрица ошибок (англ. Сonfusion matrix) === Перед переходом к самим метрикам необходимо ввести важную концепцию для описания этих метрик в терминах ошибок классификации — [[матрица ошибок|confusion matrix]] (матрица ошибок).
Допустим, что у нас есть два класса <math>y = \{ 0, 1 \}</math> и алгоритм, предсказывающий принадлежность каждого объекта одному из классов.
Рассмотрим пример. Пусть банк использует систему классификации заёмщиков на кредитоспособных и некредитоспособных. При этом первым кредит выдаётся, а вторые получат отказ. Таким образом, обнаружение некредитоспособного заёмщика (<math>y = 1 </math>) можно рассматривать как "сигнал тревоги", сообщающий о возможных рисках.
Любой реальный классификатор совершает ошибки. В нашем случае таких ошибок может быть две:
* Некредитоспособный заёмщик распознаётся как кредитоспособный и ему ошибочно выдаётся кредит. Данный случай можно рассматривать как "пропуск цели".
Несложно увидеть, что эти ошибки неравноценны по связанным с ними проблемам. В случае "ложной тревоги" потери банка составят только проценты по невыданному кредиту(только упущенная выгода). В случае "пропуска цели" можно потерять всю сумму выданного кредита. Поэтому системе важнее не допустить "пропуск цели", чем "ложную тревогу".
Поскольку с точки зрения логики задачи нам важнее правильно распознать некредитоспособного заёмщика с меткой <math>y = 1 </math>, чем ошибиться в распознавании кредитоспособного, будем называть соответствующий исход классификации положительным (заёмщик некредитоспособен), а противоположный - отрицательным (заемщик кредитоспособен <math>y = 0 </math>). Тогда возможны следующие исходы классификации:
* Некредитоспособный заёмщик классифицирован как некредитоспособный, т.е. положительный класс распознан как положительный. Наблюдения, для которых это имеет место называются '''истинно-положительными ''' ([[true positive]] '''True Positive''' {{- --}} '''TP''').* Кредитоспособный заёмщик классифицирован как кредитоспособный, т.е. отрицательный класс распознан как отрицательный. Наблюдения, которых это имеет место, называются '''истинно отрицательными ''' ([[true negative]] '''True Negative''' {{--- }} '''TN''').* Кредитоспособный заёмщик классифицирован как некредитоспособный, т.е. имела место ошибка, в результате которой отрицательный класс был распознан как положительный. Наблюдения, для которых был получен такой исход классификации, называются '''ложно-положительными ''' ([[false positive]] '''False Positive''' {{--- }} '''FP'''), а ошибка классификации называется '''ошибкой I рода'''.* Некредитоспособный заёмщик распознан как кредитоспособный, т.е. имела место ошибка, в результате которой положительный класс был распознан как отрицательный. Наблюдения, для которых был получен такой исход классификации, называются '''ложно-отрицательными ''' ([[false negative]] '''False Negative''' {{--- }} '''FN'''), а ошибка классификации называется '''ошибкой II рода'''.
Таким образом, ошибка I рода, или ложно-положительный исход классификации, имеет место, когда отрицательное наблюдение распознано моделью как положительное. Ошибкой II рода, или ложно-отрицательным исходом классификации, называют случай, когда положительное наблюдение распознано как отрицательное. Поясним это с помощью матрицы ошибок классификации:
: {| class="wikitable" style="text-align: center"||<math>y = 1</math>|<math>y = 0</math>|-|<math>a ( x ) = 1</math>|Истинно-положительный ('''Проблема оценки качества в [[КластеризацияTrue Positive — TP''')|задаче кластеризации]]Ложно-положительный ('''False Positive — FP''' трудноразрешима, как минимум, по двум причинам:)* [[Кластеризация#Теорема невозможности Клейнберга|Теорема невозможности Клейнберга]] {{-|<math>a ( x ) = 0</math>|Ложно-отрицательный ('''False Negative — FN''')|Истинно-отрицательный ('''True Negative — TN''')|}} не существует оптимального алгоритма кластеризации.* Многие алгоритмы кластеризации не способны определить настоящее количество кластеров в данных. Чаще всего количество кластеров подается на вход алгоритма и подбирается несколькими запусками алгоритма.
'''import''' numpy '''as''' np '''from''' sklearn.datasets '''import''' fetch_openml '''from''' sklearn.metrics '''import''' confusion_matrix mnist =fetch_openml('mnist_784', version== Обозначения ===1)Дано множество <math>S</math> из <math>n</math> элементов X, разделение на классы <math>X y = \{ X_1mnist["data"], X_2mnist["target"] y = y.astype(np.uint8) X_train, \ldots X_test, X_r \}</math>y_train, и полученное разделение на кластеры <math>Y y_test = \{ Y_1, Y_2, \ldots , Y_s \}</math>X[:60000], совпадения между <math>X</math> и <math>Y</math> могут быть отражены в таблице сопряженности <math>\left[n_{ij}\right60000:]</math>, где каждое <math>n_{ij}</math> обозначает число объектовy[:60000], входящих как в y[60000:] y_train_5 = (y_train == 5) <math>X_i</mathfont color="green"># True для всех пятерок, так и False для в <math>Y_jсех остальных цифр. Задача опознать пятерки</mathfont> : y_test_5 = (y_test == 5) y_train_perfect_predictions = y_train_5 <mathfont color="green">n_{ij}=|X_i \cap Y_j|# притворись, что мы достигли совершенства</mathfont>.: print(confusion_matrix(y_train_5, y_train_perfect_predictions)) <mathfont color="green">\begin{# array}{c|cccc|c}([[54579, 0],{{} \atop X}\!\diagdown\!^Y &Y_1&Y_2&\ldots&Y_s&\text{Sums}\\\hlineX_1&n_{11}&n_{12}&\ldots&n_{1s}&a_1\\X_2&n_{21}&n_{22}&\ldots&n_{2s}&a_2\\\vdots&\vdots&\vdots&\ddots&\vdots&\vdots\\X_r&n_{r1}&n_{r2}&\ldots&n_{rs}&a_r\\\hline\text{Sums}&b_1&b_2&\ldots&b_s&n\end{array} # [ 0, 5421]])</mathfont>
: <math>
</math>
: <math>
</math>
: <math>
</math>
При этом, наша модель совершенно не обладает никакой предсказательной силой, так как изначально мы хотели определять письма со спамом. Преодолеть это нам поможет переход с общей для всех классов метрики к отдельным показателям качества классов. <font color="green"># код для для подсчета аккуратности:</font> <font color== Hubert Г statistic ===Данная мера отражает среднее расстояние "green">'''# Пример классификатора, способного проводить различие между объектами разных кластеров:всего лишь двумя: '''# классами, "пятерка" и "не пятерка" из набора рукописных цифр MNIST<math/font>Г '''import''' numpy '''as''' np '''from''' sklearn.datasets '''import''' fetch_openml '''from''' sklearn.model_selection '''import''' cross_val_predict '''from''' sklearn.metrics '''import''' accuracy_score '''from''' sklearn.linear_model '''import''' SGDClassifier mnist = fetch_openml('mnist_784', version= \dfrac{1}{M} \sum \limits_{i) X, y =1}^{N-1} \sum \limits_{imnist["data"], mnist["target"] y =i+1}^{N} Py.astype(inp.uint8) X_train, j) \cdot QX_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:] y_train_5 = (i, jy_train == 5)<font color="green"> # True для всех пятерок,False для в сех остальных цифр. Задача опознать пятерки</mathfont>где y_test_5 = (y_test == 5) sgd_clf = SGDClassifier(random_state=42) <mathfont color="green">M = n*# классификатор на основе метода стохастического градиентного спуска (n-1Stochastic Gradient Descent SGD)/2</mathfont> sgd_clf.fit(X_train, y_train_5) <mathfont color="green">P(i, j)# обучаем классификатор распозновать пятерки на целом обучающем наборе</mathfont> {{---}} матрица близости y_train_pred = cross_val_predict(sgd_clf, аX_train, y_train_5, cv=3): <mathfont color="green">Q# print(confusion_matrix(iy_train_5, jy_train_pred)) = \begin{cases} 0# array([[53892, 687] # [ 1891, & \mbox{если x3530]])</font> print(iaccuracy_score(y_train_5, y_train_pred)) и x<font color="green"> # == (j53892 + 3530) лежат в одном кластере} \\ 1, / (53892 + 3530 & \mbox{в другом случае } \\\end{cases}+ 1891 +687)</mathfont>Можно заметить, что два объекта влияют на <mathfont color="green">Г# 0.9570333333333333</mathfont>, только если они находятся в разных кластерах.
: <math>
</math>
=== Entropy =Полнота (англ. Recall) ==Энтропия измеряет "чистоту" меток классов:: <math>E = - \sum_i p_i ( \sum_j \dfrac{ p_{ij} }{ p_i } log( \dfrac{ p_{ij} }{ p_i } ) )</math>
: <math>
</math>
: <math>
</math>
: <math>
</math>
<font color="green"># код для для подсчета точности и полноты: '''# Пример классификатора, способного проводить различие между всего лишь двумя '''# классами, "пятерка" и "не пятерка" из набора рукописных цифр MNIST</font> '''import''' numpy '''as''' np '''from''' sklearn.datasets '''import''' fetch_openml '''from''' sklearn.model_selection '''import''' cross_val_predict '''from''' sklearn.metrics '''import''' precision_score, recall_score '''from''' sklearn.linear_model '''import''' SGDClassifier mnist =fetch_openml('mnist_784', version= Компактность кластеров 1) X, y = mnist["data"], mnist["target"] y = y.astype(англnp. Cluster Cohesionuint8) X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:] y_train_5 = (y_train == 5) <font color="green"># True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки</font> y_test_5 =(y_test ==5)Идея данного sgd_clf = SGDClassifier(random_state=42)<font color="green"> # классификатор на основе метода в томстохастического градиентного спуска (Stochastic Gradient Descent SGD)</font> sgd_clf.fit(X_train, y_train_5) <font color="green"># обучаем классификатор распозновать пятерки на целом обучающем наборе</font> y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3) <font color="green"># print(confusion_matrix(y_train_5, y_train_pred)) # array([[53892, 687] # [ 1891, 3530]])</font> print(precision_score(y_train_5, что чем ближе друг к другу находятся объекты внутри кластеровy_train_pred)) <font color="green"># == 3530 / (3530 + 687)</font> print(recall_score(y_train_5, тем лучше разделениеy_train_pred)) <font color="green"># == 3530 / (3530 + 1891)</font> <font color="green"># 0.8370879772350012 # 0.6511713705958311</font>
: <math> F === Отделимость кластеров (англ. Cluster Separation) ===В данном случае идея противоположная \dfrac{2 \times precision \times recall }{---}precision + recall } чем дальше друг от друга находятся объекты разных кластеров, тем лучше. </math>
: <math>
<div><ul> <li style="display: inline-block;"> [[Файл:F_balanc.jpg|thumb|none|450px|Рис.1 Сбалансированная F-мера, <math>β=1</math>]] </li><li style="display: inline-block;"> [[Файл: F_prior_Prec.jpg|thumb|none|450px|Рис.2 F-мера c приоритетом точности, <math>\deltaβ^4(c_k, c_l) 2= \|\overlinedfrac{c_k1 } - \overline{c_l4 }\</math>]] </li><li style="display: inline-block;"> [[Файл:F_prior_Recal.jpg|thumb|none|450px| Рис.3 F-мера c приоритетом полноты, <math>β^2=2</math>,]] </li></ul></div>
<font color="green"># код для подсчета метрики F-mera: '''# Пример классификатора, способного проводить различие между всего лишь двумя '''# классами, "пятерка" и "не пятерка" из набора рукописных цифр MNIST<math/font>\Delta^ '''import''' numpy '''as''' np '''from''' sklearn.datasets '''import''' fetch_openml '''from''' sklearn.model_selection '''import''' cross_val_predict '''from''' sklearn.linear_model '''import''' SGDClassifier '''from''' sklearn.metrics '''import''' f1_score mnist = fetch_openml('mnist_784', version=1) X, y = mnist["data"], mnist["target"] y = y.astype(np.uint8) X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:] y_train_5 = (y_train == 5)<font color="green"> # True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки</font> y_test_5 = (y_test == 5) sgd_clf = SGDClassifier(random_state=42)<font color="green"> # классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)</font> sgd_clf.fit(X_train, y_train_5) <font color="green"># обучаем классификатор распознавать пятерки на целом обучающем наборе</font> y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3) print(c_kf1_score(y_train_5, y_train_pred) ) <font color= \dfrac{2}{|c_k|} \sum_{x_i \in c_k} \|x_i - \overline{c_k}\| "green"># 0.7325171197343846</mathfont>.
[[Файл: <math>\ \|x\| = (x^Tx)^(1/2) </math>ROC_2.png]]
: <math> \sigma(X) FPR = \dfrac{1}{|X|} \sum_{x_i \in XFP} (x_i - \overline{xFP+TN}) ^ 2 </math>,
<font color="green"># Код отрисовки Precison-recall кривой '''# На примере классификатора, способного проводить различие между всего лишь двумя классами '''# "пятерка" и "не пятерка" из набора рукописных цифр MNIST</font> '''from''' sklearn.metrics '''import''' precision_recall_curve '''import''' matplotlib.pyplot '''as''' plt '''import''' numpy '''as''' np '''from''' sklearn.datasets '''import''' fetch_openml '''from''' sklearn.model_selection '''import''' cross_val_predict '''from''' sklearn.linear_model '''import''' SGDClassifier mnist =fetch_openml('mnist_784', version= Индекс Calinski–Harabasz 1) X, y =mnist["data"], mnist["target"] y =y.astype(np.uint8) X_train, X_test, y_train, y_test =X[:60000], X[60000:], y[:60000], y[60000:]: y_train_5 = (y_train == 5) <font color="green"># True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки<math/font>CH y_test_5 = (Cy_test == 5) sgd_clf = \dfrac{ N-K }{ K-1 } \cdot \dfrac{ \sum_{c_k \in C} |c_k| \cdot \| \overline{c_k} - \overline{X} \| }{ \sum_{c_k \in C} \sum_{ x_i \in c_k } \| x_i - \overline{c_k} \| }SGDClassifier(random_state=42)<font color="green"> # классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)</font> sgd_clf.fit(X_train, y_train_5) <font color="green"># обучаем классификатор распозновать пятерки на целом обучающем наборе</mathfont>Компактность основана на расстоянии от точек кластера до их центроидов y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3) y_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3, method="decision_function") precisions, recalls, thresholds = precision_recall_curve(y_train_5, y_scores) def plot_precision_recall_vs_threshold(precisions, recalls, thresholds): plt.plot(recalls, precisions, а разделимость linewidth=2) plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision- на расстоянии от центроид кластеров до глобального центроидаRecall curve') plt.savefig("Precision_Recall_curve. Должен возрастатьpng") plot_precision_recall_vs_threshold(precisions, recalls, thresholds) plt.show()
==Оценки качества регрессии = Индекс C ===Индекс C представляет собой нормализованную оценку компактности:: <math>CI(C) = \dfrac{ S(C) - S_{min}(C) }{ S_{max}(C) - S_{min}(C)}</math>,где:: <math>S(C) = \sum \limits_{c_k \in C} \sum \limits_{x_i, x_j \in c_k} \| x_i - x_j \|</math>,: <math>S_{min}(C) (S_{max}(C))</math> - сумма <math>\dfrac{ |c_k|\cdot(|c_k| - 1) }{2}</math> минимальных (максимальных) расстояний между парами всех объектов во всем датасете.
: <math>
: <math>
</math>
Среднеквадратичная ошибка подходит для сравнения двух моделей или для контроля качества во время обучения, но не позволяет сделать выводов о том, на сколько хорошо данная модель решает задачу. Например, MSE === Индекс COP ===В данной мере компактность вычисляется как расстояние 10 является очень плохим показателем, если целевая переменная принимает значения от точек кластера 0 до его центроиды1, а разделимость основана на расстоянии до самого отдаленного соседа.: <math>COPи очень хорошим, если целевая переменная лежит в интервале (C10000, 100000) = \dfrac. В таких ситуациях вместо среднеквадратичной ошибки полезно использовать коэффициент детерминации {1}{N} \sum \limits_{c_k \in C} |c_k| \dfrac{ 1/|c_k| \sum_{x_i \in c_k} \| x_i - \overline{c_k--} \| }{ \min_{x_i \notin c_k} \max_{x_j \in c_k} \| x_i - x_j\| }<math>R^2</math>.
=== Индекс CS Коэффициент детерминации ===Был предложен в области сжатия изображений, но может быть успешно адаптирован для любого другого окружения. Он оценивает компактность по диаметру кластера, а отделимость — как дистанцию между ближайшими элементами двух кластеров.
: <math>
: <math>
: <math>
=== Индекс OS Cимметричная MAPE (англ. Symmetric MAPE, SMAPE) ===Отличается от предыдущей оценки усложненным способом вычисления оценки разделимости.
: <math>
: <math>ov(x_i, c_k) MASE = \dfrac{a(x_i, c_k)\sum \limits_{i=1}^n |Y_i - e_i|}{b(x_i, c_k)\frac{n}{n-1}\sum \limits_{i=2}^n | Y_i-Y_{i-1}|}</math>.
== Сравнение Примечания ==Не существует лучшего метода оценки качества кластеризации. Однако, в рамках исследования<ref># [https://www.sciencedirectcoursera.comorg/sciencelecture/articlevvedenie-mashinnoe-obuchenie/abs/pii/S003132031200338X An extensive comparative study of cluster validity indicesotsienivaniie-kachiestva-xCdqN]</ref> была предпринята попытка сравнить существующие меры Лекция "Оценивание качества" на различных данныхwww. Полученные результаты показали, что на искусственных датасетах наилучшим образом себя проявили индексы <math>Silhouette</math>, <math>DB^*</math> и <math>Calinski-Harabasz</math>. На реальных датасетах лучше всех показал себя <math>Score-function</math>coursera.org В Таблице 1 приведены оценки сложности мер качества кластеризации (<math>n</math> — число объектов в рассматриваемом наборе данных)# [https: {|class="wikitable" style="margin:auto; clear:both; |+ Таблица 1 — Оценка сложности для 19 мер качества кластеризации. |<math>Davies-Bouldin</math> |<math>O(n\log{n})</math> |<math>CS<stepik.org/math> |<math>O(n\log{n})<lesson/math> |- |<math>Dunn<209691/math> |<math>O(n^2)<step/math>8?unit=183195] Лекция на www.stepik.org о кросвалидации |<math>DB^*<# [https:/math> |<math>O(n\log{n})</math> |- |<math>Calinski-Harabasz<stepik.org/math> |<math>O(n\log{n})<lesson/math> |<math>SF<209692/math> |<math>O(n)<step/math>5?unit=183196] Лекция на www.stepik.org о метриках качества, Precison и Recall |- |<math>Sillhouette<# [https:/math> |<math>O(n^2)</math> |<math>Sym<stepik.org/math> |<math>O(n^2)<lesson/math> |- |<math>gD31<209692/math> |<math>O(n^2)<step/math> |<math>COP</math> |<math>O(n^2)</math> |- |<math>gD41</math> |<math>O(n^2)</math> |<math>SV</math> |<math>O(n\log{n})</math> |- |<math>gD51</math> |<math>O(n^2)</math> |<math>OS</math> |<math>O(n^2\log{n})</math> |- |<math>gD33</math> |<math>O(n^2)</math> |<math>SDbw</math> |<math>O(n\log{n})</math> |7?unit=183196] Лекция на www.stepik.org о метриках качества, F-мера |<math>gD43</math> |<math>O(n^2)</math> |<math>C-index</math> |<math>O(n^2\log{n})</math> |- |<math>gD53</math> |<math>O(n\log{n})</math> | | |} Из всех рассмотренных мер, меры <math>Sym</math>, <math>gD41</math>, <math>OS</math> и <math>COP</math> наиболее полно соответствуют когнитивному представлению асессоров о качестве кластеризации<ref># [https://ieeexplore.ieeestepik.org/abstractlesson/document209692/7891855 Towards cluster validity index evaluation and selectionstep/8?unit=183196]</ref>Лекция на www.stepik.org о метриках качества, примеры
== См. также ==
* [[КластеризацияОценка качества в задаче кластеризации]]* [[Оценка качества в задачах классификации и регрессии]Кросс-валидация]<sup>[на 28.01.19 не создан]</sup>
== Источники информации ==
# [https://encompscicenter.wikipedia.orgru/media/wikicourses/Category:Clustering_criteria Wikipedia {{2018-autumn/spb-recommendation/materials/lecture02-}} Category:Clustering criterialinregr_1.pdf]Соколов Е.А. Лекция линейная регрессия# [http://synthesis.ipiwww.acmachinelearning.ru/sigmodwiki/seminarimages/sivogolovko201111245/59/PZAD2016_04_errors.pdf Сивоголовко Е] - Дьяконов А. В. Методы оценки Функции ошибки / функционалы качества четкой кластеризации]# [httphttps://wwwforecasting.cssvetunkov.kent.eduru/etextbook/~jinforecasting_toolbox/DM08models_quality/ClusterValidation.pdf Cluster Validation]- Оценка качества прогнозных моделей# [https://linkshtem.springer.comru/article%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D0%B0/10.1023/A] - HeinzBr Ошибка прогнозирования:1012801612483 Halkidiвиды, M.формулы, Batistakis, Yпримеры# [https://habr., Vazirgiannis, M., 2001. On clustering validation techniques. Journal of intelligent information systems, 17(2-3), pp.107com/ru/company/ods/blog/328372/] -145.]egor_labintcev Метрики в задачах машинного обучения# [https://eurekamaghabr.com/pdfru/post/19657/] - grossu Методы оценки качества прогноза# [http:/008/008337083www.machinelearning.pdf Pal, Nru/wiki/index.Rphp?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F] - К., Biswas, JВ.Воронцов, 1997Классификация# [http://www. Cluster validation using graph theoretic conceptsmachinelearning. Pattern Recognition, 30(6), ppru/wiki/index.847php?title=CV] -857К.В.] == Примечания ==Воронцов, Скользящий контроль
[[Категория:Машинное обучение]]
[[Категория:КластеризацияКлассификация]][[Категория:Регрессия]]