Class initialisation of fields
I think the primary question here is one of whether _generateStartingWeights or randMatrix are reusable; the secondary question is of naming conventions.

If _generateStartingWeights is not reusable, there's little reason not to write __init__ without the layers of helpers (and that's assuming there's not some better way to use numpy for this). Oh, and if it is reusable, you can just return this from it, instead of using a locally defined helper function:

def __init__(self, layerSizes):
    self.ws = [np.matrix(np.random.normal(0, 0.01, pair)) for pair in pairwise(layerSizes)]


On the flip side, if randMatrix is reusable, it needs to be somewhere other than local to another function.

As for naming conventions, a potentially heated subject, lots of people refer to PEP-8 (which I want to clarify is not a requirement for third party code unless you want to make it one). However due to its prevelance in the Python community, there seems to be a general preference for underscore_separated instead of camelCase names. Since it's not even always followed in the standard library, your project's preferences can overrule it. I only bring it up since I personally find camelCase names to be less in line with my view of "pythonic."