Домашнее задание №8

Deadline: 20.05.2017 23:59:59

ФИВТ, АПТ, Курс по машинному обучению, Весна 2017, Модуль Unspervised Learning,

Alexey Romanenko, alexromsput@gmail.com

Organization Info

Дополнительный материал для выполнения дз:

Оформление дз:

  • Присылайте выполненное задание на почту ml.course.mipt@gmail.com
  • Укажите тему письма в следующем формате ML2017_fall <номер_группы> <фамилия>, к примеру -- ML2017_fall 496 ivanov
  • Выполненное дз сохраните в файл <фамилия>_<группа>_task<номер задания>.ipnb, к примеру -- ML2017_496_task1.ipnb

Вопросы:

  • Присылайте вопросы на почту ml.course.mipt@gmail.com
  • Укажите тему письма в следующем формате ML2016_fall Question <Содержание вопроса>

  • PS1: Используются автоматические фильтры, и просто не найдем ваше дз, если вы не аккуратно его подпишите.
  • PS2: Дедлайн жесткий, в том числе помтоу что это ДЗ последнее в курсе.

Контрольные вопросы (0 % - для самоконтроля)

Ответе на вопросы своими словами (загугленный материал надо пересказать), ответ обоснуйте (напишите и ОБЪЯСНИТЕ формулки если потребуется), если не выходит, то вернитесь к лекции дополнительным материалам:

Вопрос 1: В чём заключается проблема мультиколлинеарности?

Вопрос 2: Какие проблемы при обучении алгоритмов возникают из-за большой разамерности пространства признаков?

Вопрос 3: В чем суть проклятия размерности?

Вопрос 4: Какая связь между решением задачи PCA и SVD-разложение матрицы регрессии?

Вопрос 5: Почему в tSNE расстояние между парамми объектов измеряется "по-стьюденту" и как это помогает решить проблему "скрученности" (crowding problem)?

Вопрос 6: На какой идее базируются алгоритмы аггломеративной кластеризации? Напишите формулу Ланса-Вильма

Вопрос 7: Какие два шага выделяют в алгоритме кластеризации k-means?

Вопрос 8: В чём отличия (основные упрощения) k-means от EM-алгоритма кластеризации?

Вопрос 9 Какой принцип работы графовых алгоритмов кластеризации?

Вопрос 10 В чем некорректность постановки задачи кластеризации?


PS: Если проверяющий не понял ответ на большинство вопросов, то будет пичалька. Пишите так, чтобы можно было разобраться.

Вопросы по теории (30%)

Задача 1 Ответьте на вопросы:

1) Как можно не прибегая к визуализации понять, что кластерная структура у данного облака точек отсутствует?

Можно, например, судить по величине межкластерного и внутрикластерного расстояния. Если алгоритм стохастичен, то можно запустить его несколько раз - если центры кластеров и их размеры сильно меняются от раза к разу, то скорее всего структуры нет. Можно также попробовать другие алгоритмы (хотя здесь может проявиться специфика конкретного алгоритма). Однако, если есть возможность, то лучше сделать визуализацию.

2) Какие из алгоритмов кластеризации могут выделять кластеры с ленточной структурой?

  • DBSCAN
  • ФОРЕЛ
  • Алгоритм кратчайшего незамкнутого пути
  • Алгоритм выделения связных компонент

3) Какие алгоритмы кластеризации чувствительны к шуму и перемычкам?

  • Алгоритм Ланса-Уильимса
  • Алгоритм выделения связных компонент
  • Алгоритм кратчайшего незамкнутого пути

4) Каким образом приближают «центр кластера» в нелинейных пространствах?

Если у объекта обучающей выборки сумма расстояний до остальных объектов кластера минимальна, его можно считать центром. Однако важно определиться с метрикой в этом нелинейном пространстве.

5) Каким образом можно определять число кластеров?

Можно запускать алгоритм кластеризации с различным числом кластеров и остановиться на том, при котором получается максимальное качество алгоритма. Также можно попробовать алгоритмы, оценивающие оптимальное число кластеров (например, MeanShift).

Задача 2 Даны пять точек на числовой оси $X = (1; 5; 7; 8; 8)$, число кластеров равно 2. Рассчитайте ответ алгоритма K-means (финальные центры кластеров), если начальные центры кластеров c1 = 1, c2 = 10.

Ответ:

  1. первый кластер с центром 3 содержит объекты 1, 5
  2. второй кластер с центром 7,67 содержит объекты 7, 8, 8

Задача 3 Докажите, что the k-means всегда сходится.

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

Задача 4 Для сжатия размерности пространства алгоритм PCA применяется к датасету с количеством признаков $D = 100$. Наблюдается следующий спектр собственных значений матрицы объектов-признаков. Ответье на вопросы

  • 1) Высокая ли эффективная размерность пространства признаков (intrinsic dimensionality) (насколько она близка к 100)?

