void MissingValues::convert_autoassociation(void) { const size_t missing_values_number = get_missing_values_number(); Vector<Item> autoassociation_items(missing_values_number); }
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); }
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; }
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); }
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); }
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); }
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); }
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]); }
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()); }
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); }