U
    ^»{j¨  ã                   @   sR  d dl Z d dlmZmZ d dlmZmZ d dlZd dl	m
Z ddlmZmZmZ ddlmZmZ ddlmZ ddlmZmZmZm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%m&Z&m'Z'm(Z(m)Z) ddl*m+Z, ddl*m-Z. ddl*m/Z0 dddddgZ1dd„ Z2G dd„ deed�Z3G dd„ dee3ed�Z4dd„ Z5d%d#d$„Z6dS )&é    N)ÚABCMetaÚabstractmethod)ÚIntegralÚRealé   )ÚBaseEstimatorÚClassifierMixinÚ_fit_context)ÚConvergenceWarningÚNotFittedError)ÚLabelEncoder)Úcheck_arrayÚcheck_random_stateÚcolumn_or_1dÚcompute_class_weight)ÚIntervalÚ
StrOptions)Úsafe_sparse_dot)Úavailable_if)Ú_ovr_decision_functionÚcheck_classification_targets)Ú_check_large_sparseÚ_check_sample_weightÚ_num_samplesÚcheck_consistent_lengthÚcheck_is_fittedé   )Ú
_liblinear)Ú_libsvm)Ú_libsvm_sparseÚc_svcÚnu_svcZ	one_classZepsilon_svrZnu_svrc                 C   sä   | j d d }g }t t dg|g¡¡}t|ƒD ]®}||| ||d  …dd…f }t|d |ƒD ]z}||| ||d  …dd…f }	| |d || ||d  …f }
| ||| ||d  …f }| t|
|ƒt||	ƒ ¡ qbq0|S )z�Generate primal coefficients from dual coefficients
    for the one-vs-one multi class LibSVM in the case
    of a linear kernel.r   r   N)ÚshapeÚnpZcumsumZhstackÚrangeÚappendr   )Ú	dual_coefZ	n_supportZsupport_vectorsÚn_classÚcoefZsv_locsZclass1Zsv1Zclass2Zsv2Zalpha1Zalpha2© r)   úP/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/svm/_base.pyÚ_one_vs_one_coef!   s    	   r+   c                   @   s¢  e Zd ZU dZedddddhƒegeeddd	d
�geddhƒeeddd	d
�geedddd
�geedddd
�geedddd
�geedddd
�geeddd	d
�gdgdgeedddd
�gedhƒe	dgdgeeddd	d
�gdgdœZ
e	ed< dddddgZedd„ ƒZdd„ Zedd�d>dd„ƒZd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zed8d9„ ƒZd:d;„ Z ed<d=„ ƒZ!dS )?Ú
BaseLibSVMzÉBase class for estimators that use libsvm as backing library.

    This implements support vector machine classification and regression.

    Parameter documentation is in the derived `SVC` class.
    ÚlinearZpolyZrbfZsigmoidÚprecomputedr   NÚleft)ÚclosedÚscaleÚautoç        Zneitherç      ð?ÚrightÚbooleanZbalancedÚverboseéÿÿÿÿÚrandom_state©ÚkernelÚdegreeÚgammaÚcoef0ÚtolÚCÚnuÚepsilonÚ	shrinkingÚprobabilityÚ
cache_sizeÚclass_weightr7   Úmax_iterr9   Ú_parameter_constraintsc                 C   sz   | j tkrtdt| j f ƒ‚|| _|| _|| _|| _|| _|| _|| _	|| _
|	| _|
| _|| _|| _|| _|| _|| _d S )Nz&impl should be one of %s, %s was given)Ú_implÚLIBSVM_IMPLÚ
ValueErrorr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   r7   rG   r9   )Úselfr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   r7   rG   r9   r)   r)   r*   Ú__init__f   s&    
ÿzBaseLibSVM.__init__c                 C   s   d| j dkiS )NÚpairwiser.   )r;   ©rL   r)   r)   r*   Ú
_more_tagsŽ   s    zBaseLibSVM._more_tagsT)Zprefer_skip_nested_validationc                 C   s$  t | jƒ}t |¡}|r*| jdkr*tdƒ‚|o8t| jƒ | _t| jƒrRt||ƒ n| j	||t
jdddd�\}}|  |¡}t
j|dkrˆg n|t
jd�}t | j¡}t|ƒ}|d	krØ||jd
 krØtdd||jd
 f  ƒ‚| jdk�r||jd k�rtd |jd
 |jd ¡ƒ‚|jd
 d
