Skip to content

Commit

Permalink
Merge f07e583 into c870b67
Browse files Browse the repository at this point in the history
  • Loading branch information
shubham808 committed Jun 21, 2018
2 parents c870b67 + f07e583 commit 09332aa
Show file tree
Hide file tree
Showing 12 changed files with 86 additions and 59 deletions.
2 changes: 1 addition & 1 deletion data
43 changes: 43 additions & 0 deletions doc/cookbook/source/examples/converter/diffusion_maps.rst
@@ -0,0 +1,43 @@
================
Diffusion Maps
================

Diffusion Maps is a non-linear dimensionality reduction method that uses
eigenfunctions of Markov matrices to diffusion maps for efficient
representations of complex geometric structures.
The diffusion kernel :math: `k` must satisfy
the following properties:

1. :math: `k` is symmetric :math: `{\bf k}(x, y) = {\bf k}(y, x)`
2. :math: `k` is positivity preserving :math: `{\bf k}(x, y) ≥ 0`


For more information see :cite:`Coifman-Lafon2006Diffusionmaps`.

-------
Example
-------

We create CDenseFeatures (RealFeatures, here 64 bit float values).

.. sgexample:: diffusionmaps.sg:create_features

We create a :sgclass:`CDiffusionMaps` instance, and set its parameters.

.. sgexample:: diffusionmaps.sg:set_parameters

Then we apply diffusion maps, which gives us distance embeddings.

.. sgexample:: diffusionmaps.sg:apply_convert

We can also extract the estimated feature_matrix.

.. sgexample:: diffusionmaps.sg:extract

----------
References
----------
:wiki:`Diffusion_map`

.. bibliography:: ../../references.bib
:filter: docname in docnames
18 changes: 18 additions & 0 deletions examples/meta/src/converter/diffusionmaps.sg
@@ -0,0 +1,18 @@
File f_feats = csv_file("../../data/fm_train_real.dat")

#![create_features]
Features feats = features(f_feats)
#![create_features]

#![set_parameters]
Kernel k = kernel("GaussianKernel", cache_size=10, log_width=10.0)
Converter diffusion_maps = converter("DiffusionMaps", target_dim=1, kernel=k, t=10)
#![set_parameters]

#![apply_convert]
Features converted = diffusion_maps.apply(feats)
#![apply_convert]

#![extract]
RealMatrix feature_matrix = converted.get_real_matrix("feature_matrix")
#![extract]
@@ -1,4 +1,4 @@
CSVFile f_feats("../../data/ica_2_sources.dat")
File f_feats = csv_file("../../data/ica_2_sources.dat")

Math:init_random(1)

Expand All @@ -7,17 +7,14 @@ Features feats = features(f_feats)
#![create_features]

#![set_parameters]
FastICA ica()
ica.set_max_iter(200)
ica.set_tol(0.00001)
Converter ica = converter("FastICA", max_iter=200, tol=0.00001)
#![set_parameters]

#![apply_convert]
Features converted = ica.apply(feats)
#![apply_convert]

#![extract]
RealMatrix mixing_matrix = ica.get_mixing_matrix()
RealMatrix mixing_matrix = ica.get_real_matrix("mixing_matrix")
RealMatrix unmixed_signal = converted.get_real_matrix("feature_matrix")
#![extract]

@@ -1,4 +1,4 @@
CSVFile f_feats("../../data/ica_2_sources.dat")
File f_feats = csv_file("../../data/ica_2_sources.dat")

Math:init_random(1)

Expand All @@ -7,17 +7,14 @@ Features feats = features(f_feats)
#![create_features]

#![set_parameters]
FFSep ica()
ica.set_max_iter(200)
ica.set_tol(0.00001)
Converter ica = converter("FFSep", max_iter=200, tol=0.00001)
#![set_parameters]

#![apply_convert]
Features converted = ica.apply(feats)
#![apply_convert]

#![extract]
RealMatrix mixing_matrix = ica.get_mixing_matrix()
RealMatrix mixing_matrix = ica.get_real_matrix("mixing_matrix")
RealMatrix unmixed_signal = converted.get_real_matrix("feature_matrix")
#![extract]

@@ -1,4 +1,4 @@
CSVFile f_feats("../../data/ica_2_sources.dat")
File f_feats = csv_file("../../data/ica_2_sources.dat")

Math:init_random(1)

Expand All @@ -7,17 +7,14 @@ Features feats = features(f_feats)
#![create_features]

#![set_parameters]
Jade ica()
ica.set_max_iter(200)
ica.set_tol(0.00001)
Converter ica = converter("Jade", max_iter=200, tol=0.00001)
#![set_parameters]

#![apply_convert]
Features converted = ica.apply(feats)
#![apply_convert]

