void Evaluation::evalLOUO (Trainer *trainer, ISamples &samples){ _trainer = trainer; destroy_conf_mat (); init_conf_mat (samples); ssi_size_t n_users = samples.getUserSize (); _n_total = samples.getSize (); _result_vec = new ssi_size_t[2*_n_total]; _result_vec_ptr = _result_vec; ssi_size_t itest = 0; ssi_size_t *itrain = new ssi_size_t[n_users - 1]; for (ssi_size_t nuser = 0; nuser < n_users - 1; ++nuser) { itrain[nuser] = nuser+1; } ISSelectUser strain (&samples); ISSelectUser stest (&samples); strain.setSelection (n_users-1, itrain); stest.setSelection (1, &itest); _trainer->release (); if (_fselmethod) { _trainer->setSelection (strain, _fselmethod, _pre_fselmethod, _n_pre_feature); } if (_preproc_mode) { _trainer->setPreprocMode (_preproc_mode, _n_streams_refs, _stream_refs); } _trainer->train (strain); eval_h (stest); for (ssi_size_t nuser = 1; nuser < n_users; ++nuser) { itrain[nuser-1] = nuser-1; itest = nuser; strain.setSelection (n_users-1, itrain); stest.setSelection (1, &itest); _trainer->release (); if (_fselmethod) { _trainer->setSelection (strain, _fselmethod, _pre_fselmethod, _n_pre_feature); } if (_preproc_mode) { _trainer->setPreprocMode (_preproc_mode, _n_streams_refs, _stream_refs); } _trainer->train (strain); eval_h (stest); } delete [] itrain; }
bool FileSamplesOut::open (ISamples &data, const ssi_char_t *path, File::TYPE type, File::VERSION version) { ssi_msg (SSI_LOG_LEVEL_DETAIL, "open files '%s'", path); _version = version; if (_version < File::V2) { ssi_wrn ("version < V2 not supported"); return false; } if (_file_info || _file_data) { ssi_wrn ("samples already open"); return false; } _n_users = data.getUserSize (); _users = new ssi_char_t *[_n_users]; _n_per_user = new ssi_size_t[_n_users]; for (ssi_size_t i = 0; i < _n_users; i++) { _users[i] = ssi_strcpy (data.getUserName (i)); _n_per_user[i] = 0; } _n_classes = data.getClassSize (); _classes = new ssi_char_t *[_n_classes]; _n_per_class = new ssi_size_t[_n_classes]; for (ssi_size_t i = 0; i < _n_classes; i++) { _classes[i] = ssi_strcpy (data.getClassName (i)); _n_per_class[i] = 0; } _n_streams = data.getStreamSize (); _streams = new ssi_stream_t[_n_streams]; for (ssi_size_t i = 0; i < _n_streams; i++) { ssi_stream_t s = data.getStream (i); ssi_stream_init (_streams[i], 0, s.dim, s.byte, s.type, s.sr, 0); } _has_missing_data = false; if (path == 0 || path[0] == '\0') { _console = true; } if (_console) { _file_data = File::CreateAndOpen (type, File::WRITE, ""); if (!_file_data) { ssi_wrn ("could not open console"); return false; } } else { FilePath fp (path); ssi_char_t *path_info = 0; if (strcmp (fp.getExtension (), SSI_FILE_TYPE_SAMPLES) != 0) { path_info = ssi_strcat (path, SSI_FILE_TYPE_SAMPLES); } else { path_info = ssi_strcpy (path); } _path = ssi_strcpy (path_info); _file_info = File::CreateAndOpen (File::ASCII, File::WRITE, path_info); if (!_file_info) { ssi_wrn ("could not open info file '%s'", path_info); return false; } ssi_sprint (_string, "<?xml version=\"1.0\" ?>\n<samples ssi-v=\"%d\">", version); _file_info->writeLine (_string); ssi_char_t *path_data = ssi_strcat (path_info, "~"); _file_data = File::CreateAndOpen (type, File::WRITE, path_data); if (!_file_data) { ssi_wrn ("could not open data file '%s'", path_data); return false; } if (_version == File::V3) { _file_streams = new FileStreamOut[_n_streams]; ssi_char_t string[SSI_MAX_CHAR]; for (ssi_size_t i = 0; i < _n_streams; i++) { ssi_sprint (string, "%s.#%u", path_info, i); _file_streams[i].open (_streams[i], string, type); } } delete[] path_info; delete[] path_data; } return true; };