# Logarithmic binning of smartphone sensor measurements

I' measuring linear acceleration (acceleration minus gravity) and gyroscope from Android smartphones on three axis (x,y,z). Becuase the distribution of the measurments is exponential, i.e. there are much more small values than large values, I would like to bin the sensor measurements using logarithmic binning into 96 bins. If I would use linear binning, I would have to clip the sensor measurements very heavy because otherwise most of the measurements will fall into the first few bins.

Right now I'm using the following bin edges (Python):

import numpy as np
bins = np.logspace(np.log10(0.001), np.log10(hi), num=96, base=10)


The problem here is that there are different types of logarithms (base e, 2, 10) and different starting points (here 0.001).

What is the best way to determine the best logarithmic binning?

Second, right now I'm clipping gyroscope values at 5 rad/s and linear acceleration values at 4*g. Is this reasonable or what are common values for clipping?

• 1) Yes, I was drawing a histogram. What do you mean by using the histogram to have equal number of readings in each bin? 2) But with a different base I'm getting different bin edges 3) I'm taking the absolute values of the sensor measurements, so all values are positive. 4) I will use the binned data as input to a machine learning pipeline. So it it is just an encoding / simplification of the measurements into a 96 dimensional vector. May 31 at 13:45
• @AJN Yes, roughly equal number of sample would make sense. How can I choose the logarithmic scale so that there are equal number of samples in each bin? May 31 at 14:00
• Ignore my comment about equal spacing. i think that exponential random variable when binned in logarithmicaly spaced bins will automatically satisfy the equal number in each bin condition. I am not 100% sure about this. You can check it your self by varying the number of bins and seeing the result.
– AJN
May 31 at 14:03
• You need to define "best". otherwise any input to logspace would be equally good ?
– AJN
May 31 at 14:04

The problem here is that there are different types of logarithms (base e, 2, 10) and different starting points (here 0.001).

I get the same bins for any base. see below. note the aproprate usage of log10, log and log2 functions which are consistent with the base= parameter.

>>> import numpy as np
>>> np.logspace(np.log10(0.1), np.log10(10), num=11, base=10)
array([ 0.1       ,  0.15848932,  0.25118864,  0.39810717,  0.63095734,
1.        ,  1.58489319,  2.51188643,  3.98107171,  6.30957344,
10.        ])

>>> np.logspace(np.log(0.1), np.log(10), num=11, base=2.718)
array([0.10002388, 0.15851959, 0.25122463, 0.39814519, 0.63098747,
1.        , 1.58481752, 2.51164657, 3.98050148, 6.30836847,
9.99761287])

>>> np.logspace(np.log2(0.1), np.log2(10), num=11, base=2)
array([ 0.1       ,  0.15848932,  0.25118864,  0.39810717,  0.63095734,
1.        ,  1.58489319,  2.51188643,  3.98107171,  6.30957344,
10.        ])



Second, right now I'm clipping gyroscope values at 5 rad/s and linear acceleration values at 4*g. Is this reasonable or what are common values for clipping?