k�rD|jd
 |k�rDtd|j|jf ƒ‚t| jƒ�rTdn| j}|dk�rld| _nšt| jtƒ�rð| jdk�rÒ|�r¦| |¡ ¡ | ¡ d	  n| ¡ }	|	d
k�rÊd|jd |	  nd| _n| jdk�rd|jd  | _nt| jtƒ�r| j| _| j�r| jn| j}
| j�r.t ddd� | !t
 "d¡j#¡}|
||||||d� t$|dƒ�rf|jn|f| _%| j& '¡ | _(| j)| _*| jdk�r¶t+| j,ƒd	k�r¶|  j&d9  _&| j) | _)| j�rÆ| j*j-n| j*}t
 .| j(¡ /¡ }t
 .|¡ /¡ }|�rö|�sþtdƒ‚| jdk�r| j0| _1n| j0 2¡ | _1| S )a•  Fit the SVM model according to the given training data.

        Parameters
        ----------
        X : {array-like, sparse matrix} of shape (n_samples, n_features)                 or (n_samples, n_samples)
            Training vectors, where `n_samples` is the number of samples
            and `n_features` is the number of features.
            For kernel="precomputed", the expected shape of X is
            (n_samples, n_samples).

        y : array-like of shape (n_samples,)
            Target values (class labels in classification, real numbers in
            regression).

        sample_weight : array-like of shape (n_samples,), default=None
            Per-sample weights. Rescale C per sample. Higher weights
            force the classifier to put more emphasis on these points.

        Returns
        -------
        self : object
            Fitted estimator.

        Notes
        -----
        If X and y are not C-ordered and contiguous arrays of np.float64 and
        X is not a scipy.sparse.csr_matrix, X and/or y may be copied.

        If X is a dense array, then the other methods will not support sparse
        matrices as input.
        r.   z-Sparse precomputed kernels are not supported.r@   ÚcsrF)ÚdtypeÚorderÚaccept_sparseÚaccept_large_sparseN©rR   r   r   z"X and y have incompatible shapes.
zX has %s samples, but y has %s.r   zDPrecomputed matrix must be a square matrix. Input is a {}x{} matrix.zŠsample_weight and X have incompatible shapes: %r vs %r
Note: Sparse matrices cannot be indexed w/boolean masks (use `indices=True` in CV).r3   r1   r4   r2   z[LibSVM]Ú ©ÚendÚi)Úrandom_seedr"   ©r    r!   r8   zxThe dual coefficients or intercepts are not finite. The input data may contain large values and need to be preprocessed.)3r   r9   ÚspÚissparser;   Ú	TypeErrorÚcallableÚ_sparser   Ú_validate_datar#   Úfloat64Ú_validate_targetsÚasarrayrJ   ÚindexrI   r   r"   rK   ÚformatÚ_gammaÚ
isinstancer=   ÚstrÚmultiplyZmeanÚvarr   Ú_sparse_fitÚ
_dense_fitr7   ÚprintÚrandintÚiinfoÚmaxÚhasattrÚ
shape_fit_Ú
intercept_ÚcopyÚ_intercept_Ú
dual_coef_Ú_dual_coef_ÚlenÚclasses_ÚdataÚisfiniteÚallÚ	_num_iterÚn_iter_Úitem)rL   ÚXÚyÚsample_weightÚrndÚsparseÚsolver_typeZ	n_samplesr;   ZX_varÚfitÚseedr&   Zintercept_finitenessZdual_coef_finitenessr)   r)   r*   rˆ   ’   s”    "


ú
	
 ÿÿÿ ÿÿ 
üÿ
($
ÿ
zBaseLibSVM.fitc                 C   s   t |dd�jtjdd�S )zxValidation of y and class_weight.

        Default implementation for SVR and one-class; overridden in BaseSVC.
        T©ÚwarnF)rv   )r   Zastyper#   rc   )rL   rƒ   r)   r)   r*   rd     s    zBaseLibSVM._validate_targetsc                 C   s.   | j dkst‚| j dkr*t d| j t¡ d S )N©r   r   r   znSolver terminated early (max_iter=%i).  Consider pre-processing your data with StandardScaler or MinMaxScaler.)Úfit_status_ÚAssertionErrorÚwarningsr‹   rG   r
   rO   r)   r)   r*   Ú_warn_from_fit_status&  s    
