GitXplorerGitXplorer
P

scikit-learn-copy

public
0 stars
0 forks
0 issues

Commits

List of commits on branch master.
Unverified
ac30a1856987625e961f4e770786ef3921b5b114

Контрольная точка 3.

PPeterZhizhin committed 8 years ago
Unverified
4bf3501f659ecb04be03bb10f1747b8de7e99fca

Добавлен reconstruct для SpectralEmbedding

PPeterZhizhin committed 8 years ago
Unverified
e4829629186fe9459b5a5947525ac43cae2ca90f

Исправлена опечатка в README.md.

PPeterZhizhin committed 8 years ago
Unverified
32410243edbab1de5c73f3549aaa6e364aaad0f3

Изменён README.md для контрольной точки 2. Добавлены текущие результаты проекта.

PPeterZhizhin committed 8 years ago
Unverified
1fedc700dc923f8f4b009027abebf26121c0ce89

Merge remote-tracking branch 'origin/master'

PPeterZhizhin committed 8 years ago
Unverified
2aac50dda82ee804f84582ed14ef4e6c8713c445

Added OoS for Spectral embedding nearest neighbors affinity and rbf affinity.

PPeterZhizhin committed 8 years ago

README

The README file for this repository.

Реализация алгоритма спектральных вложений Грассмана-Штифеля

Жижин Петр Николаевич 152 группа

Целью данного проекта является модернизация библиотеки scikit-learn с целью добавления нового функционала в раздел manifold библиотеки.

Актуальность решаемой задачи

Библиотека scikit-learn является одной из самых популярных библиотек машинного обучения, которая используется большим числом специалистов по анализу данных по всему миру. На данный момент в библиотеки реализованы некоторые алгоритмы снижения размерности среди которых есть в том числе и алгоритмы MDS и IsoMap.

Несмотря на большую значимость библиотеки, в нее не входят для некоторых алгоритмов отсутствует возможность построения вложения для точек, не входящих в обучаюющую выборку (построения out-of-sample вложения). Так же в ней нет алгоритмов для получения исходных точек из пространства вложения (reverse out-of-sample).

Обзор использованных технологических решений

В рамках решения задачи были использованы следующие технологические решения:

  • Встроенные в scikit-learn алгоритмы
  • Python 2, Python 3
  • Cython 2, Cython 3

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

План решения задачи

  • Реализовать алгоритм для построения out-of-sample вложения для алгоритмов MDS и IsoMap.
  • Реализовать алгоритм reverse out-of-sample для алгоритмов MDS и IsoMap.

Отчёт по контрольной точке номер 2

Запуск проекта

Для запуска проекта необходимо выполнить инструкции по сборке проекта с официального сайта scikit-learn. Их можно найти по ссылке и по ссылке на Github.

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

Для этого перед сборкой нужно написать (на Linux и Mac OS, на Windows используйте команды, которые специфичны для Windows):

$ export PYTHONPATH=<ПУТЬ ДО ПРОЕКТА>:$PYTHONPATH

Описание реализованной функциональности

В рамках данной контрольной точки был реализован алгоритм построения вложения Spectral Embedding (sklearn.manifold.SpectralEmbedding) для точек, которые не входят в обучающую выборку.

Реализован алгоритм вложения для функции близости k-ближайших соседей и для функции RBF (Radial basis function kernel).

Конкретно реализован метод transform для класса SpectralEmbedding, который будет доступен в случае, если конструктору будет передан параметр include_oos равный True, а мера близости (affinity) равна k-ближайших или RBF (affinity == 'nearest_neighbors' или affinity == 'rbf') для солвера собственных векторов arpack (стандартный солвер).

Аргументы методов передаются в таком же формате, как и в любом другом алгоритме из пакета sklearn.manifold.

Пример (построение вложения для точек, сгенерированных из выборки трёхмерной S-кривой):

from sklearn.manifold import SpectralEmbedding
from sklearn.datasets.samples_generator import make_s_curve

# Количество точек для вложения.
SAMPLES_COUNT = 1000
# Состояние случайного генератора, для повторяемости.
RAND_STATE = 1337

# Генерация некоторого распределения для вложения.
# Могло быть использовано и любое другое, характерное для данных,
# распределение.
s_curve, colors = make_s_curve(SAMPLES_COUNT, random_state=RAND_STATE)

# Для того, чтобы иметь возможность строить вложение для новых
# точек, необходимо передать параметр include_oos равный True.
# Если будет передан False, то дополнительных затрат (по сравнению
# с алгоритмом до модификации) не будет.
SE = SpectralEmbedding(n_components=2, include_oos=True)
# Обучение модели (обучение вложения по обучающей выборке).
# Уже было реализовано в библиотеке.
s_curve_embedded = SE.fit_transform(s_curve)
# Построение "Out of Sample" для тех же точек (можно и для других
# точек из того же распределения).
s_curve_oos_embedded = SE.transform(s_curve)

Алгоритм построения вложения был взят из статьи Out-of-Sample Extensions for LLE, Isomap, MDS, Eigenmaps, and Spectral Clustering и был расширен для случая нормированного графа Лапласиана, как это указано в базовой статье алгоритма, уже реализованного в scikit-learn: A Tutorial on Spectral Clustering, 2007 Ulrike von Luxburg (Страница 5, Proposition 3, пункт 2).

Отчёт по контрольной точке номер 3

Изменения в проекте

  • Добавлен метод inverse_transform для класса SpectralEmbedding, который позволяет отображать точки из пространства сниженной размерности, в пространство исходных векторов.

  • Написана документация к внесённым изменениям (для её сборки необходимо обратиться к инструкции по сборке документации в исходном проекте scikit-learn).