16 #ifndef __DATA_SOURCE_MODIFIERS_CSV_DEFAULT_MODIFIERS_H__
17 #define __DATA_SOURCE_MODIFIERS_CSV_DEFAULT_MODIFIERS_H__
19 #include "services/daal_shared_ptr.h"
20 #include "services/internal/collection.h"
22 #include "data_management/features/defines.h"
23 #include "data_management/data_source/modifiers/csv/modifier.h"
27 namespace data_management
40 class FeatureModifierPrimitive :
public Base
43 virtual void initialize(Config &context,
size_t index) { }
44 virtual DAAL_DATA_TYPE apply(Context &context,
size_t index) = 0;
45 virtual void finalize(Config &context,
size_t index) { }
52 class DefaultFeatureModifierPrimitive :
public FeatureModifierPrimitive
55 virtual DAAL_DATA_TYPE apply(Context &context,
size_t index) DAAL_C11_OVERRIDE
57 return (DAAL_DATA_TYPE)0;
65 class ContinuousFeatureModifierPrimitive :
public FeatureModifierPrimitive
68 virtual void initialize(Config &config,
size_t index) DAAL_C11_OVERRIDE
70 config.setOutputFeatureType(index, features::DAAL_CONTINUOUS);
73 virtual DAAL_DATA_TYPE apply(Context &context,
size_t index) DAAL_C11_OVERRIDE
75 return context.getTokenAs<DAAL_DATA_TYPE>(index);
83 class CategoricalFeatureModifierPrimitive :
public FeatureModifierPrimitive
86 CategoricalFeatureModifierPrimitive() :
87 _catDict(
new CategoricalFeatureDictionary()) { }
89 virtual void initialize(Config &config,
size_t index) DAAL_C11_OVERRIDE
91 config.setOutputFeatureType(index, features::DAAL_CATEGORICAL);
94 virtual DAAL_DATA_TYPE apply(Context &context,
size_t index) DAAL_C11_OVERRIDE
96 const services::StringView token = context.getToken(index);
97 const std::string sToken(token.begin(), token.end());
98 const CategoricalFeatureDictionary::iterator it = _catDict->find(sToken);
100 if (it != _catDict->end())
103 return (DAAL_DATA_TYPE)it->second.first;
107 const int itemIndex = (int)(_catDict->size());
108 const std::pair<int, int> indexPair(itemIndex, 1);
109 (*_catDict)[sToken] = indexPair;
110 return (DAAL_DATA_TYPE)itemIndex;
114 virtual void finalize(Config &config,
size_t index) DAAL_C11_OVERRIDE
116 const size_t numberOfCategories = _catDict->size();
117 config.setNumberOfCategories(index, numberOfCategories);
118 config.setCategoricalDictionary(index, _catDict);
122 CategoricalFeatureDictionaryPtr _catDict;
129 class ContinuousFeatureModifier :
public FeatureModifier
132 virtual void initialize(Config &config) DAAL_C11_OVERRIDE
134 FeatureModifier::initialize(config);
136 const size_t numberOfFeatures = config.getNumberOfInputFeatures();
137 for (
size_t i = 0; i < numberOfFeatures; i++)
139 config.setOutputFeatureType(i, features::DAAL_CONTINUOUS);
143 virtual void apply(Context &context) DAAL_C11_OVERRIDE
145 services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
146 for (
size_t i = 0; i < outputBuffer.size(); i++)
148 outputBuffer[i] = context.getTokenAs<DAAL_DATA_TYPE>(i);
157 class CategoricalFeatureModifier :
public FeatureModifier
160 virtual void initialize(Config &config) DAAL_C11_OVERRIDE
162 FeatureModifier::initialize(config);
164 const size_t numberOfInputFeatures = config.getNumberOfInputFeatures();
165 _primitives = services::Collection<CategoricalFeatureModifierPrimitive>(numberOfInputFeatures);
166 if ( !_primitives.data() )
168 services::throwIfPossible(services::ErrorMemoryAllocationFailed);
171 for (
size_t i = 0; i < numberOfInputFeatures; i++)
173 _primitives[i].initialize(config, i);
177 virtual void apply(Context &context) DAAL_C11_OVERRIDE
179 services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
180 for (
size_t i = 0; i < outputBuffer.size(); i++)
182 outputBuffer[i] = _primitives[i].apply(context, i);
186 virtual void finalize(Config &config) DAAL_C11_OVERRIDE
188 FeatureModifier::finalize(config);
190 const size_t numberOfOutputFeatures = config.getNumberOfInputFeatures();
191 for (
size_t i = 0; i < numberOfOutputFeatures; i++)
193 _primitives[i].finalize(config, i);
198 services::Collection<CategoricalFeatureModifierPrimitive> _primitives;
205 class AutomaticFeatureModifier :
public FeatureModifier
208 virtual void initialize(Config &config) DAAL_C11_OVERRIDE
210 FeatureModifier::initialize(config);
212 const size_t numberOfInputFeatures = config.getNumberOfInputFeatures();
213 for (
size_t i = 0; i < numberOfInputFeatures; i++)
215 FeatureModifierPrimitive *primitive =
216 createPrimitive(config.getInputFeatureDetectedType(i));
218 if ( !_primitives.push_back(primitive) )
220 services::throwIfPossible(services::ErrorMemoryAllocationFailed);
223 primitive->initialize(config, i);
227 virtual void apply(Context &context) DAAL_C11_OVERRIDE
229 services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
230 for (
size_t i = 0; i < outputBuffer.size(); i++)
232 outputBuffer[i] = _primitives[i].apply(context, i);
236 virtual void finalize(Config &config) DAAL_C11_OVERRIDE
238 FeatureModifier::finalize(config);
240 const size_t numberOfOutputFeatures = config.getNumberOfInputFeatures();
241 for (
size_t i = 0; i < numberOfOutputFeatures; i++)
243 _primitives[i].finalize(config, i);
248 FeatureModifierPrimitive *createPrimitive(features::FeatureType featureType)
252 case features::DAAL_CONTINUOUS:
253 return new ContinuousFeatureModifierPrimitive();
255 case features::DAAL_ORDINAL:
256 case features::DAAL_CATEGORICAL:
257 return new CategoricalFeatureModifierPrimitive();
259 return new DefaultFeatureModifierPrimitive();
263 services::internal::ObjectPtrCollection<FeatureModifierPrimitive> _primitives;
265 typedef services::SharedPtr<AutomaticFeatureModifier> AutomaticFeatureModifierPtr;
daal::data_management::modifiers::csv::internal::AutomaticFeatureModifier
Feature modifier that determines suitable feature type and parses tokens according to determined type...
Definition: csv/internal/default_modifiers.h:205
daal
Definition: algorithm_base_common.h:31
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:146
daal::data_management::modifiers::csv::internal::FeatureModifierPrimitive
Primitive modifier that applicable to a single column.
Definition: csv/internal/default_modifiers.h:40
daal::data_management::modifiers::csv::internal::CategoricalFeatureModifier
Feature modifier that parses tokens as categorical features.
Definition: csv/internal/default_modifiers.h:157
daal::data_management::modifiers::csv::internal::DefaultFeatureModifierPrimitive
Default implementation of primitive feature modifier.
Definition: csv/internal/default_modifiers.h:52
daal::data_management::modifiers::csv::internal::ContinuousFeatureModifier
Feature modifier that parses tokens as continuous features.
Definition: csv/internal/default_modifiers.h:129
daal::services::internal::ObjectPtrCollection
Class that implements functionality of collection container and holds pointers to objects of specifie...
Definition: internal/collection.h:37
daal::data_management::modifiers::csv::internal::CategoricalFeatureModifierPrimitive
Primitive feature modifier that parses tokens as categorical features.
Definition: csv/internal/default_modifiers.h:83
daal::Base
Base class for Intel(R) Data Analytics Acceleration Library objects
Definition: base.h:39
daal::data_management::modifiers::csv::internal::ContinuousFeatureModifierPrimitive
Primitive feature modifier that parses tokens as continuous features.
Definition: csv/internal/default_modifiers.h:65