In [12]:
import numpy as np
d = np.linspace(1.6, 0.5, 100)  # аппроксимируем эту прямую
dTot = np.sum(d)
n = 100
var_i = np.array([np.sum(d[: i + 1]) / \
                dTot * 100.0 for i in range(n)])
m = sum(var_i < 0.95 * 100)
print m


90
  • 2) Можно ли перевести датасет с помощью PCA в пространство меньшей размерности с минимальными потерями точности? Если да, то чему примерно будет равна размернось

Понижение размерности с помощью PCA до примерно 90 не приведет к значительному сокращению размерности, поэтому делать это, скорее всего, не нужно, хотя потеря точности составит не более 5%.

Практическое задание 1 (30%)

Реализуйте PCA


In [5]:
import numpy as np
import pylab as plt
'''
Performs the Principal Coponent analysis of the Matrix F
Matrix must be n * l dimensions
where n is # features
l is # samples
'''

def PCA(F, varRetained = 0.95, show = False):
    # Input
    #     F - initaial matrix 
    # Compute Covariance Matrix Sigma
    # Input
    (n, l) = F.shape
    Sigma = 1.0 / l * F.dot(np.transpose(F))
    # Compute eigenvectors and eigenvalues of Sigma by SVD
    # U, V - matrix, d - array: Sigma = U * np.diag(d) * V
    U, d, V = np.linalg.svd(F.T)  # !!! посчитать SVD матрицы Sigma

    # compute the value m: number of minumum features that retains the given variance varRetaine
    d = d**2
    dTot = np.sum(d)
    var_i = np.array([np.sum(d[: i + 1]) / \
                dTot * 100.0 for i in range(n)])
    m = sum(var_i < varRetained * 100) # !!! вычислите необходимое число главных компонент
    print '%.2f %% variance retained in %d dimensions' % (var_i[m], m) # !!! верните число m и точность, которая достигается при этом числе главных компонент

    # plot the variance plot
    if show:
        plt.plot(var_i)
        plt.xlabel('Number of Features')
        plt.ylabel(' Percentage Variance retained')
        plt.title('PCA $\% \sigma^2 $ vs # features')
        plt.show()

    # compute the reduced dimensional features by projection
    U_reduced = V.T[:, :m]  # !!! только m главных компонент
    G = F.T.dot(U_reduced)  # !!! вычислить матрицу в преобразованном пространстве

    return G, U_reduced

In [6]:
# Примените алгоритм к данным MNIST
from sklearn.model_selection import train_test_split

from sklearn.datasets import load_digits
X, y = load_digits(return_X_y=True)
X_train, X_test, Y_train, Y_test = train_test_split(X, y, train_size=0.7)

In [8]:
#################################################################
# PCA of training set
print 'Performing PCA - Principal COmponent Analysis'

Z, U_reduced = PCA(X.T, varRetained = 0.95, show = True)


Performing PCA - Principal COmponent Analysis
95.25 % variance retained in 15 dimensions

In [9]:
print Z.shape
print U_reduced.shape


(1797, 15)
(64, 15)

In [10]:
print Z
print U_reduced


[[ 45.86127719  -1.19211574  21.10005932 ...,   2.59969259  -2.06434074
    2.2613081 ]
 [ 55.52967927   7.86176977 -20.4871986  ...,   2.23270344  -6.51808622
   -2.1515819 ]
 [ 55.8278837    6.91459576  -9.66245273 ...,  -3.86710638   5.24417247
    0.62235491]
 ..., 
 [ 65.52698526  10.65872857  -6.2945608  ...,   8.86413263   2.16217854
    5.14328342]
 [ 58.60616587  -4.9112521   12.72315226 ...,   2.70410925  -8.76526739
   13.46219914]
 [ 64.44823101  -0.45551347   7.04184347 ...,   5.26077066   7.5053199
    4.69903541]]
