def support_vector_machine_train(X, Y, class_weight='balanced', C=1.0,
    kernel='linear', gamma='auto', coef0=0.0, degree=2, probability=False,
    shrinking=True, tol=0.001, verbose=False, max_iter=-1, random_state=
    None, cache_size=5000):
    """ Trains a support vector machine (SVM) using the SVC sklearn method. Very slow; 200k x 39 feats too large

    Args:
        X: 2D Narray of feature information
        Y: class labels to learn
        class_weight: (multi-class) Vector of weights to scale the C parameter for each class i, otherwise [1,]*num_classes
                      'balanced' yields [1/class_membership,] for each class to help balance assymetric class labels
        C           : The penalty parameter C for the error term; higher means stricter sensitivity to mismatch
        kernel      : 'linear','poly','rbf','sigmoid','precomputed' or a callable function. Default 'linear'
        gamma       : Kernel coefficient for 'rbf', 'poly', and 'sigmoid'. 'Auto' uses 1/num_features.
        degree      : Polynomial degree to use if kernel type 'poly'
        coef0       : Intercept to use in 'poly' and 'sigmoid' functions
        probability : Boolean, whether to attempt to calculate probability estimates. Significantly slows computation.
        shrinking   : Boolean, whether to use shrinking heuristic. Can speed up convergence in terms of runtime.
        tol         : Tolerance float for convergence monitoring, default 1e-3
        verbose     : Boolean, verbose mode
        max_iter    : How many iterations to permit, default = -1 (no limit)
        random_state: Random number seed to use, or None to generate new
        cache_size  : The cache size (MB) to use for storing frequently requested distances during training. Default 5000.

    >>> X = [[0, 0], [1, 1]]
    >>> Y = [0, 1]
    >>> classifier = support_vector_machine_train(X, Y, C = 1.0, kernel = 'rbf', gamma = 'auto', random_state = 0)

    >>> print(classifier.predict([[0, 0]]))
    [0]

    >>> print(classifier.predict([[1, 1]]))
    [1]

    >>> print(classifier.predict([[-0.8, -1],[0.8,1]]))
    [0 1]

    >>> numsamp = 20000
    >>> numfeat = 3
    >>> N.random.seed(0)
    >>> X = N.random.random((numsamp, numfeat))
    >>> Y = N.linspace(0,10,numsamp).astype(int)
    >>> classifier = support_vector_machine_train(X, Y, C = 1.0, kernel = 'linear', random_state = 0)
    >>> N.random.seed(0)
    >>> classifier.predict(N.random.random(numfeat).reshape(1, -1))
    array([6])

    """
    from sklearn import svm
    classifier = svm.SVC(C=C, kernel=kernel, degree=degree, gamma=gamma,
        coef0=coef0, shrinking=shrinking, probability=probability, tol=tol,
        class_weight=class_weight, verbose=verbose, max_iter=max_iter,
        decision_function_shape='ovr', random_state=random_state,
        cache_size=cache_size)
    classifier.fit(X, Y)
    return classifier
