ó
\c           @   s   d  Z  d d l Z d d l m Z m Z d d l m Z d d l m	 Z	 d d l
 m Z m Z d d l m Z d	 e e f d
     YZ d S(   sF   Module :mod:`sklearn.kernel_ridge` implements kernel ridge regression.i˙˙˙˙Ni   (   t   BaseEstimatort   RegressorMixin(   t   pairwise_kernels(   t   _solve_cholesky_kernel(   t   check_arrayt	   check_X_y(   t   check_is_fittedt   KernelRidgec           B   s\   e  Z d  Z d d d	 d d d	 d  Z d	 d  Z e d    Z d	 d	 d  Z d   Z	 RS(
   sö  Kernel ridge regression.

    Kernel ridge regression (KRR) combines ridge regression (linear least
    squares with l2-norm regularization) with the kernel trick. It thus
    learns a linear function in the space induced by the respective kernel and
    the data. For non-linear kernels, this corresponds to a non-linear
    function in the original space.

    The form of the model learned by KRR is identical to support vector
    regression (SVR). However, different loss functions are used: KRR uses
    squared error loss while support vector regression uses epsilon-insensitive
    loss, both combined with l2 regularization. In contrast to SVR, fitting a
    KRR model can be done in closed-form and is typically faster for
    medium-sized datasets. On the other  hand, the learned model is non-sparse
    and thus slower than SVR, which learns a sparse model for epsilon > 0, at
    prediction-time.

    This estimator has built-in support for multi-variate regression
    (i.e., when y is a 2d-array of shape [n_samples, n_targets]).

    Read more in the :ref:`User Guide <kernel_ridge>`.

    Parameters
    ----------
    alpha : {float, array-like}, shape = [n_targets]
        Small positive values of alpha improve the conditioning of the problem
        and reduce the variance of the estimates.  Alpha corresponds to
        ``(2*C)^-1`` in other linear models such as LogisticRegression or
        LinearSVC. If an array is passed, penalties are assumed to be specific
        to the targets. Hence they must correspond in number.

    kernel : string or callable, default="linear"
        Kernel mapping used internally. A callable should accept two arguments
        and the keyword arguments passed to this object as kernel_params, and
        should return a floating point number. Set to "precomputed" in
        order to pass a precomputed kernel matrix to the estimator
        methods instead of samples.

    gamma : float, default=None
        Gamma parameter for the RBF, laplacian, polynomial, exponential chi2
        and sigmoid kernels. Interpretation of the default value is left to
        the kernel; see the documentation for sklearn.metrics.pairwise.
        Ignored by other kernels.

    degree : float, default=3
        Degree of the polynomial kernel. Ignored by other kernels.

    coef0 : float, default=1
        Zero coefficient for polynomial and sigmoid kernels.
        Ignored by other kernels.

    kernel_params : mapping of string to any, optional
        Additional parameters (keyword arguments) for kernel function passed
        as callable object.

    Attributes
    ----------
    dual_coef_ : array, shape = [n_samples] or [n_samples, n_targets]
        Representation of weight vector(s) in kernel space

    X_fit_ : {array-like, sparse matrix}, shape = [n_samples, n_features]
        Training data, which is also required for prediction. If
        kernel == "precomputed" this is instead the precomputed
        training matrix, shape = [n_samples, n_samples].

    References
    ----------
    * Kevin P. Murphy
      "Machine Learning: A Probabilistic Perspective", The MIT Press
      chapter 14.4.3, pp. 492-493

    See also
    --------
    sklearn.linear_model.Ridge:
        Linear ridge regression.
    sklearn.svm.SVR:
        Support Vector Regression implemented using libsvm.

    Examples
    --------
    >>> from sklearn.kernel_ridge import KernelRidge
    >>> import numpy as np
    >>> n_samples, n_features = 10, 5
    >>> rng = np.random.RandomState(0)
    >>> y = rng.randn(n_samples)
    >>> X = rng.randn(n_samples, n_features)
    >>> clf = KernelRidge(alpha=1.0)
    >>> clf.fit(X, y) # doctest: +NORMALIZE_WHITESPACE
    KernelRidge(alpha=1.0, coef0=1, degree=3, gamma=None, kernel='linear',
                kernel_params=None)
    i   t   lineari   c         C   s:   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   alphat   kernelt   gammat   degreet   coef0t   kernel_params(   t   selfR	   R
   R   R   R   R   (    (    s3   lib/python2.7/site-packages/sklearn/kernel_ridge.pyt   __init__l   s    					c         C   sd   t  |  j  r! |  j p i  } n$ i |  j d 6|  j d 6|  j d 6} t | | d |  j d t | S(   NR   R   R   t   metrict   filter_params(   t   callableR
   R   R   R   R   R   t   True(   R   t   Xt   Yt   params(    (    s3   lib/python2.7/site-packages/sklearn/kernel_ridge.pyt   _get_kernelu   s    
c         C   s   |  j  d k S(   Nt   precomputed(   R
   (   R   (    (    s3   lib/python2.7/site-packages/sklearn/kernel_ridge.pyt	   _pairwise   s    c      	   C   s  t  | | d d
 d t d t \ } } | d k	 rX t | t  rX t | d t } n  |  j |  } t j	 |  j
  } t } t | j  d k rŻ | j d d  } t } n  |  j d	 k } t | | | | |  |  _ | rô |  j j   |  _ n  | |  _ |  S(   sp  Fit Kernel Ridge regression model

        Parameters
        ----------
        X : {array-like, sparse matrix}, shape = [n_samples, n_features]
            Training data. If kernel == "precomputed" this is instead
            a precomputed kernel matrix, shape = [n_samples,
            n_samples].

        y : array-like, shape = [n_samples] or [n_samples, n_targets]
            Target values

        sample_weight : float or array-like of shape [n_samples]
            Individual weights for each sample, ignored if None is passed.

        Returns
        -------
        self : returns an instance of self.
        t   accept_sparset   csrt   csct   multi_outputt	   y_numerict	   ensure_2di   i˙˙˙˙R   (   R   R   N(   R   R   t   Nonet
   isinstancet   floatR   t   FalseR   t   npt
   atleast_1dR	   t   lent   shapet   reshapeR
   R   t
   dual_coef_t   ravelt   X_fit_(   R   R   t   yt   sample_weightt   KR	   R+   t   copy(    (    s3   lib/python2.7/site-packages/sklearn/kernel_ridge.pyt   fit   s$    		c         C   s;   t  |  d d g  |  j | |  j  } t j | |  j  S(   s%  Predict using the kernel ridge model

        Parameters
        ----------
        X : {array-like, sparse matrix}, shape = [n_samples, n_features]
            Samples. If kernel == "precomputed" this is instead a
            precomputed kernel matrix, shape = [n_samples,
            n_samples_fitted], where n_samples_fitted is the number of
            samples used in the fitting for this estimator.

        Returns
        -------
        C : array, shape = [n_samples] or [n_samples, n_targets]
            Returns predicted values.
        R,   R*   (   R   R   R,   R%   t   dotR*   (   R   R   R/   (    (    s3   lib/python2.7/site-packages/sklearn/kernel_ridge.pyt   predict°   s    N(
   t   __name__t
   __module__t   __doc__R!   R   R   t   propertyR   R1   R3   (    (    (    s3   lib/python2.7/site-packages/sklearn/kernel_ridge.pyR      s   [
-(   R6   t   numpyR%   t   baseR    R   t   metrics.pairwiseR   t   linear_model.ridgeR   t   utilsR   R   t   utils.validationR   R   (    (    (    s3   lib/python2.7/site-packages/sklearn/kernel_ridge.pyt   <module>   s   