ýûz BaseLibSVM._warn_from_fit_statusc                 C   sÄ   t | jƒr6|| _|  |¡}|jd |jd kr6tdƒ‚t | j¡ tj	||||t
| dt d¡ƒ|| j| j| j| j| j| j| j| j| j| j| j|d�\	| _| _| _| _| _| _| _| _| _ |  !¡  d S )Nr   r   z(X.shape[0] should be equal to X.shape[1]Ú_class_weight)Úsvm_typer„   rF   r;   r@   rA   rD   r<   rC   r?   rE   r>   r=   rB   rG   r[   )"r`   r;   Ú_BaseLibSVM__XfitÚ_compute_kernelr"   rK   ÚlibsvmÚset_verbosity_wrapr7   rˆ   Úgetattrr#   Úemptyr@   rA   rD   r<   rC   r?   rE   r>   rh   rB   rG   Úsupport_Úsupport_vectors_Ú
_n_supportrx   ru   Ú_probAÚ_probBr�   r   r�   )rL   r‚   rƒ   r„   r‡   r;   r[   r)   r)   r*   rn   1  sJ    

íözBaseLibSVM._dense_fitc                 C   sP  t j|jt jdd�|_| ¡  | j |¡}t | j	¡ t 
|jd |j|j|j|||| j| j| j| j| jt| dt  d¡ƒ|| j| j| jt| jƒt| jƒ| j|¡\	| _| _}| _| _| _ | _!| _"| _#|  $¡  t%| dƒrät&| j'ƒd }	nd}	| jjd }
t  (t  )|
¡|	¡}|
�st* +g ¡| _,n2t  )d|j-d |j-|	 ¡}t* +|||f|	|
f¡| _,d S )Nr@   ©rR   rS   r   r‘   r   r{   ).r#   re   r|   rc   Úsort_indicesÚ_sparse_kernelsrf   Úlibsvm_sparser–   r7   Zlibsvm_sparse_trainr"   ÚindicesÚindptrr<   rh   r>   r?   r@   r—   r˜   rA   rE   rB   ÚintrC   rD   rG   r™   rš   ru   r›   rœ   r�   r�   r   r�   rs   rz   r{   ZtileZaranger]   Ú
csr_matrixrx   Úsize)rL   r‚   rƒ   r„   r‡   r;   r[   Úkernel_typeZdual_coef_datar'   Zn_SVZdual_coef_indicesZdual_coef_indptrr)   r)   r*   rm   a  sl    êö
  ÿ ÿzBaseLibSVM._sparse_fitc                 C   s$   |   |¡}| jr| jn| j}||ƒS )aÈ  Perform regression on samples in X.

        For an one-class model, +1 (inlier) or -1 (outlier) is returned.

        Parameters
        ----------
        X : {array-like, sparse matrix} of shape (n_samples, n_features)
            For kernel="precomputed", the expected shape of X is
            (n_samples_test, n_samples_train).

        Returns
        -------
        y_pred : ndarray of shape (n_samples,)
            The predicted values.
        )Ú_validate_for_predictra   Ú_sparse_predictÚ_dense_predict)rL   r‚   Úpredictr)   r)   r*   r«   Ÿ  s    
