UnlabelledClassificationData UnlabelledClassificationData::getTrainingFoldData(UINT foldIndex) {
    UnlabelledClassificationData trainingData;

    if( !crossValidationSetup ) {
        errorLog << "getTrainingFoldData(UINT foldIndex) - Cross Validation has not been setup! You need to call the spiltDataIntoKFolds(UINT K) function first before calling this function!" << endl;
        return trainingData;
    }

    if( foldIndex >= kFoldValue ) return trainingData;

    trainingData.setNumDimensions( numDimensions );

    //Add the data to the training set, this will consist of all the data that is NOT in the foldIndex
    UINT index = 0;
    for(UINT k=0; k<kFoldValue; k++) {
        if( k != foldIndex ) {
            for(UINT i=0; i<crossValidationIndexs[k].size(); i++) {

                index = crossValidationIndexs[k][i];
                trainingData.addSample( data.getRowVector(index) );
            }
        }
    }

    return trainingData;
}
UnlabelledClassificationData LabelledClassificationData::reformatAsUnlabelledClassificationData() const{

    UnlabelledClassificationData unlabelledData;

    if( totalNumSamples == 0 ){
        return unlabelledData;
    }

    unlabelledData.setNumDimensions( numDimensions );

    for(UINT i=0; i<totalNumSamples; i++){
        unlabelledData.addSample( data[i].getSample() );
    }

    return unlabelledData;
}
UnlabelledClassificationData LabelledTimeSeriesClassificationData::reformatAsUnlabelledClassificationData() const {

    UnlabelledClassificationData unlabelledData;

    if( totalNumSamples == 0 ){
        return unlabelledData;
    }

    unlabelledData.setNumDimensions( numDimensions );

    for(UINT i=0; i<totalNumSamples; i++){
        for(UINT x=0; x<data[i].getLength(); x++){
            unlabelledData.addSample( data[i].getData().getRowVector( x ) );
        }
    }

    return unlabelledData;
}
UnlabelledClassificationData UnlabelledClassificationData::getTestFoldData(UINT foldIndex) {
    UnlabelledClassificationData testData;

    if( !crossValidationSetup ) return testData;

    if( foldIndex >= kFoldValue ) return testData;

    //Add the data to the training
    testData.setNumDimensions( numDimensions );

    UINT index = 0;
    for(UINT i=0; i<crossValidationIndexs[ foldIndex ].size(); i++) {

        index = crossValidationIndexs[ foldIndex ][i];
        testData.addSample( data.getRowVector( index ) );
    }

    return testData;
}