Arhn - архитектура программирования

Является ли подвыборка коэффициента силуэта стратифицированной в sklearn?

У меня снова возникли проблемы с использованием коэффициента силуэта scikit-learn. (первый вопрос был здесь: коэффициент силуэта в python с sklearn). Я делаю кластеризацию, которая может быть очень несбалансированной, но с большим количеством людей, поэтому я хочу использовать параметр выборки коэффициента силуэта. Мне было интересно, была ли подвыборка стратифицирована, то есть выборка по кластерам. В качестве примера я беру набор данных радужной оболочки, но мой набор данных намного больше (и именно поэтому мне нужна выборка). Мой код:

from sklearn import datasets
from sklearn.metrics import *
iris = datasets.load_iris()
col = iris.feature_names
name = iris.target_names
X = pd.DataFrame(iris.data, columns = col)
y = iris.target
s = silhouette_score(X.values, y, metric='euclidean',sample_size=50)

который работает. Но теперь, если бы я предвзято относился к этому:

y[0:148] =0
y[148] = 1
y[149] = 2
print y
s = silhouette_score(X.values, y, metric='euclidean',sample_size=50)

Я получил :

ValueError                                Traceback (most recent call last)
<ipython-input-12-68a7fba49c54> in <module>()
      4 y[149] =2
      5 print y
----> 6 s = silhouette_score(X.values, y, metric='euclidean',sample_size=50)

/usr/local/lib/python2.7/dist-packages/sklearn/metrics/cluster/unsupervised.pyc in silhouette_score(X, labels, metric, sample_size, random_state, **kwds)
     82         else:
     83             X, labels = X[indices], labels[indices]
---> 84     return np.mean(silhouette_samples(X, labels, metric=metric, **kwds))
     85 
     86 

/usr/local/lib/python2.7/dist-packages/sklearn/metrics/cluster/unsupervised.pyc in silhouette_samples(X, labels, metric, **kwds)
    146                   for i in range(n)])
    147     B = np.array([_nearest_cluster_distance(distances[i], labels, i)
--> 148                   for i in range(n)])
    149     sil_samples = (B - A) / np.maximum(A, B)
    150     # nan values are for clusters of size 1, and should be 0

/usr/local/lib/python2.7/dist-packages/sklearn/metrics/cluster/unsupervised.pyc in _nearest_cluster_distance(distances_row, labels, i)
    200     label = labels[i]
    201     b = np.min([np.mean(distances_row[labels == cur_label])
--> 202                for cur_label in set(labels) if not cur_label == label])
    203     return b

/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.pyc in amin(a, axis, out, keepdims)
   1980         except AttributeError:
   1981             return _methods._amin(a, axis=axis,
-> 1982                                 out=out, keepdims=keepdims)
   1983         # NOTE: Dropping the keepdims parameter
   1984         return amin(axis=axis, out=out)

/usr/lib/python2.7/dist-packages/numpy/core/_methods.pyc in _amin(a, axis, out, keepdims)
     12 def _amin(a, axis=None, out=None, keepdims=False):
     13     return um.minimum.reduce(a, axis=axis,
---> 14                             out=out, keepdims=keepdims)
     15 
     16 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):

ValueError: zero-size array to reduction operation minimum which has no identity

ошибка, которая, я думаю, связана с тем, что выборка является случайной, а не стратифицированной, поэтому в ней не учитываются два небольших кластера.

Я прав ?


Ответы:


1

Я думаю, вы правы, текущая реализация не поддерживает сбалансированную передискретизацию.

19.12.2013
  • так ли это сейчас? 18.01.2020

  • 2

    Да вы правы. Выборка не является стратифицированной, поскольку при отборе не учитываются метки.

    Вот как берется образец (версия 0.14.1)

    indices = random_state.permutation(X.shape[0])[:sample_size]
    

    Где X — входной массив размером [n_samples_a, n_samples_a] или [n_samples_a, n_features].

    06.03.2014

    3

    Просто обновление на 2020 год:

    Начиная с scikit-learn 0.22.1, выборка остается случайной (то есть не расслоенной). Исходный код по-прежнему:

    indices = random_state.permutation(X.shape[0])[:sample_size]

    12.02.2020
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..