zBaseLibSVM.predictc                 C   s®   |   |¡}|jdkr"t|ddd�}| j}t| jƒrfd}|jd | jd krftd|jd | jd f ƒ‚t 	| j
¡}tj|| j| j| j| j| j| j| j||| j| j| j| jd�S )	Nr   r@   F)rS   rU   r.   r   úMX.shape[1] = %d should be equal to %d, the number of samples at training time)r’   r;   r<   r>   r=   rE   )r”   Úndimr   r;   r`   r"   rt   rK   rJ   rf   rI   r•   r«   r™   rš   r›   ry   rw   rœ   r�   r<   r>   rh   rE   )rL   r‚   r;   r’   r)   r)   r*   rª   ³  s:    


þÿòzBaseLibSVM._dense_predictc                 C   sœ   | j }t|ƒrd}| j |¡}d}t |j|j|j| j	j| j	j| j	j| j
j| jt | j¡|| j| j| j| j|t| dt d¡ƒ| j| j| j| j| j| j| j¡S )Nr.   r3   r‘   r   )r;   r`   r    rf   r¡   Zlibsvm_sparse_predictr|   r¢   r£   rš   ry   rw   rJ   rI   r<   rh   r>   r?   r—   r#   r˜   rA   rB   rC   rD   r›   rœ   r�   )rL   r‚   r;   r§   r@   r)   r)   r*   r©   Õ  s<    
èzBaseLibSVM._sparse_predictc                 C   s@   t | jƒr<|  || j¡}t |¡r*| ¡ }tj|tjdd�}|S )z0Return the data transformed by a callable kernelr@   rž   )	r`   r;   r“   r]   r^   Ztoarrayr#   re   rc   ©rL   r‚   r;   r)   r)   r*   r”   ú  s    

zBaseLibSVM._compute_kernelc                 C   sV   |   |¡}|  |¡}| jr&|  |¡}n
|  |¡}| jdkrRt| jƒdkrR| ¡  S |S )af  Evaluates the decision function for the samples in X.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)

        Returns
        -------
        X : array-like of shape (n_samples, n_class * (n_class-1) / 2)
            Returns the decision function of the sample for each class
            in the model.
        r\   r   )	r¨   r”   ra   Ú_sparse_decision_functionÚ_dense_decision_functionrI   rz   r{   Úravel)rL   r‚   Zdec_funcr)   r)   r*   Ú_decision_function  s    



zBaseLibSVM._decision_functionc                 C   sh   t |tjddd�}| j}t|ƒr$d}tj|| j| j| j	| j
| j| j| jt | j¡|| j| j| j| jd�S )Nr@   F)rR   rS   rU   r.   ©r’   r;   r<   rE   r>   r=   )r   r#   rc   r;   r`   r•   Údecision_functionr™   rš   r›   ry   rw   rœ   r�   rJ   rf   rI   r<   rE   r>   rh   r®   r)   r)   r*   r°   #  s(    
òz#BaseLibSVM._dense_decision_functionc                 C   s²   t j|jt jdd�|_| j}t|dƒr*d}| j |¡}t 	|j|j
|j| jj| jj
| jj| jj| jt | j¡|| j| j| j| j| jt| dt  d¡ƒ| j| j| j| j| j| j| j¡S )Nr@   rž   Ú__call__r.   r‘   r   )r#   re   r|   rc   r;   rs   r    rf   r¡   Zlibsvm_sparse_decision_functionr¢   r£   rš   ry   rw   rJ   rI   r<   rh   r>   r?   r@   r—   r˜   rA   rB   rC   rD   r›   rœ   r�   ©rL   r‚   r;   r§   r)   r)   r*   r¯   ;  s<    

èz$BaseLibSVM._sparse_decision_functionc                 C   sú   t | ƒ t| jƒs*| j|dtjdddd�}| jrDt |¡sDt 	|¡}| jrR| 
¡  t |¡r~| js~t| jƒs~tdt| ƒj ƒ‚| jdkr¸|jd | jd kr¸td	|jd | jd f ƒ‚| j}| jsö|jdkrö| j ¡ |jd krötd
| jj› d�ƒ‚|S )NrQ   r@   F)rT   rR   rS   rU   Úresetz3cannot use sparse input in %r trained on dense datar.   r   r   r¬   zThe internal representation of z was altered)r   r`   r;   rb   r#   rc   ra   r]   r^   r¥   rŸ   rK   ÚtypeÚ__name__r"   rt   rš   r¦   Ú
n_support_ÚsumÚ	__class__)rL   r‚   Úsvr)   r)   r*   r¨   _  sB    
ú	
ÿÿ
þÿ$ÿz BaseLibSVM._validate_for_predictc                 C   s<   | j dkrtdƒ‚|  ¡ }t |¡r0d|jj_nd|j_|S )z“Weights assigned to the features when `kernel="linear"`.

        Returns
        -------
        ndarray of shape (n_features, n_classes)
        r-   z2coef_ is only available when using a linear kernelF)r;   ÚAttributeErrorÚ	_get_coefr]   r^   r|   ÚflagsZ	writeable©rL   r(   r)   r)   r*   Úcoef_‡  s    

zBaseLibSVM.coef_c                 C   s   t | j| jƒS )N)r   ry   rš   rO   r)   r)   r*   r¿   ž  s    zBaseLibSVM._get_coefc                 C   sV   zt | ƒ W n tk
r$   t‚Y nX t | j¡}|dkr@| jS t | jd g¡S dS )z)Number of support vectors for each class.rŒ   r   N)	r   r   r¾   rJ   rf   rI   r›   r#   Úarray)rL   r’   r)   r)   r*   rº   ¡  s    
zBaseLibSVM.n_support_)N)"r¹   Ú
__module__Ú__qualname__Ú__doc__r   r`   r   r   r   ÚdictrH   Ú__annotations__r    r   rM   rP   r	   rˆ   rd   r�   rn   rm   r«   rª   r©   r”   r²   r°   r¯   r¨   ÚpropertyrÂ   r¿   rº   r)   r)   r)   r*   r,   A   sZ   
	þ