[[  1.74588012e-18  -6.78969169e-19   1.31513399e-17  -6.83579972e-18
    1.31851629e-17  -1.02973761e-17   1.59839879e-17  -7.96071950e-19
    3.06830428e-18  -3.53098663e-18   3.68179107e-18  -9.81045529e-18
    1.10452655e-17  -9.73842307e-18   1.19955263e-17]
 [  5.77192878e-03  -1.73619371e-02  -9.85740003e-03   1.84048382e-02
    1.99513790e-02   1.42232213e-02   1.09749979e-02   8.50458120e-03
    1.89535667e-02  -2.00303310e-02  -1.39722270e-02  -8.73734257e-03
   -5.71260055e-02   2.19374814e-02   1.57656455e-02]
 [  1.00696020e-01  -2.24200800e-01  -4.48071690e-02   1.23100765e-01
    1.82042764e-01   8.72415154e-02   6.17819566e-02   5.49919656e-02
    2.12755902e-01  -8.25529225e-02   4.45382518e-02  -1.21328951e-01
   -2.63822844e-01   1.33292578e-01   6.65469554e-02]
 [  2.29641867e-01  -1.37464667e-01  -8.71833404e-04   1.22041169e-01
    2.08220187e-01  -5.84089331e-02  -7.17565845e-02  -3.63120681e-02
    1.64351626e-01   2.07519908e-02  -3.20636404e-03  -1.10118118e-01
    1.24642536e-01  -1.79412849e-01  -1.43104002e-01]
 [  2.29629079e-01  -3.44686443e-02  -4.71422113e-02  -1.44693467e-01
    4.63059807e-02  -7.41524150e-03  -6.06356534e-02   5.72724148e-02
   -9.22560987e-02  -1.89172931e-01  -2.94432272e-01   1.82407810e-01
   -8.39617486e-02  -1.75555989e-01  -3.81126209e-01]
 [  1.11132408e-01  -9.72341798e-02  -1.16667579e-01  -2.68551096e-01
    1.02219668e-01   1.70751857e-01  -8.92874500e-02   6.90141172e-02
   -3.19884043e-01  -2.58880617e-01  -3.25228506e-01   1.43564896e-02
   -1.11927932e-01   2.33971700e-01  -8.07584715e-02]
 [  2.53850228e-02  -8.38661323e-03  -6.29499204e-02  -1.16106606e-01
    7.21682736e-02   9.40017765e-02  -5.63045722e-02  -1.72780160e-02
   -9.87873958e-02  -5.37227587e-02  -1.66759633e-01  -1.74757303e-01
   -9.87584737e-03   1.87397012e-01   1.05936543e-01]
 [  2.27321903e-03   2.28152694e-03  -8.16433952e-03  -1.66018946e-02
    8.96277131e-03   3.88925929e-03  -1.01703385e-02  -1.22833352e-02
   -6.72002558e-03   2.68640192e-03  -2.58564750e-02  -4.85613004e-02
    3.37151276e-03   1.62600863e-02   2.06188068e-02]
 [  1.15131258e-04  -3.22519902e-04  -1.52191610e-04   3.84251131e-04
    7.40455696e-05   1.13674504e-04   1.06739973e-04   2.50175220e-04
   -5.07846799e-04  -2.68204150e-04   2.39878440e-04   1.53883443e-03
   -1.24616736e-03  -7.90157560e-04  -6.37575828e-04]
 [  3.85780810e-02  -1.19627690e-01  -1.91174589e-02   7.82952433e-02
    7.61589235e-02   5.34764761e-02   6.49548191e-03   1.73436737e-03
    5.39731651e-02  -1.95110129e-02  -3.07472748e-02   1.26869645e-01
   -2.09804541e-01   1.81575956e-02   2.74672837e-02]
 [  2.01744314e-01  -2.45698693e-01   6.81140823e-02   7.74965809e-02
    3.21106793e-01   5.43228119e-02  -2.82212612e-02  -2.15258005e-02
    2.75392498e-02   5.06677342e-02   9.39465003e-02   8.17203464e-02
    6.56954101e-02   2.85215504e-02   1.05389361e-01]
 [  2.32849975e-01   1.46934320e-01   2.70157334e-03   5.44499073e-02
    5.05491542e-02   4.12433527e-03   5.61756167e-02  -1.45931160e-01
   -2.23609176e-02   7.60848951e-02  -1.72996200e-01  -1.36535646e-01
    2.17040157e-01  -1.20432471e-01   8.71633252e-02]
 [  2.00821003e-01  -4.83676918e-02  -8.42083867e-02  -1.18547672e-02
   -1.39528864e-01  -1.22238434e-01   2.53391236e-01   3.38297792e-02
    7.80888981e-02   5.11470207e-02  -3.14473476e-01   2.31970289e-01
   -8.96535650e-02  -1.91525321e-01   2.77410042e-01]
 [  1.59441471e-01  -2.18765265e-01  -4.75889085e-02  -2.89668917e-01
    4.26257109e-02  -2.04206981e-01   5.63005385e-02   7.28108993e-02
   -3.52718114e-01  -1.09238690e-01  -1.02079279e-02   9.67337127e-02
    5.28748792e-02  -5.64784412e-02  -8.18306225e-04]
 [  3.48630321e-02  -1.49123539e-02  -5.96219458e-02  -1.60049690e-01
    4.70818569e-02   3.52166341e-02  -4.71788480e-02  -3.59908973e-02
   -1.44358487e-01  -7.44498233e-02  -5.65368430e-02  -2.58528405e-01
    1.23071533e-03   1.18615098e-01   1.11525361e-01]
 [  1.87173744e-03   4.49594228e-03  -3.53751778e-03  -1.49968156e-02
    2.18876208e-03   8.99879408e-03  -4.71968806e-03  -9.80451156e-03
    3.78354859e-05   2.09047633e-03  -1.45678011e-02  -4.08649267e-02
   -5.93209331e-03  -2.03615185e-04   1.23224105e-02]
 [  5.09411428e-05  -4.96623497e-05  -4.08226797e-05   2.14475569e-04
    1.07954332e-04   1.79016380e-04   7.09563595e-05  -6.21886184e-05
   -2.22280499e-04   4.44146446e-04  -4.55416791e-04   8.93853846e-04
   -1.48028089e-04  -8.59288383e-04   1.27472247e-05]
 [  5.04003004e-02  -7.98076397e-02   3.82449126e-02   4.00940398e-02
    1.27046774e-01   1.01517627e-01   1.78905284e-02  -5.22107004e-02
   -6.60045533e-02   1.04585538e-01  -1.30925737e-02   2.84152005e-01
   -1.54291557e-01  -1.98399557e-02   6.09317275e-02]
 [  1.93121184e-01   8.24284086e-02   2.05136640e-01  -7.18887695e-03
    2.35380531e-01   2.31349528e-01   5.33196744e-02  -9.39194907e-02
   -1.99708876e-01   3.03881851e-01   1.39112664e-01   1.40029045e-01
    2.25757778e-01   1.93298233e-01   1.26804464e-01]
 [  1.37069729e-01   2.14703247e-01  -4.28509870e-02   6.56478272e-02
   -2.66898013e-01   1.55560481e-01   2.82373281e-01   8.34004196e-02
   -3.00264452e-02   1.25900331e-01  -1.60454674e-01  -2.77042894e-01
    8.38499186e-02   8.33722387e-02  -4.52923033e-02]
 [  1.39267090e-01  -1.73715467e-01  -2.18789634e-01   8.95045185e-02
   -2.69858815e-01  -1.23862912e-01   2.35911177e-01   1.35707386e-01
    1.69124966e-01   1.51366163e-01  -4.60408832e-02   3.02274802e-01
   -1.30876593e-02   1.32144145e-01   1.22509388e-02]
 [  1.52231979e-01  -1.64595520e-01  -5.89698565e-04  -3.17573144e-01
   -4.22484565e-02  -3.52637220e-01   6.35568223e-02  -2.07498561e-02
   -1.92532054e-01   1.66078074e-01   3.03632689e-01  -2.58446133e-02
    1.10133356e-02  -1.00466083e-01   5.08301428e-02]
 [  3.36776795e-02   2.86920117e-02   2.61729828e-02  -1.49260290e-01
    2.44754389e-02  -1.74506980e-02   1.21033114e-02  -4.23883590e-02
   -2.58201808e-02   1.48778307e-02   5.57030920e-02  -2.49258522e-01
   -1.06674936e-01  -6.58523792e-02   7.07204251e-02]
 [  8.92272390e-04   4.23977755e-03  -2.83486749e-04  -6.29956111e-03
   -1.58094113e-03   5.76091914e-03  -2.59202099e-03  -1.44802815e-03
    5.43394834e-03   1.70145986e-03   2.04968754e-03  -1.49584317e-02
   -8.68948053e-03  -1.05500840e-02   3.54727806e-03]
 [  2.07156398e-05   9.83814804e-05  -5.64424881e-05   5.11910589e-05
    8.86462458e-05   1.57950643e-04   4.65642133e-05   1.99959934e-05
   -3.95160489e-05   3.46137576e-04  -1.59396058e-04   3.85127827e-04
    7.89208121e-05  -3.93249716e-04  -1.40829883e-05]
 [  4.73996408e-02   6.41642953e-02   7.79246525e-02  -4.65649495e-02
    1.01570305e-01   1.15476728e-01   2.79259144e-02  -4.10527650e-02
   -4.42148872e-03   8.46939758e-02   2.61928350e-02   2.40245731e-01
   -8.56362273e-02  -2.50949515e-02  -5.00927668e-02]
 [  1.76195759e-01   2.53383256e-01   1.93262959e-01  -8.26847045e-02
    1.28854631e-01   3.24991854e-01   1.28555570e-02   1.41947377e-01
   -1.07954044e-01   2.65356176e-01   7.05524914e-02   1.85594975e-01
   -1.22787585e-01   6.71296192e-02   2.01050274e-02]
 [  1.73045076e-01  -3.73191914e-02  -1.30368558e-01   6.18389795e-02
   -1.80496965e-01   3.18906135e-01   3.14120329e-02   4.70493095e-01
   -8.33715592e-02   1.45056316e-01  -1.46084458e-02  -2.68664106e-01
    3.98151154e-02  -5.27209658e-02  -7.60352341e-02]
 [  1.94041747e-01  -2.11340062e-01  -2.53475247e-01  -1.70223299e-02
   -2.04681771e-01   3.38118740e-02  -1.15669944e-01   1.47339771e-01
    9.08737076e-02   2.03085964e-01   1.77817960e-01   1.07910943e-01
    1.90769900e-01   2.39140702e-01  -1.94456468e-01]
 [  1.45701647e-01  -4.36491852e-02   5.18925708e-02  -3.61228835e-01
   -7.12602007e-02  -1.65508537e-01  -7.47363529e-02  -5.36186060e-02
    1.47341153e-01   3.44059945e-01   1.04398677e-01  -2.26375907e-01
   -2.20586475e-01   3.77978830e-02   8.50785357e-02]
 [  4.34712062e-02   5.14149899e-02   6.45398268e-02  -1.49903232e-01
    5.75271116e-02  -9.75000430e-02   2.47750755e-02   2.97788164e-02
    1.15234104e-01   1.13538248e-01  -3.05584434e-02  -1.63478171e-01
   -2.29634273e-01  -1.53898686e-01   1.41005237e-02]
 [  4.19731452e-05   2.13533271e-04   3.89131627e-05  -2.19959839e-04
   -5.74047153e-05   1.75710978e-04   1.24578446e-05   3.88297932e-05
    2.53305921e-04   3.01674922e-04   4.93709881e-05  -7.09848074e-04
   -2.96602929e-04  -3.90344398e-04   1.05450204e-04]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
    0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
    0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
    0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  4.47272192e-02   1.59937035e-01   8.85767445e-02  -5.68014004e-02
    5.51179145e-02  -3.73523006e-02   3.53745488e-02  -8.32905030e-05
    1.42183846e-01  -2.02603322e-02   4.68290723e-02   1.23921847e-01
   -9.66576661e-02   5.53662348e-02  -1.46957185e-01]
 [  1.48666338e-01   3.67953714e-01   9.09942176e-02  -4.09963686e-02
    1.07555438e-01  -6.89034183e-02  -1.20763951e-01   2.61522936e-01
    8.57408559e-02  -7.01593000e-02   3.75100464e-02   5.88107174e-02
   -2.49843854e-01  -1.17828808e-01   1.14268713e-03]
 [  1.77790283e-01   1.62544210e-01  -2.63792449e-01   1.34940464e-01
    1.97160539e-02   9.04724334e-03  -3.26321923e-01   2.67886519e-01
   -7.25541575e-02  -9.46257775e-02   1.66937497e-01  -4.23761673e-02
   -9.13858767e-02  -3.21875749e-01   2.92515828e-01]
 [  2.00740037e-01   8.33442616e-02  -2.78708404e-01   7.91006312e-03
   -1.23583286e-01   7.29608787e-02  -3.50533694e-01  -1.88602955e-01
    5.44084865e-02  -2.03439537e-01   2.60402327e-01   1.13880547e-01
    1.28909840e-01   5.97958056e-02   4.80835589e-02]
 [  1.68315005e-01   3.68311431e-02   1.69580061e-01  -2.67613904e-01
   -1.51793280e-01   1.57790609e-02  -2.97750539e-01  -6.12052675e-02
    4.01024022e-01  -9.89423409e-03  -1.71096595e-01  -1.26034072e-02
    8.68426031e-02   2.20200578e-01   2.35836011e-02]
 [  5.55463219e-02   2.16171980e-02   1.28595956e-01  -9.72662777e-02
    1.32886974e-02  -1.05727042e-01  -5.90452565e-02   3.13006911e-02
    1.75614634e-01   1.06524438e-01  -1.69943476e-01   9.47909741e-03
   -2.60085778e-02  -4.46333147e-02  -9.13585895e-02]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
    0.00000000e+00   0.00000000e+00   0.00000000e+00  -1.17549435e-38
   -1.50463277e-36   0.00000000e+00   1.57772181e-30  -3.15544362e-30
    0.00000000e+00   1.29246971e-26   0.00000000e+00]
 [  1.67504402e-04   1.28882059e-03   2.87791411e-04  -3.26939443e-04
   -4.95899688e-04  -4.02041697e-04   1.26241175e-03  -3.32512943e-04
    1.53554895e-03  -1.01074043e-03  -3.20522163e-04  -7.86838225e-05
   -1.69452006e-03   2.60367444e-03  -2.41431880e-03]
 [  3.03093051e-02   1.06896456e-01   5.12953751e-02  -2.57937981e-02
    8.23369135e-03  -9.76985451e-02   7.31127555e-02   1.40483522e-02
    9.16907894e-02  -8.63254097e-02   2.55992858e-02   4.54723870e-02
   -4.19557161e-02   1.97545107e-01  -1.64283579e-01]
 [  1.34877039e-01   3.02194117e-01   1.36040092e-01   1.12864584e-01
    6.34787506e-02  -3.90091098e-01   6.63281597e-02   2.06677049e-01
   -5.57129064e-02  -1.91146926e-01   1.20842700e-01   6.23582549e-04
    6.22329917e-02   2.23085732e-01  -1.29167822e-01]
 [  1.41021382e-01   2.46279160e-01  -2.63655299e-01   1.68103153e-01
    6.43237522e-02  -2.27967998e-01  -6.82688700e-02  -6.62769056e-02
   -8.05308910e-03   7.63429738e-02  -1.20002743e-01   9.54672334e-02
   -7.60184742e-02   1.71375844e-01   1.66631036e-01]
 [  1.48985416e-01   2.08233426e-01  -2.98133936e-01  -8.95447861e-02
   -1.87453515e-02   1.06740111e-01   1.27226331e-01  -3.49371287e-01
   -7.20283425e-03  -1.00361462e-01   2.13873120e-01  -1.71139992e-02
   -1.44994331e-01   8.28292508e-02  -1.39966391e-01]
 [  1.60831673e-01   1.15680852e-02   2.45802507e-01  -1.57571849e-01
   -1.80178295e-01   1.29313310e-01   2.55384873e-02  -2.25698849e-03
    1.45261460e-01  -3.57264726e-01   7.45239284e-02   5.99995943e-02
    1.93511754e-01   1.25843033e-01   2.38288877e-01]
 [  6.64759571e-02  -3.69936501e-02   2.20327553e-01   6.50425783e-02
   -8.20138184e-02  -4.33746183e-02  -2.11619102e-01   3.48086586e-02
    6.51820844e-02   4.34631873e-02  -2.15477759e-01   2.40988202e-02
    8.74900405e-02  -3.15142587e-02  -7.97475596e-02]
 [  5.51082114e-04   1.60995959e-03   1.37358950e-03   2.87640051e-03
   -2.29950297e-03  -6.32826691e-04  -6.50954540e-03   1.11075314e-04
   -3.85066271e-04   4.42415416e-03  -5.63863025e-03  -6.12149427e-03
    8.27486729e-04  -1.80702783e-03  -5.00860817e-03]
 [  1.37552339e-04   6.92869783e-04   2.88805865e-04  -1.38515923e-04
   -3.96883048e-04  -7.31601023e-04   1.67555141e-03   1.23563168e-04
    3.74730502e-04  -8.17524510e-04  -1.66957102e-03  -1.12953423e-03
   -7.00034560e-04   1.72697679e-03  -1.24169245e-03]
 [  1.36866964e-02  -8.44171416e-03   1.12165748e-02   1.77914626e-02
    1.17450802e-02  -2.38971737e-02   5.56736638e-02   3.98467852e-02
    1.56763259e-02  -4.59986688e-02   1.41562697e-02  -4.39030499e-02
   -2.70759181e-02   1.04308451e-01  -4.03657818e-02]
 [  1.47014114e-01  -5.68683443e-02   1.61161328e-01   2.25180091e-01
    1.19161989e-01  -2.49051004e-01   1.76556789e-01   1.78766386e-01
   -1.14654605e-01  -1.08633739e-01   1.05820298e-01  -1.74352412e-01
    2.90204467e-02   2.95832296e-01  -3.33305741e-02]
 [  1.86218828e-01   9.14527770e-02  -1.12096313e-01   1.62267725e-01
    1.42419640e-01  -1.89714346e-01   7.26492342e-04  -2.02694163e-01
   -7.08871133e-02   1.18596161e-01  -3.25413673e-01  -6.36621273e-02
    1.94168237e-01   2.12860850e-02   1.59472127e-01]
 [  1.84080924e-01   1.05927312e-01  -9.09870317e-02  -6.35642969e-02
   -1.80451008e-02   1.36501416e-01   4.00033295e-01  -2.79050189e-01
    1.20356250e-01  -1.45658598e-01   3.92528710e-02  -6.90497965e-02
   -8.66047120e-02  -9.99834374e-02  -3.59532456e-02]
 [  1.71466725e-01  -1.38629203e-01   2.94200506e-01   7.06599788e-02
   -2.11780521e-01   5.64368625e-02   1.16819458e-01  -2.21368090e-02
   -2.65240398e-02  -2.64118496e-01   8.65203785e-02   1.81867944e-02
   -9.98144737e-03  -1.22710692e-01   3.78183327e-01]
 [  7.17104866e-02  -6.35930658e-02   1.52733000e-01   2.18765640e-01
   -1.40208026e-01  -2.34262258e-02  -2.63227376e-01  -1.62648128e-01
   -6.81932867e-02   7.71286064e-02  -1.21103386e-01  -5.26913957e-02
   -9.50194594e-02   5.11665255e-02  -3.53300758e-03]
 [  3.91559838e-03   9.32255312e-04   7.65996455e-04   2.18361173e-02
   -1.64693540e-02   6.39296744e-03  -1.03365224e-02  -4.15025206e-02
   -6.64251333e-03   1.65445151e-02  -3.45756854e-03  -3.46504485e-02
   -1.92267529e-02  -6.08027450e-03  -1.33458679e-02]
 [  1.06007935e-05   9.43483882e-06  -3.31960238e-05  -1.42483191e-05
   -1.10952664e-05  -9.21939093e-05   1.11258145e-04  -6.13700617e-05
   -1.95453466e-04  -2.71853035e-05  -7.43777195e-05   2.83447821e-05
    5.22526796e-05   1.76488237e-04   2.47067769e-05]
 [  5.29455366e-03  -1.41274167e-02  -9.85798597e-03   1.76706379e-02
    2.09444566e-02   1.26390298e-02   1.32727598e-02   7.28384222e-03
    1.63751763e-02  -2.06138667e-02  -1.10018958e-02  -1.47952306e-02
   -4.92616181e-02   3.18770176e-02   2.07145117e-02]
 [  1.07432660e-01  -2.36509398e-01  -6.58952515e-02   1.19871997e-01
    2.08080374e-01   7.53753930e-02   4.59848999e-02   8.76460005e-02
    2.28678138e-01  -1.14085493e-01  -1.61074551e-04  -1.16460283e-01
   -2.77991563e-01   1.69876706e-01   6.90345043e-02]
 [  2.34430118e-01  -1.42724209e-01   2.55591556e-02   8.77383165e-02
    2.21473680e-01   3.02759106e-02  -3.50940754e-02  -9.71662143e-02
    1.12197210e-01  -2.22741634e-02   4.57997806e-02  -1.64222313e-01
    2.14020350e-01  -2.27578313e-01  -2.45755373e-01]
 [  2.29300708e-01  -1.04634966e-02   2.03622356e-01   1.24444310e-01
   -2.11895541e-01   5.82600728e-02   6.78597096e-02  -7.11951367e-02
   -8.85583007e-02  -7.89502804e-02   1.17116256e-01   4.78121347e-03
   -6.36782378e-02  -2.21895219e-01  -3.13772056e-01]
 [  1.30885120e-01  -9.01286131e-02   1.83210572e-01   2.23848818e-01
   -3.04465539e-01  -3.81317892e-02  -1.71796835e-01  -1.43858927e-01
   -2.91136538e-01   4.13846735e-02   9.85176134e-03  -1.10586028e-02
   -2.96302893e-01   7.71481507e-02  -1.98226832e-02]
 [  3.92343661e-02  -3.68410903e-02   2.14953332e-02   1.66309866e-01
   -1.02221506e-01  -2.14569983e-02  -9.82756728e-02  -2.50105290e-01
   -1.31436704e-01   1.10726379e-01  -8.47448184e-03  -9.40068545e-02
   -2.65994690e-01   1.10389726e-01  -8.76263880e-02]
 [  6.76004954e-03  -1.15150706e-02  -6.40453868e-03   3.49806282e-02
   -2.55438818e-02   2.09921777e-02   8.05902428e-03  -1.09451727e-01
   -7.84179381e-03   3.07986761e-02   2.81547364e-02  -5.86491272e-02
   -5.82076739e-02  -4.90860622e-03  -3.87436067e-02]]

