Example #1
0
void MissingValues::convert_autoassociation(void)
{
    const size_t missing_values_number = get_missing_values_number();

    Vector<Item> autoassociation_items(missing_values_number);

}
Example #2
0
Vector<size_t> MissingValues::arrange_missing_variables(void) const
{
    const size_t missing_values_number = get_missing_values_number();

    Vector<size_t> missing_variables;

    for(size_t i = 0; i < missing_values_number; i++)
    {
        if(!missing_variables.contains(items[i].variable_index))
        {
            missing_variables.push_back(items[i].variable_index);
        }
    }

    return(missing_variables);
}
Example #3
0
void MissingValues::set_item(const size_t& index, const size_t& instance_index, const size_t& variable_index)
{
    // Control sentence (if debug)

#ifdef __OPENNN_DEBUG__

    const size_t missing_values_number = get_missing_values_number();

    if(index >= missing_values_number)
    {
        std::ostringstream buffer;

        buffer << "OpenNN Exception: MissingValues class.\n"
               << "void set_item(const size_t&, const size_t&, const size_t&) method.\n"
               << "Index (" << index << ") must be less than number of missing values (" << missing_values_number << ").\n";

        throw std::logic_error(buffer.str());
    }

    if(instance_index >= instances_number)
    {
        std::ostringstream buffer;

        buffer << "OpenNN Exception: MissingValues class.\n"
               << "void set_item(const size_t&, const size_t&, const size_t&) method.\n"
               << "Index of instance (" << instance_index << ") must be less than number of instances (" << instances_number << ").\n";

        throw std::logic_error(buffer.str());
    }

    if(variable_index >= variables_number)
    {
        std::ostringstream buffer;

        buffer << "OpenNN Exception: MissingValues class.\n"
               << "void set_item(const size_t&, const size_t&, const size_t&) method.\n"
               << "Index of variable (" << variable_index << ") must be less than number of variables (" << variables_number << ").\n";

        throw std::logic_error(buffer.str());
    }

#endif

    items[index].instance_index = instance_index;
    items[index].variable_index = variable_index;
}
Example #4
0
Vector<size_t> MissingValues::get_missing_values_numbers(void) const
{
    Vector<size_t> missing_values_numbers(variables_number, 0);

    const size_t missing_values_number = get_missing_values_number();

    size_t variable_index;

    for(size_t i = 0; i < missing_values_number; i++)
    {
        variable_index = items[i].variable_index;

        missing_values_numbers[variable_index]++;
    }

    return(missing_values_numbers);
}
Example #5
0
Vector< Vector<size_t> > MissingValues::arrange_missing_indices(void) const
{
    Vector< Vector<size_t> > missing_indices(variables_number);

    const size_t missing_values_number = get_missing_values_number();

    size_t variable_index;
    size_t instance_index;

    for(size_t i = 0; i < missing_values_number; i++)
    {
        variable_index = items[i].variable_index;
        instance_index = items[i].instance_index;

        missing_indices[variable_index].push_back(instance_index);
    }

    return(missing_indices);
}
Example #6
0
bool MissingValues::is_missing_value(const size_t& instance_index, const size_t& variable_index) const
{
    if(items.empty())
    {
        return(false);
    }

    const size_t missing_values_number = get_missing_values_number();

    for(size_t i = 0; i < missing_values_number; i++)
    {
        if(items[i].instance_index == instance_index && items[i].variable_index == variable_index)
        {
            return(true);
        }
    }

    return(false);
}
Example #7
0
bool MissingValues::has_missing_values(const size_t& instance_index, const Vector<size_t>& variables_indices) const
{
    const size_t missing_values_number = get_missing_values_number();

    const size_t variables_number = variables_indices.size();

    for(size_t i = 0; i < missing_values_number; i++)
    {
        if(items[i].instance_index == instance_index)
        {
            for(size_t j = 0; j < variables_number; j++)
            {
                if(items[i].variable_index == variables_indices[j])
                {
                    return(true);
                }
            }
        }
    }

    return(false);
}
Example #8
0
const MissingValues::Item& MissingValues::get_item(const size_t& index) const
{
    // Control sentence (if debug)

#ifdef __OPENNN_DEBUG__

    const size_t missing_values_number = get_missing_values_number();

    if(index >= missing_values_number)
    {
        std::ostringstream buffer;

        buffer << "OpenNN Exception: MissingValues class.\n"
               << "const Item& get_item(const size_t&) const method.\n"
               << "Index (" << index << ") must be less than number of missing values (" << missing_values_number << ").\n";

        throw std::logic_error(buffer.str());
    }

#endif

    return(items[index]);
}
Example #9
0
std::string MissingValues::to_string(void) const
{
    std::ostringstream buffer;

    const size_t missing_values_number = get_missing_values_number();

    buffer << "Missing values object\n"
           << "Instances number: " << instances_number << "\n"
           << "Variables number: " << variables_number << "\n"
           << "Missing values number: " << missing_values_number << "\n";

    for(size_t i = 0; i < missing_values_number; i++)
    {
        buffer << "Missing value " << i+1 << ":\n"
               << "Instance index: " << items[i].instance_index << "\n"
               << "Variable index: " << items[i].variable_index << "\n";
    }

    buffer << "Scrubbing method: " << write_scrubbing_method() << "\n";

    buffer << "Display: " << display << "\n";

    return(buffer.str());
}
Example #10
0
tinyxml2::XMLDocument* MissingValues::to_XML(void) const
{
    tinyxml2::XMLDocument* document = new tinyxml2::XMLDocument;

    std::ostringstream buffer;

    // MissingValues

    tinyxml2::XMLElement* missing_values_element = document->NewElement("MissingValues");

    document->InsertFirstChild(missing_values_element);

    tinyxml2::XMLElement* element = NULL;
    tinyxml2::XMLText* text = NULL;

    const size_t missing_values_number = get_missing_values_number();

    // Instances number
    {
        element = document->NewElement("InstancesNumber");
        missing_values_element->LinkEndChild(element);

        buffer.str("");
        buffer << instances_number;

        text = document->NewText(buffer.str().c_str());
        element->LinkEndChild(text);
    }

    // Variables number
    {
        element = document->NewElement("VariablesNumber");
        missing_values_element->LinkEndChild(element);

        buffer.str("");
        buffer << variables_number;

        text = document->NewText(buffer.str().c_str());
        element->LinkEndChild(text);
    }

    // Scrubbing method
    {
        element = document->NewElement("ScrubbingMethod");
        missing_values_element->LinkEndChild(element);

        text = document->NewText(write_scrubbing_method().c_str());
        element->LinkEndChild(text);
    }

    // Missing values number
    {
        element = document->NewElement("MissingValuesNumber");
        missing_values_element->LinkEndChild(element);

        buffer.str("");
        buffer << missing_values_number;

        text = document->NewText(buffer.str().c_str());
        element->LinkEndChild(text);
    }

    for(size_t i = 0; i < missing_values_number; i++)
    {
        element = document->NewElement("Item");
        element->SetAttribute("Index", (unsigned)i+1);
        missing_values_element->LinkEndChild(element);

        // Instance index

        tinyxml2::XMLElement* instance_index_element = document->NewElement("InstanceIndex");
        element->LinkEndChild(instance_index_element);

        buffer.str("");
        buffer << items[i].instance_index;

        text = document->NewText(buffer.str().c_str());
        instance_index_element->LinkEndChild(text);

        // Variable index

        tinyxml2::XMLElement* variable_index_element = document->NewElement("VariableIndex");
        element->LinkEndChild(variable_index_element);

        buffer.str("");
        buffer << items[i].variable_index;

        text = document->NewText(buffer.str().c_str());
        variable_index_element->LinkEndChild(text);
    }

    // Display
    {
        element = document->NewElement("Display");
        missing_values_element->LinkEndChild(element);

        buffer.str("");
        buffer << display;

        text = document->NewText(buffer.str().c_str());
        element->LinkEndChild(text);
    }

    return(document);
}
void MissingValues::write_XML(tinyxml2::XMLPrinter& file_stream) const
{
    std::ostringstream buffer;

    const size_t missing_values_number = get_missing_values_number();

    file_stream.OpenElement("MissingValues");

    // Instances number

    file_stream.OpenElement("InstancesNumber");

    buffer.str("");
    buffer << instances_number;

    file_stream.PushText(buffer.str().c_str());

    file_stream.CloseElement();

    // Variables number

    file_stream.OpenElement("VariablesNumber");

    buffer.str("");
    buffer << variables_number;

    file_stream.PushText(buffer.str().c_str());

    file_stream.CloseElement();

    // Scrubbing method

    file_stream.OpenElement("ScrubbingMethod");

    file_stream.PushText(write_scrubbing_method().c_str());

    file_stream.CloseElement();

    // Missing values number

    file_stream.OpenElement("MissingValuesNumber");

    buffer.str("");
    buffer << missing_values_number;

    file_stream.PushText(buffer.str().c_str());

    file_stream.CloseElement();


    if(missing_values_number <= 0)
    {
        file_stream.CloseElement();

        return;
    }

    std::string instances_indices_text;
    std::string variables_indices_text;

    for(size_t i = 0; i < missing_values_number; i++)
    {
        // Instance index

        const size_t instance_index = items[i].instance_index + 1;

        instances_indices_text.append(number_to_string(instance_index));

        if(i != missing_values_number - 1)
        {
            instances_indices_text.append(" ");
        }


        // Variable index

        const size_t variable_index = items[i].variable_index + 1;

        variables_indices_text.append(number_to_string(variable_index));

        if(i != missing_values_number - 1)
        {
            variables_indices_text.append(" ");
        }
    }

    // Instances indices

    file_stream.OpenElement("InstancesIndices");

    file_stream.PushText(instances_indices_text.c_str());

    file_stream.CloseElement();

    // Variables indices

    file_stream.OpenElement("VariablesIndices");

    file_stream.PushText(variables_indices_text.c_str());

    file_stream.CloseElement();


    file_stream.CloseElement();
}
tinyxml2::XMLDocument* MissingValues::to_XML(void) const
{
    tinyxml2::XMLDocument* document = new tinyxml2::XMLDocument;

    std::ostringstream buffer;

    // MissingValues

    tinyxml2::XMLElement* missing_values_element = document->NewElement("MissingValues");

    document->InsertFirstChild(missing_values_element);

    tinyxml2::XMLElement* element = NULL;
    tinyxml2::XMLText* text = NULL;

    const size_t missing_values_number = get_missing_values_number();

    // Instances number
    {
        element = document->NewElement("InstancesNumber");
        missing_values_element->LinkEndChild(element);

        buffer.str("");
        buffer << instances_number;

        text = document->NewText(buffer.str().c_str());
        element->LinkEndChild(text);
    }

    // Variables number
    {
        element = document->NewElement("VariablesNumber");
        missing_values_element->LinkEndChild(element);

        buffer.str("");
        buffer << variables_number;

        text = document->NewText(buffer.str().c_str());
        element->LinkEndChild(text);
    }

    // Scrubbing method
    {
        element = document->NewElement("ScrubbingMethod");
        missing_values_element->LinkEndChild(element);

        text = document->NewText(write_scrubbing_method().c_str());
        element->LinkEndChild(text);
    }

    // Missing values number
    {
        element = document->NewElement("MissingValuesNumber");
        missing_values_element->LinkEndChild(element);

        buffer.str("");
        buffer << missing_values_number;

        text = document->NewText(buffer.str().c_str());
        element->LinkEndChild(text);
    }



    if(missing_values_number > 0)
    {
        tinyxml2::XMLElement* instances_indices_element = document->NewElement("InstancesIndices");
        missing_values_element->LinkEndChild(instances_indices_element);

        tinyxml2::XMLElement* variables_indices_element = document->NewElement("VariablesIndices");
        missing_values_element->LinkEndChild(variables_indices_element);

        std::string instances_indices_text;
        std::string variables_indices_text;

        for(size_t i = 0; i < missing_values_number; i++)
        {
            // Instance index

            const size_t instance_index = items[i].instance_index + 1;

            instances_indices_text.append(number_to_string(instance_index));

            if(i != missing_values_number - 1)
            {
                instances_indices_text.append(" ");
            }

            // Variable index

            const size_t variable_index = items[i].variable_index + 1;

            variables_indices_text.append(number_to_string(variable_index));

            if(i != missing_values_number - 1)
            {
                variables_indices_text.append(" ");
            }
        }

        // Insert instances indices

        text = document->NewText(instances_indices_text.c_str());
        instances_indices_element->LinkEndChild(text);

        // Insert variables indices

        text = document->NewText(variables_indices_text.c_str());
        variables_indices_element->LinkEndChild(text);
    }

    /*
    for(size_t i = 0; i < missing_values_number; i++)
    {
        element = document->NewElement("Item");
        element->SetAttribute("Index", (unsigned)i+1);
        missing_values_element->LinkEndChild(element);

        // Instance index

        tinyxml2::XMLElement* instance_index_element = document->NewElement("InstanceIndex");
        element->LinkEndChild(instance_index_element);

        buffer.str("");
        buffer << items[i].instance_index+1;

        text = document->NewText(buffer.str().c_str());
        instance_index_element->LinkEndChild(text);

        // Variable index

        tinyxml2::XMLElement* variable_index_element = document->NewElement("VariableIndex");
        element->LinkEndChild(variable_index_element);

        buffer.str("");
        buffer << items[i].variable_index+1;

        text = document->NewText(buffer.str().c_str());
        variable_index_element->LinkEndChild(text);
    }
*/

    // Display
//    {
//        element = document->NewElement("Display");
//        missing_values_element->LinkEndChild(element);

//        buffer.str("");
//        buffer << display;

//        text = document->NewText(buffer.str().c_str());
//        element->LinkEndChild(text);
//    }

    return(document);
}