þë
' 0>"%$(
r,   )Ú	metaclassc                       sÞ   e Zd ZU dZejeddhƒgdgdœ–Zeed< dD ]Z	e 
e	¡ q6e‡ fdd	„ƒZd
d„ Zdd„ Z‡ fdd„Zdd„ Zeeƒdd„ ƒZeeƒdd„ ƒZdd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZed d!„ ƒZ‡  ZS )"ÚBaseSVCz!ABC for LibSVM-based classifiers.ÚovrÚovor6   )Údecision_function_shapeÚ
break_tiesrH   )rB   rA   c                    s:   || _ || _tƒ j|||||||d||	|
||||d� d S )Nr3   r:   )rÎ   rÏ   ÚsuperrM   )rL   r;   r<   r=   r>   r?   r@   rA   rC   rD   rE   rF   r7   rG   rÎ   r9   rÏ   ©r¼   r)   r*   rM   ½  s&    ñzBaseSVC.__init__c                 C   sl   t |dd�}t|ƒ tj|dd�\}}t| j||d�| _t|ƒdk rTtdt|ƒ ƒ‚|| _	tj
|tjdd�S )	NTrŠ   )Zreturn_inverse©Úclassesrƒ   r   z>The number of classes has to be greater than one; got %d classr@   rž   )r   r   r#   Úuniquer   rF   Úclass_weight_rz   rK   r{   re   rc   )rL   rƒ   Zy_Úclsr)   r)   r*   rd   å  s    ÿÿzBaseSVC._validate_targetsc                 C   s>   |   |¡}| jdkr:t| jƒdkr:t|dk | t| jƒƒS |S )a4  Evaluate the decision function for the samples in X.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            The input samples.

        Returns
        -------
        X : ndarray of shape (n_samples, n_classes * (n_classes-1) / 2)
            Returns the decision function of the sample for each class
            in the model.
            If decision_function_shape='ovr', the shape is (n_samples,
            n_classes).

        Notes
        -----
        If decision_function_shape='ovo', the function values are proportional
        to the distance of the samples X to the separating hyperplane. If the
        exact distances are required, divide the function values by the norm of
        the weight vector (``coef_``). See also `this question
        <https://stats.stackexchange.com/questions/14876/
        interpreting-distance-from-hyperplane-in-svm>`_ for further details.
        If decision_function_shape='ovr', the decision function is a monotonic
        transformation of ovo decision function.
        rÌ   r   r   )r²   rÎ   rz   r{   r   )rL   r‚   Údecr)   r)   r*   r´   ô  s    