Практическое задание 2 (40%)

Изучение алгоритмов кластеризации на разных выборках

Кластеризация цифр с помощью dbscan

На данных из sklearn.datasets.load_digits примените алгоритмы кластеризации (знания о метках классов при кластеризации использовать нельзя):

  • dbscan запускайте при различных параметрах eps и minsamples, для всех экспериментов можете выбрать одну метрику (вспомните семинар про метрические алгоритмы);
  • Используя метки классов цифр, оцените качество различных кластеризаций при помощи Adjusted Mutual Information и Adjusted Rand Index.
  • визуалируйте изображения тех цифр, которые соответствуют core_points;
  • визуалируйте изображения тех цифр, которые соответствуют выбросам;
  • сделайте выводы и применимости алгоритмов.

In [8]:
from sklearn.decomposition import PCA
from sklearn.cluster import DBSCAN
from sklearn import metrics
import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.decomposition import PCA
%matplotlib inline

In [9]:
np.random.seed(1)

digits = load_digits()
data = (digits.data)
target = digits.target

In [10]:
tsne = TSNE(n_components=2)
twod_data = tsne.fit_transform(data)

In [11]:
plt.figure(figsize=(10, 16))
colors = plt.cm.Spectral(np.linspace(0, 1, 10))

for i, color in enumerate(colors):
    X_i = twod_data[target == i]
    plt.scatter(X_i[:, 0], X_i[:, 1], c=color, label=str(i))
