Shark machine learning library
Installation
Tutorials
Benchmarks
Documentation
Quick references
Class list
Global functions
include
shark
Models
Clustering
SoftClusteringModel.h
Go to the documentation of this file.
1
//===========================================================================
2
/*!
3
*
4
*
5
* \brief Model for "soft" clustering.
6
*
7
*
8
*
9
* \author T. Glasmachers
10
* \date 2011
11
*
12
*
13
* \par Copyright 1995-2017 Shark Development Team
14
*
15
* <BR><HR>
16
* This file is part of Shark.
17
* <https://shark-ml.github.io/Shark/>
18
*
19
* Shark is free software: you can redistribute it and/or modify
20
* it under the terms of the GNU Lesser General Public License as published
21
* by the Free Software Foundation, either version 3 of the License, or
22
* (at your option) any later version.
23
*
24
* Shark is distributed in the hope that it will be useful,
25
* but WITHOUT ANY WARRANTY; without even the implied warranty of
26
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27
* GNU Lesser General Public License for more details.
28
*
29
* You should have received a copy of the GNU Lesser General Public License
30
* along with Shark. If not, see <http://www.gnu.org/licenses/>.
31
*
32
*/
33
//===========================================================================
34
35
#ifndef SHARK_MODELS_CLUSTERING_SOFTCLUSTERINGMODEL_H
36
#define SHARK_MODELS_CLUSTERING_SOFTCLUSTERINGMODEL_H
37
38
39
#include <
shark/Models/Clustering/ClusteringModel.h
>
40
41
42
namespace
shark
{
43
44
45
///
46
/// \brief Model for "soft" clustering.
47
///
48
/// \par
49
/// The SoftClusteringModel is based on an \ref clustering
50
/// object. Given an input, the model outputs the cluster
51
/// membership function, which consists of a non-negative
52
/// value per cluster, and all memberships add up to one.
53
///
54
/// \par
55
/// See also HardClusteringModel for the best matching cluster.
56
///
57
/// \ingroup clustering
58
template
<
class
InputT>
59
class
SoftClusteringModel
:
public
ClusteringModel
<InputT, RealVector>
60
{
61
typedef
ClusteringModel<InputT, RealVector>
base_type
;
62
typedef
AbstractClustering<InputT>
ClusteringType
;
63
typedef
typename
base_type::InputType
InputType;
64
typedef
typename
base_type::OutputType
OutputType;
65
typedef
typename
base_type::BatchOutputType
BatchOutputType;
66
typedef
typename
base_type::BatchInputType
BatchInputType;
67
public
:
68
/// Constructor
69
SoftClusteringModel
(
ClusteringType
* clustering)
70
:
base_type
(clustering){
71
SHARK_RUNTIME_CHECK
(
72
clustering->
hasSoftMembershipFunction
(),
73
"[SoftClusteringModel] Clustering does not support soft membership function"
74
);
75
}
76
77
/// \brief From INameable: return the class name.
78
std::string
name
()
const
79
{
return
"SoftClusteringModel"
; }
80
81
Shape
inputShape
()
const
{
82
return
this->
mep_clustering
->
inputShape
();
83
}
84
Shape
outputShape
()
const
{
85
return
this->
mep_clustering
->
numberOfClusters
();
86
}
87
88
/// \brief Compute best matching cluster.
89
///
90
/// \par
91
/// The actual computation is redirected to the clustering object.
92
void
eval
(InputType
const
& pattern, OutputType& output)
const
{
93
output = this->
mep_clustering
->
softMembership
(pattern);
94
}
95
96
/// \brief Compute best matching cluster for a batch of inputs.
97
///
98
/// \par
99
/// The actual computation is redirected to the clustering object.
100
void
eval
(BatchInputType
const
& patterns, BatchOutputType& outputs)
const
{
101
outputs = this->
mep_clustering
->
softMembership
(patterns);
102
}
103
};
104
105
106
}
107
#endif