#include "daal.h"
#include "service.h"
using namespace std;
using namespace daal;
using namespace daal::algorithms;
const string dataFileName = "../data/batch/pca_transform.csv";
const size_t nVectors = 4;
const size_t nComponents = 2;
int main(int argc, char *argv[])
{
checkArguments(argc, argv, 1, &dataFileName);
FileDataSource<CSVFeatureManager> dataSource(dataFileName, DataSource::doAllocateNumericTable,
DataSource::doDictionaryFromContext);
dataSource.loadDataBlock(nVectors);
pca::Batch<double, pca::svdDense> pcaAlgorithm;
pcaAlgorithm.input.set(pca::data, dataSource.getNumericTable());
pcaAlgorithm.parameter.resultsToCompute = pca::mean | pca::variance | pca::eigenvalue;
pcaAlgorithm.compute();
pca::ResultPtr pcaResult = pcaAlgorithm.getResult();
printNumericTable(pcaResult->get(pca::eigenvalues), "Eigenvalues:");
printNumericTable(pcaResult->get(pca::eigenvectors), "Eigenvectors:");
KeyValueDataCollectionPtr resultCollection = pcaResult->get(pca::dataForTransform);
NumericTablePtr eigenvaluesT = NumericTable::cast((*resultCollection)[pca::eigenvalue]);
if (eigenvaluesT.get() != NULL)
printNumericTable(eigenvaluesT, "Eigenvalues kv:");
NumericTablePtr meansT = NumericTable::cast((*resultCollection)[pca::mean]);
if (meansT.get() != NULL)
printNumericTable(meansT, "Means kv:");
NumericTablePtr variancesT = NumericTable::cast((*resultCollection)[pca::variance]);
if (variancesT.get() != NULL)
printNumericTable(variancesT, "Variances kv:");
pca::transform::Batch<float> pcaTransform(nComponents);
pcaTransform.input.set(pca::transform::data, dataSource.getNumericTable());
pcaTransform.input.set(pca::transform::eigenvectors, pcaResult->get(pca::eigenvectors));
pcaTransform.input.set(pca::transform::dataForTransform, pcaResult->get(pca::dataForTransform));
pcaTransform.compute();
pca::transform::ResultPtr pcaTransformResult = pcaTransform.getResult();
printNumericTable(pcaTransformResult->get(pca::transform::transformedData), "Transformed data:");
return 0;
}