zBaseSVC.decision_functionc                    sx   t | ƒ | jr | jdkr tdƒ‚| jrT| jdkrTt| jƒdkrTtj|  |¡dd�}nt	ƒ  
|¡}| j tj|tjd�¡S )a÷  Perform classification on samples in X.

        For an one-class model, +1 or -1 is returned.

        Parameters
        ----------
        X : {array-like, sparse matrix} of shape (n_samples, n_features) or                 (n_samples_test, n_samples_train)
            For kernel="precomputed", the expected shape of X is
            (n_samples_test, n_samples_train).

        Returns
        -------
        y_pred : ndarray of shape (n_samples,)
            Class labels for samples in X.
        rÍ   z>break_ties must be False when decision_function_shape is 'ovo'rÌ   r   r   )ZaxisrV   )r   rÏ   rÎ   rK   rz   r{   r#   Zargmaxr´   rÐ   r«   Ztakere   Zintp)rL   r‚   rƒ   rÑ   r)   r*   r«     s    ÿÿþýzBaseSVC.predictc                 C   s$   | j stdƒ‚| jdkr tdƒ‚dS )Nz5predict_proba is not available when probability=Falser\   z0predict_proba only implemented for SVC and NuSVCT)rD   r¾   rI   rO   r)   r)   r*   Ú_check_proba9  s    ÿ
zBaseSVC._check_probac                 C   sD   |   |¡}| jjdks"| jjdkr*tdƒ‚| jr6| jn| j}||ƒS )aÄ  Compute probabilities of possible outcomes for samples in X.

        The model needs to have probability information computed at training
        time: fit with attribute `probability` set to True.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            For kernel="precomputed", the expected shape of X is
            (n_samples_test, n_samples_train).

        Returns
        -------
        T : ndarray of shape (n_samples, n_classes)
            Returns the probability of the sample for each class in
            the model. The columns correspond to the classes in sorted
            order, as they appear in the attribute :term:`classes_`.

        Notes
        -----
        The probability model is created using cross validation, so
        the results can be slightly different than those obtained by
        predict. Also, it will produce meaningless results on very small
        datasets.
        r   zApredict_proba is not available when fitted with probability=False)r¨   ÚprobA_r¦   ÚprobB_r   ra   Ú_sparse_predict_probaÚ_dense_predict_proba)rL   r‚   Z
pred_probar)   r)   r*   Úpredict_probaB  s    
ÿÿzBaseSVC.predict_probac                 C   s   t  |  |¡¡S )a  Compute log probabilities of possible outcomes for samples in X.

        The model need to have probability information computed at training
        time: fit with attribute `probability` set to True.

        Parameters
        ----------
        X : array-like of shape (n_samples, n_features) or                 (n_samples_test, n_samples_train)
            For kernel="precomputed", the expected shape of X is
            (n_samples_test, n_samples_train).

        Returns
        -------
        T : ndarray of shape (n_samples, n_classes)
            Returns the log-probabilities of the sample for each class in
            the model. The columns correspond to the classes in sorted
            order, as they appear in the attribute :term:`classes_`.

        Notes
        -----
        The probability model is created using cross validation, so
        the results can be slightly different than those obtained by
        predict. Also, it will produce meaningless results on very small
        datasets.
        )r#   ÚlogrÝ   )rL   r‚   r)   r)   r*   Úpredict_log_probag  s    zBaseSVC.predict_log_probac                 C   sh   |   |¡}| j}t|ƒrd}t | j¡}tj|| j| j	| j
| j| j| j| j||| j| j| j| jd�}|S )Nr.   r³   )r”   r;   r`   rJ   rf   rI   r•   rÝ   r™   rš   r›   ry   rw   rœ   r�   r<   rE   r>   rh   )rL   r‚   r;   r’   Zpprobr)   r)   r*   rÜ   …  s,    
òzBaseSVC._dense_predict_probac                 C   s°   t j|jt jdd�|_| j}t|ƒr(d}| j |¡}t 	|j|j
|j| jj| jj
| jj| jj| jt | j¡|| j| j| j| j| jt| dt  d¡ƒ| j| j| j| j| j| j| j¡S )Nr@   rž   r.   r‘   r   )r#   re   r|   rc   r;   r`   r    rf   r¡   Zlibsvm_sparse_predict_probar¢   r£   rš   ry   rw   rJ   rI   r<   rh   r>   r?   r@   r—   r˜   rA   rB   rC   rD   r›   rœ   r�   r¶   r)   r)   r*   rÛ      s<    
èzBaseSVC._sparse_predict_probac                 C   s^   | j jd dkr t| j | jƒ}n:t| j | j| jƒ}t |d ¡rPt |¡ 	¡ }n
t
 |¡}|S )Nr   r   )rx   r"   r   rš   r+   r›   r]   r^   ZvstackZtocsrr#   rÁ   r)   r)   r*   r¿   Ä  s      ÿ
