00001 #include "osl/stat/instanceMultiplier.h"
00002 #include "osl/stat/activityCount.h"
00003 #include <iostream>
00004 #include <fstream>
00005 osl::stat::
00006 InstanceMultiplier::
00007 InstanceMultiplier(unsigned int dim, unsigned int r,
00008 const SparseInstanceVector& i, const ActivityCount& a,
00009 valarray_t& w, int t, const char *f)
00010 : SparseRegressionMultiplier(dim),
00011 instances(i), activity(a), cur(0),
00012 threshold(t), weights(w), best_correlation(0.0),
00013 cur_iteration(0), best_iteration(0), reserve_for_validation(r),
00014 filename(f)
00015 {
00016 assert(w.size() == this->dim());
00017 }
00018 osl::stat::
00019 InstanceMultiplier::~InstanceMultiplier()
00020 {
00021 }
00022 void osl::stat::
00023 InstanceMultiplier::printCurrentDate() const
00024 {
00025 struct tm *cur;
00026 time_t ct;
00027 time(&ct);
00028 cur=localtime(&ct);
00029 std::cerr << cur->tm_hour << ":" << cur->tm_min << ":" << cur->tm_sec
00030 << "\n";
00031 }
00032 void osl::stat::
00033 InstanceMultiplier::newIteration() const
00034 {
00035 ++cur_iteration;
00036 printCurrentDate();
00037 const double correlation = validate();
00038 if (best_correlation < correlation)
00039 {
00040 best_correlation = correlation;
00041 best_iteration = cur_iteration;
00042 std::ofstream os(filename);
00043 for (unsigned int i=0; i<dim(); ++i)
00044 {
00045 os << weights[i] << "\n";
00046 }
00047 }
00048 std::cerr << "best " << best_iteration << " " << best_correlation << "\n";
00049 }
00050 bool osl::stat::
00051 InstanceMultiplier::getVectorX(unsigned int& num_elements,
00052 unsigned int *non_zero_indices,
00053 double *non_zero_values) const
00054 {
00055 num_elements = 0;
00056 const SparseInstance& a = instances[cur];
00057 const unsigned int dim = this->dim();
00058 for (size_t i=0; i<a.size(); ++i)
00059 {
00060 if (activity.isActive(a[i].index))
00061 {
00062 assert(a[i].index < dim-1);
00063 non_zero_indices[num_elements] = a[i].index;
00064 non_zero_values[num_elements] = a[i].value;
00065 ++num_elements;
00066 }
00067 }
00068 non_zero_indices[num_elements] = dim-1;
00069 non_zero_values[num_elements] = 1;
00070 ++num_elements;
00071
00072 ++cur;
00073 if (cur >= instances.size())
00074 {
00075 cur = reserve_for_validation;
00076 return false;
00077 }
00078 return true;
00079 }
00080
00081
00082
00083
00084