Изменения

Перейти к: навигация, поиск

Оценка качества в задачах классификации и регрессии

16 174 байта добавлено, 19:06, 4 сентября 2022
м
rollbackEdits.php mass rollback
== Оценки качества классификации ==
Перед переходом к самим метрикам необходимо ввести важную концепцию для описания этих метрик в терминах === Матрица ошибок классификации — [[матрица ошибок|confusion matrix]] (матрица ошибок)англ.Допустим, что у нас есть два класса и алгоритм, предсказывающий принадлежность каждого объекта одному из классов, тогда матрица ошибок классификации будет выглядеть следующим образом:[[Файл:Confusion_matrix.png|500px]]Здесь '''a(х)''' — это ответ алгоритма на объекте, а '''y''' — истинная метка класса на этом объекте.Таким образом, ошибки классификации бывают двух видов: False Negative (FNСonfusion matrix) и False Positive (FP).===
Перед переходом к самим метрикам необходимо ввести важную концепцию для описания этих метрик в терминах ошибок классификации — confusion matrix (матрица ошибок).
Допустим, что у нас есть два класса <math>y = \{ 0, 1 \}</math> и алгоритм, предсказывающий принадлежность каждого объекта одному из классов.
Рассмотрим пример. Пусть банк использует систему классификации заёмщиков на кредитоспособных и некредитоспособных. При этом первым кредит выдаётся, а вторые получат отказ. Таким образом, обнаружение некредитоспособного заёмщика (<math>y = 1 </math>) можно рассматривать как "сигнал тревоги", сообщающий о возможных рисках.
'''Проблема оценки качества в [[Кластеризация|задаче кластеризации]]''' трудноразрешима, как минимум, по двум причинамЛюбой реальный классификатор совершает ошибки. В нашем случае таких ошибок может быть две:* [[Кластеризация#Теорема невозможности Клейнберга|Теорема невозможности Клейнберга]] {{---}} не существует оптимального алгоритма кластеризации.* Многие алгоритмы кластеризации не способны определить настоящее количество кластеров в данных. Чаще всего количество кластеров подается на вход алгоритма и подбирается несколькими запусками алгоритма.
== Методы оценки качества кластеризации ==* Кредитоспособный заёмщик распознается моделью как некредитоспособный и ему отказывается в кредите. Данный случай можно трактовать как "ложную тревогу".'''Метод оценки качества кластеризации''' {{---}} инструментарий для количественной оценки результатов кластеризации* Некредитоспособный заёмщик распознаётся как кредитоспособный и ему ошибочно выдаётся кредит. Данный случай можно рассматривать как "пропуск цели".
Принято выделять две группы методов оценки качества кластеризации:* '''Внешние''' Несложно увидеть, что эти ошибки неравноценны по связанным с ними проблемам. В случае "ложной тревоги" потери банка составят только проценты по невыданному кредиту (англ. ''Internal''только упущенная выгода) меры основаны на сравнении результата кластеризации с априори известным разделением на классы. * '''Внутренние''' (англВ случае "пропуска цели" можно потерять всю сумму выданного кредита. ''External'') меры отображают качество кластеризации только по информации в данныхПоэтому системе важнее не допустить "пропуск цели", чем "ложную тревогу".
Поскольку с точки зрения логики задачи нам важнее правильно распознать некредитоспособного заёмщика с меткой <math>y =1 </math>, чем ошибиться в распознавании кредитоспособного, будем называть соответствующий исход классификации положительным (заёмщик некредитоспособен), а противоположный - отрицательным (заемщик кредитоспособен <math>y = Внешние меры оценки качества ==Данные меры используют дополнительные знания о кластеризуемом множестве0 </math>). Тогда возможны следующие исходы классификации: распределение по кластерам, количество кластеров и т.д.
=== Обозначения ===Дано множество <math>S</math> из <math>n</math> элементов* Некредитоспособный заёмщик классифицирован как некредитоспособный, разделение на классы <math>X = \{ X_1т.е. положительный класс распознан как положительный. Наблюдения, X_2, \ldots , X_r \}</math>, и полученное разделение на кластеры <math>Y = \для которых это имеет место называются '''истинно-положительными''' ('''True Positive''' { Y_1, Y_2, \ldots , Y_s \}</math>, совпадения между <math>X</math> и <math>Y</math> могут быть отражены в таблице сопряженности <math>\left[n_{ij---}\right]</math>, где каждое <math>n_{ij}</math> обозначает число объектов'''TP''').* Кредитоспособный заёмщик классифицирован как кредитоспособный, входящих т.е. отрицательный класс распознан как в <math>X_i</math>отрицательный. Наблюдения, которых это имеет место, так и в <math>Y_j</math> : <math>n_называются '''истинно отрицательными''' ('''True Negative''' {ij}=|X_i \cap Y_j|</math>.: <math>\begin{array---}{c|cccc|c}'''TN''').* Кредитоспособный заёмщик классифицирован как некредитоспособный, т.е. имела место ошибка, в результате которой отрицательный класс был распознан как положительный. Наблюдения, для которых был получен такой исход классификации, называются '''ложно-положительными''' ('''False Positive''' {{---} \atop X}\!\diagdown\!^Y &'''FP'''), а ошибка классификации называется '''ошибкой I рода'''.Y_1&Y_2&\ldots&Y_s&\text* Некредитоспособный заёмщик распознан как кредитоспособный, т.е. имела место ошибка, в результате которой положительный класс был распознан как отрицательный. Наблюдения, для которых был получен такой исход классификации, называются '''ложно-отрицательными''' ('''False Negative''' {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}</math>'''FN'''), а ошибка классификации называется '''ошибкой II рода'''.
Пусть <math>p_{ij} = \dfrac{ n_{ij} }{ n }Таким образом, p_{i} = \dfrac{ a_{i} }{ n }ошибка I рода, p_{j} = \dfrac{ b_{j} }{ n } </math>или ложно-положительный исход классификации, имеет место, когда отрицательное наблюдение распознано моделью как положительное. Ошибкой II рода, или ложно-отрицательным исходом классификации, называют случай, когда положительное наблюдение распознано как отрицательное.Поясним это с помощью матрицы ошибок классификации:
Также рассмотрим пары : {| class="wikitable" style="text-align: center"||<math>(x_i, x_j)y = 1</math> из элементов кластеризуемого множества |<math>Xy = 0</math>. Подсчитаем количество пар, в которых:* Элементы принадлежат одному кластеру и одному классу {{|---}} |<math>TPa ( x ) = 1</math>* Элементы принадлежат одному кластеру, но разным классам {{|Истинно-положительный ('''True Positive — TP''')|Ложно-положительный ('''False Positive — FP''')|-}} |<math>TNa ( x ) = 0</math>* Элементы принадлежат разным кластерам, но одному классу {{|Ложно-отрицательный ('''False Negative — FN''')|Истинно--}} <math>FP</math>отрицательный ('''True Negative — TN''')* Элементы принадлежат разным кластерам и разным классам {{---|}} <math>FN</math>
Здесь <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 '''import''' fetch_openml '''from''' sklearn.model_selection '''import''' cross_val_predict '''from''' sklearn.metrics '''import''' confusion_matrix '''from''' sklearn.linear_model '''import''' SGDClassifier mnist = Индекс Rand fetch_openml('mnist_784', version=1) X, y =mnist["data"], mnist["target"] y =y.astype(np.uint8)Индекс Rand оценивает 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> Безупречный классификатор имел бы только истинно-поло­жительные и тех пар элементовистинно отрицательные классификации, которые находились в разных классахтак что его матрица ошибок содержала бы ненулевые значения только на своей главной диа­гонали (от левого верхнего до правого нижнего угла):  '''import''' numpy '''as''' np '''from''' sklearn.datasets '''import''' fetch_openml '''from''' sklearn.metrics '''import''' confusion_matrix 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) <mathfont color="green"># True для всех пятерок, False для в сех остальных цифр. Задача опознать пятерки</font>Rand y_test_5 = \dfrac{TP+FN}{TP+TN+FP+FN}(y_test == 5) y_train_perfect_predictions = y_train_5 <font color="green"># притворись, что мы достигли совершенства</mathfont>Имеет область определения от print(confusion_matrix(y_train_5, y_train_perfect_predictions)) <font color="green"># array([[54579, 0 до 1], где 1 {{---}} полное совпадение кластеров с заданными классами # [ 0, а 0 {{---}} отсутствие совпадений.5421]])</font>
=== Индекс Adjusted Rand Аккуратность (англ. Accuracy) ===:<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}}Интуитивно понятной, очевидной и почти неиспользуемой метрикой является ''accuracy'' — доля правильных ответов алгоритма:{{PAGENAME}}#Индекс_Rand|индекса Rand]], индекс Adjusted Rand может принимать отрицательные значения, если <math>Index < Expected Index</math>.
=== Индекс Жаккара (англ. Jaccard Index) ===
Индекс Жаккара похож на [[#Индекс_Rand|Индекс Rand]], только не учитывает пары элементов находящиеся в разные классах и разных кластерах (<math>FN</math>).
: <math>
Jaccard accuracy = \dfrac{TP+TN}{TP+TN+FP+FN}
</math>
Имеет область определения от 0 до 1, где 1 {{---}} полное совпадение кластеров с заданными классами, а 0 {{---}} отсутствие совпадений.
Эта метрика бесполезна в задачах с неравными классами, что как вариант можно исправить с помощью [[алгоритмы сэмплирования|алгоритмов сэмплирования]] и это легко показать на примере. Допустим, мы хотим оценить работу спам-фильтра почты. У нас есть 100 не-спам писем, 90 из которых наш классификатор определил верно (True Negative =90, False Positive == Индекс Фоулкса – Мэллова 10), и 10 спам-писем, 5 из которых классификатор также определил верно (англ. Fowlkes-Mallows Index) True Positive =5, False Negative ==Индекс Фоулкса – Мэллова используется для определения сходства между двумя кластерами5).Тогда accuracy: <math>FM = \sqrt{ \dfrac{TP}{TP+TN} \cdot \dfrac{TP}{TP+FP} }</math>Более высокое значение индекса означает большее сходство между кластерами. Этот индекс также хорошо работает на зашумленных данных.
=== Hubert Г statistic ===
Данная мера отражает среднее расстояние между объектами разных кластеров:
: <math>
Г accuracy = \dfrac{15+90}{M} \sum \limits_{i=1}^{N-1} \sum \limits_{i=i5+90+10+1}^{N5} P(i, j) \cdot Q(i, j),</math>где <math>M = n*(n-1)/2</math>, <math>P(i86, j)</math> {{---}} матрица близости, а: <math>Q(i, j) = \begin{cases} 0, & \mbox{если x(i) и x(j) лежат в одном кластере} \\ 1, & \mbox{в другом случае } \\\end{cases}4
</math>
Можно заметить, что два объекта влияют на <math>Г</math>, только если они находятся в разных кластерах.
Чем больше значение меры {{Однако если мы просто будем предсказывать все письма как не---}} тем лучше.спам, то получим более высокую ''аккуратность'':
=== Индекс Phi ===
Классическая мера корреляции между двумя переменными:
: <math>
\Phi accuracy = \dfrac{ TP \times FN - TN \times FP 0+100}{ (TP 0+ TN)(TP 100+ FP)(FN 0+ FP)(FN + TN) 10}= 90,9
</math>
=== Minkowski Score ===: <math>MS = \dfrac{ \sqrt{ \sum_i \binom{a_i}{2} + \sum_j \binom{b_i}{2} - 2\sum_{ij} \binom{ n_{ij} }{ 2 } } }{ \sqrt{ \sum_j \binom{b_i}{2} } }</math>При этом, наша модель совершенно не обладает никакой предсказательной силой, так как изначально мы хотели определять письма со спамом. Преодолеть это нам поможет переход с общей для всех классов метрики к отдельным показателям качества классов.
<font color="green"># код для для подсчета аккуратности:</font> <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''' accuracy_score '''from''' sklearn.linear_model '''import''' SGDClassifier mnist = fetch_openml('mnist_784', version=1) X, y =mnist["data"], mnist["target"] y = Индекс Гудмэна-Крускала y.astype(англnp. Goodman-Kruskal Indexuint8) 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]])<math/font>GK print(accuracy_score(y_train_5, y_train_pred))<font color="green"> # == \sum_i p_i(1 - \max_j \dfrac{ p_{ij} }{ p_i }53892 + 3530) / (53892 + 3530 + 1891 +687)</font> <font color="green"># 0.9570333333333333</mathfont>
=== Entropy =Точность (англ. Precision) ==Энтропия измеряет "чистоту" меток классов:: <math>E = - \sum_i p_i ( \sum_j \dfrac{ p_{ij} }{ p_i } log( \dfrac{ p_{ij} }{ p_i } ) )</math>
Стоит отметить, что если все кластера состоят из Точностью (''precision'') называется доля правильных ответов модели в пределах класса {{---}} это доля объектов одного класса, то энтропия равна 0действительно принадлежащих данному классу относительно всех объектов которые система отнесла к этому классу.
=== Purity ===
Чистота ставит в соответствие кластеру самый многочисленный в этом кластере класс.
: <math>
P Precision = \sum_i p_i ( \max_j \dfrac{ p_{ij} TP}{ p_i TP+FP} )
</math>
Чистота находится Именно введение ''precision'' не позволяет нам записывать все объекты в интервале [0один класс, 1], причём значение так как в этом случае мы получаем рост уровня ''False Positive''. === 1 отвечает оптимальной кластеризацииПолнота (англ.Recall) ===
=== FПолнота {{--мера ===F-мера представляет собой гармоническое среднее между точностью (precision) и полнотой (recall).: <math>F = \sum_j p_j \max_i \big\lbrack 2 \dfrac{ p_{ij} }{ p_i } \dfrac{ p_{ij} }{ p_j } \big/ (\dfrac{ p_{ij} }{ p_i } + \dfrac{ p_{ij} }{ p_j }) \big\rbrack</math>это доля истинно положительных классификаций. Полнота показывает, какую долю объектов, реально относящихся к положительному классу, мы предсказали верно.
=== Variation of Information ===
Данная мера измеряет количество информации, потерянной и полученной при переходе из одного кластера в другой.
: <math>
VI Recall = - \sum_i p_i \log p_i - \sum_i p_j log p_j - 2 \sum_i \sum_j p_{ij} \log \dfrac{ p_{ij} TP}{ p_i p_j TP+FN}
</math>
== Внутренние меры оценки качества ==Данные меры оценивают качество структуры кластеров опираясь только непосредственно на нее, не используя внешней информацииПолнота (''recall'') демонстрирует способность алгоритма обнаруживать данный класс вообще.
=== Компактность кластеров Имея матрицу ошибок, очень просто можно вычислить точность и полноту для каждого класса. Точность (англ''precision'') равняется отношению соответствующего диагонального элемента матрицы и суммы всей строки класса. Cluster CohesionПолнота (''recall'') ===Идея данного метода в том, что чем ближе друг к другу находятся объекты внутри кластеров, тем лучше разделение{{---}} отношению диагонального элемента матрицы и суммы всего столбца класса.Формально:
Таким образом, необходимо минимизировать внутриклассовое расстояние, например, сумму квадратов отклонений:
: <math>
WSS Precision_c = \sum \limits_dfrac{A_{j=1c,c}}^{M} \sum \limits_{i = 1}^{|C_j|n} (x_A_{ijc,i} - \overline{x_j})^2</math>, где <math>M</math> {{---}} количество кластеров. === Отделимость кластеров (англ. Cluster Separation) ===В данном случае идея противоположная {{---}} чем дальше друг от друга находятся объекты разных кластеров, тем лучше.
Поэтому здесь стоит задача максимизации суммы квадратов отклонений:
: <math>
BSS Recall_c = n \cdot dfrac{A_{c,c}}{\sum \limits_{ji=1}^{Mn} (\overlineA_{x_{ji,c}} - \overline{x})^2</math>, где <math>M</math> {{---}} количество кластеров.
=== Индекс Данна (англРезультирующая точность классификатора рассчитывается как арифметическое среднее его точности по всем классам. Dunn Index) ===Индекс Данна имеет множество вариаций, оригинальная версия выглядит следующим образом:: <math>D(C) = \dfrac{ min_{c_k \in C} \{ min_{c_l \in C \setminus c_k} \{ \delta(c_k, c_l) \} \} }{ max_{c_k \in C} \{ \Delta(c_k) \} } </math>,где:: <math>\delta</math> {{---}} межкластерное расстояние (оценка разделения), <math>\delta(c_k, c_l) = min_{x_i \in c_k, x_j \in c_l} \|x_i - x_j\|</math>,: <math>\Delta(c_k)</math> {{---}} диаметр кластера (оценка сплоченности), <math>\Delta(c_k) = max_{x_i,x_j \in c_k} \|x_i То же самое с полнотой. Технически этот подход называется '''macro- x_j\|</math>averaging'''.
<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(gD31np.uint8) X_train, X_test, y_train, gD41y_test = X[:60000], gD51X[60000:], gD33y[:60000], gD43y[60000:] y_train_5 = (y_train == 5) <font color="green"># True для всех пятерок, gD53False для в сех остальных цифр. Задача опознать пятерки</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)) <mathfont color="green">\delta# == 3530 / (3530 + 1891)</mathfont> и оценки компактности <mathfont color="green">\Delta# 0.8370879772350012 # 0.6511713705958311</mathfont>
Оценки разделения:: <math>\delta^3=== F-мера (c_k, c_lангл. F-score) = \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^4''Precision'' и ''recall'' не зависят, в отличие от ''accuracy'', от соотношения классов и потому применимы в условиях несбалансированных выборок.Часто в реальной практике стоит задача найти оптимальный (c_kдля заказчика) баланс между этими двумя метриками. Понятно что чем выше точность и полнота, тем лучше. Но в реальной жизни максимальная точность и полнота не достижимы одновременно и приходится искать некий баланс. Поэтому, c_lхотелось бы иметь некую метрику которая объединяла бы в себе информацию о точности и полноте нашего алгоритма. В этом случае нам будет проще принимать решение о том какую реализацию запускать в производство (у кого больше тот и круче) = \|\overline{c_k} . Именно такой метрикой является ''F- \overline{c_l}\| </math>,мера''.
F-мера представляет собой [https: <math>\delta^5(c_k//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 гармоническое среднее] между точностью и полнотой. Она стремится к нулю, 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>если точность или полнота стремится к нулю.
Оценки компактности:: <math>F = \dfrac{ 2 \Delta^1(c_k) = times precision \Delta(c_k) times recall }{ precision + recall }</math>,
: <math>\Delta^3(c_k) = \dfrac{2}{|c_k|} \sum_{x_i \in c_k} \|x_i Данная формула придает одинаковый вес точности и полноте, поэтому F- \overline{c_k}\| </math>мера будет падать одинаково при уменьшении и точности и полноты.Возможно рассчитать ''F-меру'' придав различный вес точности и полноте, если вы осознанно отдаете приоритет одной из этих метрик при разработке алгоритма:
Обобщенный индекс Данна, как и обычный, должен возрастать вместе с улучшением качества кластеризации.: <math>F_β = \dfrac{(1+β^2) \times precision \times recall }{ (β^2 \times precision) + recall }</math>
где <math>β</math> принимает значения в диапазоне <math>0<β<1</math> если вы хотите отдать приоритет точности, а при <math>β>1</math> приоритет отдается полноте. При <math>β=== Индекс S_Dbw ===Основан на вычислении Евклидовой нормы1</math> формула сводится к предыдущей и вы получаете сбалансированную F-меру (также ее называют <math>F_1</math>).
: <math>\ \|x\| = (x^Tx)^(1/2) </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>β^2=\dfrac{ 1 }{ 4 }</math>]] </li><li style="display: inline-block;"> [[Файл:F_prior_Recal.jpg|thumb|none|450px|Рис.3 F-мера c приоритетом полноты, <math>β^2=2</math>]] </li></ul></div>
: <math> \sigma(X) = \dfrac{1}{|X|} \sum_{x_i \in X} (x_i ''F- \overline{x}) ^ 2 </math>мера'' достигает максимума при максимальной полноте и точности,и близка к нулю, если один из аргументов близок к нулю.
''F-мера'' является хорошим кандидатом на формальную метрику оценки качества классификатора. Она сводит к одному числу две других основополагающих метрики: <math> stdev(C) = \dfrac{1}{K}\sqrt{\sum_{c_k \in C} \|\sigma(c_k)\|} </math>точность и полноту.Имея "F-меру" гораздо проще ответить на вопрос: "поменялся алгоритм в лучшую сторону или нет?"
Сам индекс определяется формулой <font color="green"># код для подсчета метрики F-mera: '''# Пример классификатора, способного проводить различие между всего лишь двумя '''# классами, "пятерка" и "не пятерка" из набора рукописных цифр MNIST</font> '''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(f1_score(y_train_5, y_train_pred)) <font color="green"># 0.7325171197343846</font>
: <math> SDbw(C) = \dfrac{1}{K} \sum_{c_k \in C} \dfrac{\|\sigma(c_k)\|}{\|\sigma(X)\|} + \dfrac{1}{K(K== ROC-1)} \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>.кривая ===
Здесь'''Кривая рабочих характеристик''' (англ. '''Receiver Operating Characteristics curve'''). Используется для анализа поведения классификаторов при различных пороговых значениях. Позволяет рассмотреть все пороговые значения для данного классификатора. Показывает долю ложно положительных примеров (англ. '''false positive rate, FPR''') в сравнении с долей истинно положительных примеров (англ. '''true positive rate, TPR''').
[[Файл: <math> den(c_k) = \sum_{x_i \in c_k} f(x_i, \overline{c_k}) </math>,ROC_2.png]]
: <math> den(c_k, c_l) TPR = \sum_dfrac{x_i \in c_k \cup c_lTP} f(x_i, \dfrac{\overline{c_k} TP+ \overline{c_lFN}}{2}) = Recall</math>,
: <math> f(x_i, c_k) FPR = 0 </math>, если <math> \|x_i - \overlinedfrac{FP}{c_kFP+TN}\| > stdev(C) </math> и <math>1</math> в ином случае.
Должен снижаться с улучшением кластеризацииДоля '''FPR''' {{---}} это пропорция отрицательных образцов, которые были некорректно классифицированы как положительные.
: <math> FPR === Силуэт (англ. Silhouette) === Значение силуэта показывает1 - TNR</math>, насколько объект похож на свой кластер по сравнению с другими кластерами.
Оценка для всей кластерной структуры:: <math> Sil(С) = \dfrac{1}{N} \sum_{c_k \in C} \sum_{x_i \in c_k} \dfrac{ b(x_i, c_k) - a(x_i, c_k) }{ 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 - x_j\|</math> '''TNR''' {{---}} среднее расстояние от <math>x_i \in c_k</math> до других объектов из кластера <math>c_k</math> доля истинно отрицательных классификаций (компактностьангл. '''Тrие Negative Rate'''),: <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 - x_j\| \}</math> {{---}} среднее расстояние от <math>x_i \in c_k</math> до объектов из другого кластера <math>c_l: k \neq l</math> (отделимость).Можно заметить, что : <math> -1 \le Sil(C) \le 1</math>.Чем ближе данная оценка к 1пред­ставляющая собой пропорцию отрицательных образцов, тем лучшекоторые были кор­ректно классифицированы как отрицательные.
Есть Доля '''TNR''' также упрощенная вариация силуэта: <math>aназывается '''специфичностью''' (x_iангл. '''specificity'''). Следовательно, c_kROC-кривая изображает '''чувствительность''' (англ. '''seпsitivity''')</math> и <math>b(x_i, c_k)</math> вычисляются через центры кластеровт.е. полноту, в срав­нении с разностью '''1 - specificity'''.
=== Индекс Calinski–Harabasz ===: <math>Прямая линия по диагонали представляет ROC-кривую чисто случайного классификатора. Хороший классификатор держится от указанной линии настолько далеко, насколько этоCHвозможно (Cстремясь к левому верхнему углу) = \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} \| }</math>Компактность основана на расстоянии от точек кластера до их центроидов, а разделимость - на расстоянии от центроид кластеров до глобального центроида. Должен возрастать.
=== Индекс C ===Индекс C представляет собой нормализованную оценку компактности:: <math>CIОдин из способов сравнения классификаторов предусматривает измере­ние '''площади под кривой''' (C) = \dfracангл. '''Area Under the Curve {{ S(C) - S_{min}(C) --}{ S_{max}(CAUC''') . Безупречный клас­сификатор будет иметь площадь под ROC- S_{min}кривой (C'''ROC-AUC''')}</math>,где:: <math>S(C) = \sum \limits_{c_k \in C} \sum \limits_{x_iравную 1, 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> минимальных (максимальных) расстояний между парами всех объектов во всем датасетеплощадь 0.5.
<font color="green"># Код отрисовки ROC-кривой '''# На примере классификатора, способного проводить различие между всего лишь двумя классами '''# "пятерка" и "не пятерка" из набора рукописных цифр MNIST</font> '''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('mnist_784', version=1) X, y = Индекс Дэвиcа-Болдуина mnist["data"], mnist["target"] y = y.astype(англnp. Davies–Bouldin Indexuint8) 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 для в сех остальных цифр.Задача опознать пятерки<br/font>Она вычисляет компактность как расстояние от объектов кластера до их центроидов, а отделимость - как расстояние между центроидами. y_test_5 = (y_test == 5): sgd_clf = SGDClassifier(random_state=42) <font color="green"># классификатор на основе метода стохастического градиентного спуска (Stochastic Gradient Descent SGD)<math/font>DB sgd_clf.fit(CX_train, y_train_5) <font color="green"># обучаем классификатор распозновать пятерки на целом обучающем наборе</font> y_train_pred = \dfrac{1}{K} \sum \limits_{c_k \in C} \max \limits_{c_l \in C \setminus c_k} \Big\{ \dfrac{ Scross_val_predict(c_ksgd_clf, X_train, y_train_5, cv=3)+S y_scores = cross_val_predict(c_lsgd_clf, X_train, y_train_5, cv=3, method="decision_function") }{ \| \overline{c_k} - \overline{c_l} \| } \Big\}</math> fpr, tpr, thresholds = roc_curve(y_train_5,y_scores)где def plot_roc_curve(fpr, tpr, label=None):: <math> plt.plot(fpr, tpr, linewidth=2, label=label)S plt.plot(c_k[0, 1], [0, 1], 'k--') = \dfrac{ # dashed diagonal plt.xlabel('False Positive Rate, FPR (1 }{ |c_k| } \sum \limits_{x_i \in c_k} \|x_i - \overline{c_k}\|specificity)')</math> plt.ylabel('True Positive Rate, TPR (Recall)') plt.title('ROC curve') plt.savefig("ROC.png") plot_roc_curve(fpr, tpr) plt.show()
Существует еще одна вариация данной меры, которая была предложена автором вместе с основной версией:: <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} == Precison- \overline{c_l} \| \} }</math>recall кривая ===
C'''Чувствительность к соотношению классов.''' Рассмотрим задачу выделения математических статей из множества научных статей. Допустим, что всего имеется 1.000.100 статей, из которых лишь 100 относятся к математике. Если нам удастся построить алгоритм <math>a(x)</math>, идеально решающий задачу, то его TPR будет равен единице, а FPR — нулю. Рассмотрим теперь плохой алгоритм, дающий положительный ответ на 95 математических и 50.000 нематематических статьях. Такой алгоритм совершенно бесполезен, но при этом имеет TPR = 0.95 и FPR = 0.05, что крайне близко к показателям идеального алгоритма.Таким образом, если положительный класс существенно меньше по размеру, то AUC-индекс и индекс ДэвиcаROC может давать неадекватную оценку качества работы алгоритма, поскольку измеряет долю неверно принятых объектов относительно общего числа отрицательных. Так, алгоритм <math>b(x)</math>, помещающий 100 релевантных документов на позиции с 50.001-й по 50.101-ю, будет иметь AUC-Болдуина должны минимизироваться для роста кластеризацииROC 0.95.
=== Score function ===Индекс'''Precison-recall (PR) кривая.''' Избавиться от указанной проблемы с несбалансированными классами можно, основанный на суммированииперейдя от ROC-кривой к PR-кривой. Здесь оценка компактности выражается в дистанции от точек кластера до его центроидаОна определяется аналогично ROC-кривой, только по осям откладываются не FPR и TPR, а оценка разделимости полнота (по оси абсцисс) и точность (по оси ординат). Критерием качества семейства алгоритмов выступает '''площадь под PR-кривой''' (англ. '''Area Under the Curve в дистанции от центроидов кластеров до глобального центроида.AUC-PR''')
[[Файл: <math>SF(C) = 1 - \dfrac{ 1 }{ e^{e^{bcd(C) + wcd(C)}} }</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) = \sum \limits_{c_k \in C} \dfrac{ 1 }{ |c_k| } \sum \limits_{x_i \in c_k} \|x_i - \overline{c_k}\|</math>PR_curve.png]]
Чем больше данный индекс <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=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) 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()
==Оценки качества регрессии = Индекс Gamma ===: <math>G(C) = \dfrac{ \sum_{c_k \in C} \sum_{x_i,x_j \in c_k} |c_k| \cdot dl(x_i, x_j) }{ n_w (\binom{N}{2} - n_w) }</math>
где:: <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>.Наиболее типичными мерами качества в задачах регрессии являются
=== Индекс COP =Средняя квадратичная ошибка (англ. Mean Squared Error, MSE) ==В данной мере компактность вычисляется как расстояние от точек кластера до его центроиды, а разделимость основана на расстоянии до самого отдаленного соседа.: <math>COP(C) = \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>.
=== Индекс CS ===Был предложен ''MSE'' применяется в области сжатия изображенийситуациях, но может быть успешно адаптирован для любого другого окружениякогда нам надо подчеркнуть большие ошибки и выбрать модель, которая дает меньше больших ошибок прогноза. Грубые ошибки становятся заметнее за счет того, что ошибку прогноза мы возводим в квадрат. Он оценивает компактность по диаметру кластераИ модель, которая дает нам меньшее значение среднеквадратической ошибки, можно сказать, а отделимость — как дистанцию между ближайшими элементами двух кластеровчто что у этой модели меньше грубых ошибок.
: <math>
CS(C) MSE = \dfrac{\sum_{c_k \in C} \{ 1 / |c_k| \sum_{x_i \in c_k} \max_{x_j \in c_kn}\{\|x_i - x_j\|\} sum \}}limits_{\sum_{c_k \in Ci=1} \min_^{c_l \in C \setminus c_k} \{\|\overline{c_kn} (a(x_i) - \overline{c_l}\| \}}y_i)^2</math>. и
Чем меньше значение данного индекса=== Cредняя абсолютная ошибка (англ. Mean Absolute Error, тем выше качество кластеризации.MAE) ===
=== Индекс Sym ===
: <math>
Sym(C) MAE = \dfrac {\max_1}{c_k, c_l \in Cn} \{\|sum \overlinelimits_{c_ki=1} - \overline^{c_ln}\|\}}{K\sum_{c_k \in C}\sum_{x_i \in c_k} \overset{\ast}{d_{ps}}a(x_i, c_k)}- y_i|</math>.
Здесь <math>\overset{\ast}{d_{ps}}(x_iСреднеквадратичный функционал сильнее штрафует за большие отклонения по сравнению со среднеабсолютным, c_k)</math> и поэтому более чувствителен к выбросам. При использовании любого из этих двух функционалов может быть полезно проанализировать, какие объекты вносят наибольший вклад в общую ошибку дистанция симметрии для точки <math>x_i</math> из кластера <math>c_k</math>не исключено, что на этих объектах была допущена ошибка при вычислении признаков или целевой величины.
Чем выше данное значениеСреднеквадратичная ошибка подходит для сравнения двух моделей или для контроля качества во время обучения, тем лучшено не позволяет сделать выводов о том, на сколько хорошо данная модель решает задачу. Например, MSE = 10 является очень плохим показателем, если целевая переменная принимает значения от 0 до 1, и очень хорошим, если целевая переменная лежит в интервале (10000, 100000).В таких ситуациях вместо среднеквадратичной ошибки полезно использовать коэффициент детерминации {{---}} <math>R^2</math>
=== Индексы SymDB, SymD, Sym33 Коэффициент детерминации ===Модифицируют оценку компактности для индексов Дэвиса-Боулдина, Данна и gD33 соответственно.
SymDB вычисляется аналогично DB с изменением вычисления : <math>S</math> на: : <math> S(c_k) R^2 = 1 - \dfrac{\sum \limits_{i=1}^{|c_k| \sum_n}(a(x_i) - y_i)^2}{x_i \in c_k} sum \oversetlimits_{\asti=1}^{d_n}(y_i - \overline{psy}}(x_i, c_k)^2} </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 ===В отличие от подавляющего большинства других оценок, не основывается на сравнении компактности и разделимости. Определяется следующим образом:
: <math>
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) ===Одна из самых новых из рассматриваемых в данном разделе оценок. Измеряет разделимость по дистанции между ближайшими точка кластеров, а компактность — по расстоянию от пограничных точек кластера до его центроида.
: <math>
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имметричная MAPE (англ. Symmetric MAPE, SMAPE) ===Отличается от предыдущей оценки усложненным способом вычисления оценки разделимости.
: <math>
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>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>.
при <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>.
Данная оценка, как В этом случае фиксируется некоторое множество разбиений исходной выборки на две подвыборки: обучающую и предыдущаяконтрольную. Для каждого разбиения выполняется настройка алгоритма по обучающей подвыборке, должна возрастатьзатем оценивается его средняя ошибка на объектах контрольной подвыборки. Оценкой скользящего контроля называется средняя по всем разбиениям величина ошибки на контрольных подвыборках.
== Сравнение Примечания ==Не существует лучшего метода оценки качества кластеризации. Однако, в рамках исследования<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К.В.] == Примечания ==Воронцов, Скользящий контроль
[[Категория:Машинное обучение]]
[[Категория:КластеризацияКлассификация]][[Категория:Регрессия]]
1632
правки

Навигация