Домашнее задание №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. кластер(центр=23/3): 7, 8, 8

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

Критерием остановки 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 в пространство меньшей размерности с минимальными потерями точности? Если да, то чему примерно будет равна размернось

Если хотим терять не более 5% точности, то эффективная размерность $\sim 90$ по первому пункту. Так как 90 не сильно меньше 100, то понижать размерность с помощью PCA нет особого смысла. Либо терять точность.

Практическое задание 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 [7]:
X_test.shape


Out[7]:
(540, 64)

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 [13]:
np.sum((Z.dot(U_reduced.T) - X)**2) / np.sum((X)**2)


Out[13]:
0.051949930598809139

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 [20]:
img = plt.imread('two-birds.jpg')
plt.figure(figsize=(10, 16))
plt.imshow(img)
plt.axis('off')
plt.show()



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

In [22]:
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