Calculate the inverted projection.

        The inverted projectio of a SOM is created by association each weight
        with the input which matches it the most, thus giving a good
        approximation of the "influence" of each input item.

        Works best for symbolic (instead of continuous) input data.

        Parameters
        ----------
        X : numpy array
            Input data
        identities : list
            A list of names for each of the input data. Must be the same
            length as X.

        Returns
        -------
        m : numpy array
            An array with the same shape as the map

def invert_projection(self, X, identities):
        """
        Calculate the inverted projection.

        The inverted projectio of a SOM is created by association each weight
        with the input which matches it the most, thus giving a good
        approximation of the "influence" of each input item.

        Works best for symbolic (instead of continuous) input data.

        Parameters
        ----------
        X : numpy array
            Input data
        identities : list
            A list of names for each of the input data. Must be the same
            length as X.

        Returns
        -------
        m : numpy array
            An array with the same shape as the map

        """
        distances = self.transform(X)

        if len(distances) != len(identities):
            raise ValueError("X and identities are not the same length: "
                             "{0} and {1}".format(len(X), len(identities)))

        node_match = []

        for d in distances.__getattribute__(self.argfunc)(0):
            node_match.append(identities[d])

        return np.array(node_match)