#![extract]
RealMatrix mixing_matrix = ica.get_mixing_matrix()
RealMatrix mixing_matrix = ica.get_real_matrix("mixing_matrix")
RealMatrix unmixed_signal = converted.get_real_matrix("feature_matrix")
#![extract]

@@ -1,4 +1,4 @@
CSVFile f_feats("../../data/ica_2_sources.dat")
File f_feats = csv_file("../../data/ica_2_sources.dat")

Math:init_random(1)

Expand All @@ -7,17 +7,14 @@ Features feats = features(f_feats)
#![create_features]

#![set_parameters]
JediSep ica()
ica.set_max_iter(200)
ica.set_tol(0.00001)
Converter ica = converter("JediSep", max_iter=200, tol=0.00001)
#![set_parameters]

#![apply_convert]
Features converted = ica.apply(feats)
#![apply_convert]

#![extract]
RealMatrix mixing_matrix = ica.get_mixing_matrix()
RealMatrix mixing_matrix = ica.get_real_matrix("mixing_matrix")
RealMatrix unmixed_signal = converted.get_real_matrix("feature_matrix")
#![extract]

@@ -1,4 +1,4 @@
CSVFile f_feats("../../data/ica_2_sources.dat")
File f_feats = csv_file("../../data/ica_2_sources.dat")

Math:init_random(1)

Expand All @@ -7,17 +7,14 @@ Features feats = features(f_feats)
#![create_features]

#![set_parameters]
SOBI ica()
ica.set_max_iter(200)
ica.set_tol(0.00001)
Converter ica = converter("SOBI", max_iter=200, tol=0.00001)
#![set_parameters]

#![apply_convert]
Features converted = ica.apply(feats)
#![apply_convert]

#![extract]
RealMatrix mixing_matrix = ica.get_mixing_matrix()
RealMatrix mixing_matrix = ica.get_real_matrix("mixing_matrix")
RealMatrix unmixed_signal = converted.get_real_matrix("feature_matrix")
#![extract]

24 changes: 0 additions & 24 deletions examples/undocumented/python/converter_diffusionmaps.py

This file was deleted.

1 change: 1 addition & 0 deletions src/interfaces/swig/Converter.i
Expand Up @@ -29,6 +29,7 @@
%rename(FFSep) CFFSep;
%rename(JediSep) CJediSep;
%rename(UWedgeSep) CUWedgeSep;
%rename(Converter) CConverter;
%rename(FastICA) CFastICA;

%newobject shogun::CEmbeddingConverter::apply;
Expand Down
9 changes: 5 additions & 4 deletions src/shogun/converter/EmbeddingConverter.cpp
Expand Up @@ -75,9 +75,10 @@ void CEmbeddingConverter::init()
{
SG_ADD(&m_target_dim, "target_dim",
"target dimensionality of preprocessor", MS_AVAILABLE);
SG_ADD((CSGObject**)&m_distance, "distance",
"distance to be used for embedding", MS_AVAILABLE);
SG_ADD((CSGObject**)&m_kernel, "kernel", "kernel to be used for embedding",
MS_AVAILABLE);
SG_ADD(
&m_distance, "distance", "distance to be used for embedding",
MS_AVAILABLE);
SG_ADD(
&m_kernel, "kernel", "kernel to be used for embedding", MS_AVAILABLE);
}
}
3 changes: 3 additions & 0 deletions src/shogun/util/factory.h
Expand Up @@ -7,6 +7,7 @@
#define FACTORY_H_

#include <shogun/base/class_list.h>
#include <shogun/converter/Converter.h>
#include <shogun/distance/Distance.h>
#include <shogun/evaluation/Evaluation.h>
#include <shogun/features/DenseFeatures.h>
Expand All @@ -31,6 +32,7 @@ namespace shogun
CMulticlassStrategy* multiclass_strategy(const std::string& name);
CECOCEncoder* ecoc_encoder(const std::string& name);
CECOCDecoder* ecoc_decoder(const std::string& name);
CConverter* converter(const std::string& name);

#define BASE_CLASS_FACTORY(T, factory_name) \
T* factory_name(const std::string& name) \
Expand All @@ -49,6 +51,7 @@ namespace shogun
BASE_CLASS_FACTORY(CMulticlassStrategy, multiclass_strategy)
BASE_CLASS_FACTORY(CECOCEncoder, ecoc_encoder)
BASE_CLASS_FACTORY(CECOCDecoder, ecoc_decoder)
BASE_CLASS_FACTORY(CConverter, converter)

template <class T>
CFeatures* features(SGMatrix<T> mat)
Expand Down

0 comments on commit 09332aa

Please sign in to comment.