zBaseSVC._get_coefc                 C   s   | j S ©z¡Parameter learned in Platt scaling when `probability=True`.

        Returns
        -------
        ndarray of shape  (n_classes * (n_classes - 1) / 2)
        )rœ   rO   r)   r)   r*   rÙ   Ô  s    zBaseSVC.probA_c                 C   s   | j S rà   )r�   rO   r)   r)   r*   rÚ   Þ  s    zBaseSVC.probB_c                 C   s   | j S )zWeights per class)rÕ   rO   r)   r)   r*   r‘   é  s    zBaseSVC._class_weight)r¹   rÄ   rÅ   rÆ   r,   rH   r   rÇ   rÈ   Zunused_paramÚpopr   rM   rd   r´   r«   rØ   r   rÝ   rß   rÜ   rÛ   r¿   rÉ   rÙ   rÚ   r‘   Ú__classcell__r)   r)   rÑ   r*   rË   ²  s4   
ý' %	
$
$
	

rË   c           	      C   sð   ddidddœdœddd	iidd
idddœdœdddiiddddœiddœ}| dkr\||  S | dkrpt d|  ƒ‚| |d¡}|dkrŽd| }nJ| |d¡}|dkr°d||f }n(| |d¡}|dkrÔd|||f }n|S t d||||f ƒ‚dS )a  Find the liblinear magic number for the solver.

    This number depends on the values of the following attributes:
      - multi_class
      - penalty
      - loss
      - dual

    The same number is also internally used by LibLinear to determine
    which solver to use.
    Fé   r   é   )FT)Úl1Úl2ræ   Té   é   r   r   é   é   é   é   )Úlogistic_regressionZhingeZsquared_hingeÚepsilon_insensitiveÚsquared_epsilon_insensitiveÚcrammer_singerrð   rÌ   z<`multi_class` must be one of `ovr`, `crammer_singer`, got %rNzloss='%s' is not supportedz>The combination of penalty='%s' and loss='%s' is not supportedzLThe combination of penalty='%s' and loss='%s' are not supported when dual=%szJUnsupported set of arguments: %s, Parameters: penalty=%r, loss=%r, dual=%r)rK   Úget)	Úmulti_classÚpenaltyÚlossÚdualZ_solver_type_dictZ_solver_penZerror_stringZ_solver_dualZ
solver_numr)   r)   r*   Ú_get_liblinear_solver_typeñ  sD    