plt.legend(loc='best')
plt.title('clusters after t-SNE')
plt.show()



In [12]:
n_samples, n_features = data.shape
n_digits = len(np.unique(digits.target))
labels_true = digits.target
print 'n_digits: {}, n_samples {}, n_features {}'.format(n_digits, n_samples, n_features)

def run_dbscan(eps, min_samples):
    db = DBSCAN(eps=eps, min_samples=min_samples).fit(twod_data)
    core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
    core_samples_mask[db.core_sample_indices_] = True
    labels = db.labels_
    n_clusters_ = n_digits
    return (db, 
            metrics.adjusted_rand_score(labels_true, labels),
            metrics.adjusted_mutual_info_score(labels_true, labels))


n_digits: 10, n_samples 1797, n_features 64

In [13]:
from itertools import product
def get_best_params(eps_, min_samples_):
    quality = []
    for eps, min_sample in product(eps_, min_samples_):
        r = run_dbscan(eps, min_sample)
        quality.append(r[1]**2 + r[2]**2)
    return list(product(eps_, min_samples_))[np.argmax(quality)]

In [14]:
best_params = get_best_params(np.arange(1, 5, 0.01), np.arange(5, 20))
print best_params


(1.4600000000000004, 5)

In [15]:
db = run_dbscan(*best_params)[0]
print run_dbscan(*best_params)


