C++ API Reference for Intel® Data Analytics Acceleration Library 2019

csv/internal/default_modifiers.h
1 /* file: default_modifiers.h */
2 /*******************************************************************************
3 * Copyright 2014-2018 Intel Corporation.
4 *
5 * This software and the related documents are Intel copyrighted materials, and
6 * your use of them is governed by the express license under which they were
7 * provided to you (License). Unless the License provides otherwise, you may not
8 * use, modify, copy, publish, distribute, disclose or transmit this software or
9 * the related documents without Intel's prior written permission.
10 *
11 * This software and the related documents are provided as is, with no express
12 * or implied warranties, other than those that are expressly stated in the
13 * License.
14 *******************************************************************************/
15 
16 #ifndef __DATA_SOURCE_MODIFIERS_CSV_DEFAULT_MODIFIERS_H__
17 #define __DATA_SOURCE_MODIFIERS_CSV_DEFAULT_MODIFIERS_H__
18 
19 #include "services/daal_shared_ptr.h"
20 #include "services/internal/collection.h"
21 
22 #include "data_management/features/defines.h"
23 #include "data_management/data_source/modifiers/csv/modifier.h"
24 
25 namespace daal
26 {
27 namespace data_management
28 {
29 namespace modifiers
30 {
31 namespace csv
32 {
33 namespace internal
34 {
35 
40 class FeatureModifierPrimitive : public Base
41 {
42 public:
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) { }
46 };
47 
52 class DefaultFeatureModifierPrimitive : public FeatureModifierPrimitive
53 {
54 public:
55  virtual DAAL_DATA_TYPE apply(Context &context, size_t index) DAAL_C11_OVERRIDE
56  {
57  return (DAAL_DATA_TYPE)0;
58  }
59 };
60 
65 class ContinuousFeatureModifierPrimitive : public FeatureModifierPrimitive
66 {
67 public:
68  virtual DAAL_DATA_TYPE apply(Context &context, size_t index) DAAL_C11_OVERRIDE
69  {
70  return context.getTokenAs<DAAL_DATA_TYPE>(index);
71  }
72 };
73 
78 class CategoricalFeatureModifierPrimitive : public FeatureModifierPrimitive
79 {
80 public:
81  CategoricalFeatureModifierPrimitive() :
82  _catDict(new CategoricalFeatureDictionary()) { }
83 
84  virtual DAAL_DATA_TYPE apply(Context &context, size_t index) DAAL_C11_OVERRIDE
85  {
86  const services::StringView token = context.getToken(index);
87  const std::string sToken(token.begin(), token.end());
88  const CategoricalFeatureDictionary::iterator it = _catDict->find(sToken);
89 
90  if (it != _catDict->end())
91  {
92  it->second.second++;
93  return (DAAL_DATA_TYPE)it->second.first;
94  }
95  else
96  {
97  const int itemIndex = (int)(_catDict->size());
98  const std::pair<int, int> indexPair(itemIndex, 1);
99  (*_catDict)[sToken] = indexPair;
100  return (DAAL_DATA_TYPE)itemIndex;
101  }
102  }
103 
104  virtual void finalize(Config &config, size_t index) DAAL_C11_OVERRIDE
105  {
106  const size_t numberOfCategories = _catDict->size();
107  config.setNumberOfCategories(index, numberOfCategories);
108  config.setCategoricalDictionary(index, _catDict);
109  }
110 
111 private:
112  CategoricalFeatureDictionaryPtr _catDict;
113 };
114 
119 class ContinuousFeatureModifier : public FeatureModifier
120 {
121 public:
122  virtual void apply(Context &context) DAAL_C11_OVERRIDE
123  {
124  services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
125  for (size_t i = 0; i < outputBuffer.size(); i++)
126  {
127  outputBuffer[i] = context.getTokenAs<DAAL_DATA_TYPE>(i);
128  }
129  }
130 };
131 
136 class CategoricalFeatureModifier : public FeatureModifier
137 {
138 public:
139  virtual void initialize(Config &config) DAAL_C11_OVERRIDE
140  {
141  FeatureModifier::initialize(config);
142 
143  const size_t numberOfInputFeatures = config.getNumberOfInputFeatures();
144  _primitives = services::Collection<CategoricalFeatureModifierPrimitive>(numberOfInputFeatures);
145  if ( !_primitives.data() )
146  {
147  services::throwIfPossible(services::ErrorMemoryAllocationFailed);
148  }
149  }
150 
151  virtual void apply(Context &context) DAAL_C11_OVERRIDE
152  {
153  services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
154  for (size_t i = 0; i < outputBuffer.size(); i++)
155  {
156  outputBuffer[i] = _primitives[i].apply(context, i);
157  }
158  }
159 
160  virtual void finalize(Config &config) DAAL_C11_OVERRIDE
161  {
162  FeatureModifier::finalize(config);
163 
164  const size_t numberOfOutputFeatures = config.getNumberOfInputFeatures();
165  for (size_t i = 0; i < numberOfOutputFeatures; i++)
166  {
167  _primitives[i].finalize(config, i);
168  }
169  }
170 
171 private:
172  services::Collection<CategoricalFeatureModifierPrimitive> _primitives;
173 };
174 
179 class AutomaticFeatureModifier : public FeatureModifier
180 {
181 public:
182  virtual void initialize(Config &config) DAAL_C11_OVERRIDE
183  {
184  FeatureModifier::initialize(config);
185 
186  const size_t numberOfInputFeatures = config.getNumberOfInputFeatures();
187  for (size_t i = 0; i < numberOfInputFeatures; i++)
188  {
189  FeatureModifierPrimitive *primitive =
190  createPrimitive(config.getInputFeatureDetectedType(i));
191 
192  if ( !_primitives.push_back(primitive) )
193  {
194  services::throwIfPossible(services::ErrorMemoryAllocationFailed);
195  }
196  }
197  }
198 
199  virtual void apply(Context &context) DAAL_C11_OVERRIDE
200  {
201  services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
202  for (size_t i = 0; i < outputBuffer.size(); i++)
203  {
204  outputBuffer[i] = _primitives[i].apply(context, i);
205  }
206  }
207 
208  virtual void finalize(Config &config) DAAL_C11_OVERRIDE
209  {
210  FeatureModifier::finalize(config);
211 
212  const size_t numberOfOutputFeatures = config.getNumberOfInputFeatures();
213  for (size_t i = 0; i < numberOfOutputFeatures; i++)
214  {
215  _primitives[i].finalize(config, i);
216  }
217  }
218 
219 private:
220  FeatureModifierPrimitive *createPrimitive(features::FeatureType featureType)
221  {
222  switch (featureType)
223  {
224  case features::DAAL_CONTINUOUS:
225  return new ContinuousFeatureModifierPrimitive();
226 
227  case features::DAAL_ORDINAL:
228  case features::DAAL_CATEGORICAL:
229  return new CategoricalFeatureModifierPrimitive();
230  }
231  return new DefaultFeatureModifierPrimitive();
232  }
233 
234 private:
235  services::internal::ObjectPtrCollection<FeatureModifierPrimitive> _primitives;
236 };
237 typedef services::SharedPtr<AutomaticFeatureModifier> AutomaticFeatureModifierPtr;
238 
239 } // namespace internal
240 } // namespace csv
241 } // namespace modifiers
242 } // namespace data_management
243 } // namespace daal
244 
245 #endif
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:179
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:136
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:119
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:78
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

For more complete information about compiler optimizations, see our Optimization Notice.