ú	ÿ
ÿÿÿÿ
ÿÿrö   rÌ   rí   çš™™™™™¹?c                 C   sª  |dkrJt ƒ }| |¡}|j}t|ƒdk r:td|d  ƒ‚t|||d�}ntjdtjd�}|}t	 
|¡ t|ƒ}|r€tddd	� d
}|r¢|dkržtd| ƒ‚n|}t 
|¡ t 
|¡ t	 
|¡ t | ¡rÒt| ƒ tj|tjd� ¡ }tj|dd�}t|| tjd�}t||||ƒ}t	 | |t | ¡||
||||	| t d¡j¡||¡\}}t|ƒ}||	k�rht dt¡ |�r˜|dd…dd…f }||dd…df  }n|}d}|||fS )a  Used by Logistic Regression (and CV) and LinearSVC/LinearSVR.

    Preprocessing is done in this function before supplying it to liblinear.

    Parameters
    ----------
    X : {array-like, sparse matrix} of shape (n_samples, n_features)
        Training vector, where `n_samples` is the number of samples and
        `n_features` is the number of features.

    y : array-like of shape (n_samples,)
        Target vector relative to X

    C : float
        Inverse of cross-validation parameter. The lower the C, the higher
        the penalization.

    fit_intercept : bool
        Whether or not to fit an intercept. If set to True, the feature vector
        is extended to include an intercept term: ``[x_1, ..., x_n, 1]``, where
        1 corresponds to the intercept. If set to False, no intercept will be
        used in calculations (i.e. data is expected to be already centered).

    intercept_scaling : float
        Liblinear internally penalizes the intercept, treating it like any
        other term in the feature vector. To reduce the impact of the
        regularization on the intercept, the `intercept_scaling` parameter can
        be set to a value greater than 1; the higher the value of
        `intercept_scaling`, the lower the impact of regularization on it.
        Then, the weights become `[w_x_1, ..., w_x_n,
        w_intercept*intercept_scaling]`, where `w_x_1, ..., w_x_n` represent
        the feature weights and the intercept weight is scaled by
        `intercept_scaling`. This scaling allows the intercept term to have a
        different regularization behavior compared to the other features.

    class_weight : dict or 'balanced', default=None
        Weights associated with classes in the form ``{class_label: weight}``.
        If not given, all classes are supposed to have weight one. For
        multi-output problems, a list of dicts can be provided in the same
        order as the columns of y.

        The "balanced" mode uses the values of y to automatically adjust
        weights inversely proportional to class frequencies in the input data
        as ``n_samples / (n_classes * np.bincount(y))``

    penalty : {'l1', 'l2'}
        The norm of the penalty used in regularization.

    dual : bool
        Dual or primal formulation,

    verbose : int
        Set verbose to any positive number for verbosity.

    max_iter : int
        Number of iterations.

    tol : float
        Stopping condition.

    random_state : int, RandomState instance or None, default=None
        Controls the pseudo random number generation for shuffling the data.
        Pass an int for reproducible output across multiple function calls.
        See :term:`Glossary <random_state>`.

    multi_class : {'ovr', 'crammer_singer'}, default='ovr'
        `ovr` trains n_classes one-vs-rest classifiers, while `crammer_singer`
        optimizes a joint objective over all classes.
        While `crammer_singer` is interesting from an theoretical perspective
        as it is consistent it is seldom used in practice and rarely leads to
        better accuracy and is more expensive to compute.
        If `crammer_singer` is chosen, the options loss, penalty and dual will
        be ignored.

    loss : {'logistic_regression', 'hinge', 'squared_hinge',             'epsilon_insensitive', 'squared_epsilon_insensitive},             default='logistic_regression'
        The loss function used to fit the model.

    epsilon : float, default=0.1
        Epsilon parameter in the epsilon-insensitive loss function. Note
        that the value of this parameter depends on the scale of the target
        variable y. If unsure, set epsilon=0.

    sample_weight : array-like of shape (n_samples,), default=None
        Weights assigned to each sample.

    Returns
    -------
    coef_ : ndarray of shape (n_features, n_features + 1)
        The coefficient vector got by minimizing the objective function.

    intercept_ : float
        The intercept term added to the vector.

    n_iter_ : array of int
        Number of iterations run across for each class.
    )rî   rï   r   zeThis solver needs samples of at least 2 classes in the data, but the data contains only one class: %rr   rÒ   rV   z[LibLinear]rW   rX   g      ð¿zqIntercept scaling is %r but needs to be greater than 0. To disable fitting an intercept, set fit_intercept=False.ÚW)ÚrequirementsrZ   z@Liblinear failed to converge, increase the number of iterations.Nr8   r3   )r   Zfit_transformr{   rz   rK   r   r#   r˜   rc   Ú	liblinearr–   r   ro   r•   r¡   r]   r^   r   re   r±   Úrequirer   rö   Z
train_wraprp   rq   rr   r�   r‹   r
   )r‚   rƒ   r@   Zfit_interceptZintercept_scalingrF   ró   rõ   r7   rG   r?   r9   rò   rô   rB   r„   ÚencZy_indr{   rÕ   r…   Zbiasr‡   Z	raw_coef_r€   Z
n_iter_maxrÂ   ru   r)   r)   r*   Ú_fit_liblinear*  sz    t
ýÿ
þÿ



ô
þrý   )NrÌ   rí   r÷   N)7r�   Úabcr   r   Únumbersr   r   Únumpyr#   Zscipy.sparser†   r]   Úbaser   r   r	   Ú
exceptionsr
   r   Zpreprocessingr   Úutilsr   r   r   r   Zutils._param_validationr   r   Zutils.extmathr   Zutils.metaestimatorsr   Zutils.multiclassr   r   Zutils.validationr   r   r   r   r   rW   r   rú   r   r•   r   r¡   rJ   r+   r,   rË   rö   rý   r)   r)   r)   r*   Ú<module>   sB        u  AE     ð