(DBSCAN(algorithm='auto', eps=1.4600000000000004, leaf_size=30,
    metric='euclidean', min_samples=5, n_jobs=1, p=None), 0.8905589332378463, 0.86725834349608732)

In [16]:
len(np.unique(db.labels_))


Out[16]:
16

In [17]:
colors = plt.cm.Spectral(np.linspace(0, 1, len(np.unique(db.labels_))))
plt.figure(figsize=(10, 16))
for i, label in enumerate(np.unique(db.labels_)):
    X_i = twod_data[db.labels_ == label]
    plt.scatter(X_i[:, 0], X_i[:, 1], c=colors[i], label=str(label))
plt.legend(loc='best')
plt.show()


Core points


In [18]:
cores_n = len(db.core_sample_indices_)
print 'number of core  points: {}'.format(cores_n)
plt.figure(figsize=(10, 20))
for i in xrange(100):
    plt.subplot(10, 10, i + 1)
    plt.imshow(digits.images[db.core_sample_indices_[i]], cmap='binary') 
plt.show()


number of core  points: 1767

Noise points


In [19]:
noise = [i for i, x in enumerate(db.labels_) if x == -1]
print 'number of noise  points: {}'.format(len(noise))
plt.figure(figsize=(10, 20))
for i, x in enumerate(noise[:100]):
    plt.subplot(10, 10, i + 1)
    plt.imshow(digits.images[x], cmap='binary') 
