Alien-XGBoost
view release on metacpan or search on metacpan
xgboost/cub/experimental/sparse_matrix.h view on Meta::CPAN
double xxy = (x - mean_x) * (x - mean_x) * (y - mean_y);
double xyy = (x - mean_x) * (y - mean_y) * (y - mean_y);
double delta;
delta = xy - s_xy;
s_xy = s_xy + (delta / samples);
delta = xxy - s_xxy;
s_xxy = s_xxy + (delta / samples);
delta = xyy - s_xyy;
s_xyy = s_xyy + (delta / samples);
}
}
double s_xx = ss_x / num_nonzeros;
double s_yy = ss_y / num_nonzeros;
double deming_slope = (s_yy - s_xx + sqrt(((s_yy - s_xx) * (s_yy - s_xx)) + (4 * s_xy * s_xy))) / (2 * s_xy);
stats.pearson_r = (num_nonzeros * s_xy) / (sqrt(ss_x) * sqrt(ss_y));
//
// Compute row-length statistics
//
// Sample mean
stats.row_length_mean = double(num_nonzeros) / num_rows;
variance = 0.0;
stats.row_length_skewness = 0.0;
for (OffsetT row = 0; row < num_rows; ++row)
{
OffsetT length = row_offsets[row + 1] - row_offsets[row];
double delta = double(length) - stats.row_length_mean;
variance += (delta * delta);
stats.row_length_skewness += (delta * delta * delta);
}
variance /= num_rows;
stats.row_length_std_dev = sqrt(variance);
stats.row_length_skewness = (stats.row_length_skewness / num_rows) / pow(stats.row_length_std_dev, 3.0);
stats.row_length_variation = stats.row_length_std_dev / stats.row_length_mean;
return stats;
}
/**
* Build CSR matrix from sorted COO matrix
*/
void FromCoo(const CooMatrix<ValueT, OffsetT> &coo_matrix)
{
num_rows = coo_matrix.num_rows;
num_cols = coo_matrix.num_cols;
num_nonzeros = coo_matrix.num_nonzeros;
#ifdef CUB_MKL
if (numa_malloc)
{
numa_set_strict(1);
// numa_set_bind_policy(1);
// values = (ValueT*) numa_alloc_interleaved(sizeof(ValueT) * num_nonzeros);
// row_offsets = (OffsetT*) numa_alloc_interleaved(sizeof(OffsetT) * (num_rows + 1));
// column_indices = (OffsetT*) numa_alloc_interleaved(sizeof(OffsetT) * num_nonzeros);
row_offsets = (OffsetT*) numa_alloc_onnode(sizeof(OffsetT) * (num_rows + 1), 0);
column_indices = (OffsetT*) numa_alloc_onnode(sizeof(OffsetT) * num_nonzeros, 0);
values = (ValueT*) numa_alloc_onnode(sizeof(ValueT) * num_nonzeros, 1);
}
else
{
values = (ValueT*) mkl_malloc(sizeof(ValueT) * num_nonzeros, 4096);
row_offsets = (OffsetT*) mkl_malloc(sizeof(OffsetT) * (num_rows + 1), 4096);
column_indices = (OffsetT*) mkl_malloc(sizeof(OffsetT) * num_nonzeros, 4096);
}
#else
row_offsets = new OffsetT[num_rows + 1];
column_indices = new OffsetT[num_nonzeros];
values = new ValueT[num_nonzeros];
#endif
OffsetT prev_row = -1;
for (OffsetT current_edge = 0; current_edge < num_nonzeros; current_edge++)
{
OffsetT current_row = coo_matrix.coo_tuples[current_edge].row;
// Fill in rows up to and including the current row
for (OffsetT row = prev_row + 1; row <= current_row; row++)
{
row_offsets[row] = current_edge;
}
prev_row = current_row;
column_indices[current_edge] = coo_matrix.coo_tuples[current_edge].col;
values[current_edge] = coo_matrix.coo_tuples[current_edge].val;
}
// Fill out any trailing edgeless vertices (and the end-of-list element)
for (OffsetT row = prev_row + 1; row <= num_rows; row++)
{
row_offsets[row] = num_nonzeros;
}
}
/**
* Display log-histogram to stdout
*/
void DisplayHistogram()
{
// Initialize
int log_counts[9];
for (int i = 0; i < 9; i++)
{
log_counts[i] = 0;
}
// Scan
( run in 0.937 second using v1.01-cache-2.11-cpan-2398b32b56e )