plt.show()


number of noise  points: 20

Судя по результатам можно заключить, что понижение размерности t-SNE и использование DBSCAN оправдано.

Уменьшение палитры изображения

  • для картинки нужно уменьшить число цветов в палитре; для этого нужно выделить кластеры в пространстве RGB, объекты соответствуют пикселам изображения; после выделения кластеров, все пикселы, отнесенные в один кластер, заполняются одним цветом; этот цвет может быть центроидом соответствующего кластера, медианным цветом по кластеру.
  • Попробуйте различные алгоритмы кластеризации:
     -- KMeans
     -- MeanShift
     -- AgglomerativeClustering
    
    Рассмотрите число кластеров K = 2, 3, 10, 20
  • Для различных кластеризаций оцените и сравните потери от уменьшения цветов при помощи метрики SSIM. Какой способ оказался лучшим?

In [1]:
import matplotlib.pyplot as plt
img = plt.imread('two-birds.jpg')
plt.figure(figsize=(10, 16))
plt.imshow(img)
plt.axis('off')
plt.show()



In [2]:
from skimage.measure import compare_ssim
from sklearn.cluster import KMeans, AgglomerativeClustering, MeanShift

In [9]:
def run(clusterization, img):
    img_data = np.copy(img).reshape(-1, 3)
    clusters = clusterization.fit_predict(img_data)
    for i, x in enumerate(np.unique(clusters)):
        current_cluster = img_data[clusters == x]
        img_data[clusters == x] = np.mean(current_cluster, axis=0)
    new_img = img_data.reshape(img.shape)
    plt.figure(figsize=(10, 10))
    plt.title('clusters = {}'.format(len(np.unique(clusters))))
    plt.imshow(new_img)
    plt.show()
    return new_img, compare_ssim(img, new_img, multichannel=True)

In [23]:
K = [2, 3, 10, 20]
for k in K:
    print '\nSSIM = {:.3f}\n'.format(run(KMeans(n_clusters=k), img)[1])


SSIM = 0.533

SSIM = 0.563

SSIM = 0.678

SSIM = 0.754


In [24]:
from sklearn.cluster import estimate_bandwidth

img_data = np.copy(img).reshape(-1, 3)
quants = [0.2, 0.17, 0.055, 0.028]  # for needed K
for q in quants:
    bandwidth = estimate_bandwidth(img_data, 
                                   quantile=q, 
                                   n_samples=1000)
    ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
    print '\nSSIM = {}\n'.format(run(ms, img)[1])


SSIM = 0.450593180165

SSIM = 0.574089705547

SSIM = 0.661645669777

SSIM = 0.712411409404


In [6]:
from sklearn.neighbors import kneighbors_graph
import numpy as np
img = plt.imread('two-birds.jpg')
img_data = np.copy(img).reshape(-1, 3)

In [10]:
graph = kneighbors_graph(img_data, 30, include_self=False)
K = [2, 3, 10, 20]
for k in K:
    print '\nSSIM = {:.3f}\n'.format(run(AgglomerativeClustering(n_clusters=k, connectivity=graph), img)[1])


/home/daniel/anaconda3/envs/p2/lib/python2.7/site-packages/sklearn/cluster/hierarchical.py:193: UserWarning: the number of connected components of the connectivity matrix is 12 > 1. Completing it to avoid stopping the tree early.
  connectivity, n_components = _fix_connectivity(X, connectivity)
SSIM = 0.521

SSIM = 0.529

SSIM = 0.656

SSIM = 0.735

Лучший результат на данной картинке показал алгоритм KMeans


In [ ]: