U
    fq                     @   s   d dl Z d dlZ d dlZd dlmZ d dlZG dd de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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d'd( Zd)d* ZdS )+    N)StandardScalerc                   @   s,   e Zd ZdZdddZdddZdd	 Zd
S )	KerasWrapzb A wrapper that allows us to set parameters in the constructor and do a reset before fitting.
    Fc                 C   s$   || _ || _|| _d | _t | _d S N)modelepochsflatten_outputinit_weightsr   scaler)selfr   r   r    r   </tmp/pip-target-lpfmz8o1/lib/python/shap/benchmark/models.py__init__
   s
    zKerasWrap.__init__r   c                 C   sH   | j d kr| j | _ n| j| j  | j| | jj||| j|dS )N)r   verbose)r   r   Zget_weightsZset_weightsr	   fitr   )r
   Xyr   r   r   r   r      s
    
zKerasWrap.fitc                 C   s2   | j |}| jr"| j| S | j|S d S r   )r	   Z	transformr   r   predictflatten)r
   r   r   r   r   r      s    zKerasWrap.predictN)F)r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s   

r   c                   C   s   t jjddS  Lasso Regression
    皙?alphasklearnlinear_modelLassor   r   r   r   corrgroups60__lasso#   s    r!   c                   C   s   t jjddS  Ridge Regression
    g      ?r   r   r   ZRidger   r   r   r   corrgroups60__ridge(   s    r%   c                   C   s   t jjdddS ) Decision Tree
    r      random_state	max_depthr   treeDecisionTreeRegressorr   r   r   r   corrgroups60__decision_tree-   s    r.   c                   C   s   t jjdddS  Random Forest
    d   r   r)   r   ensembleZRandomForestRegressorr   r   r   r   corrgroups60__random_forest4   s    r5   c                  C   s   ddl } | jddddddS ) Gradient Boosted Trees
    r   Nr'   2   r      r*   n_estimatorslearning_raten_jobsr)   xgboostZXGBRegressorr>   r   r   r   corrgroups60__gbm9   s    r@   c                  C   s   ddl m}  ddlm} |  }||dddd ||ddd	 ||ddd	 ||d
 |jdddgd t|dddS  4-Layer Neural Network
    r   
Sequential)Dense    relu<   
activationZ	input_dim   rJ      adamZmean_squared_errorZ	optimizerZlossZmetrics   Tr   keras.modelsrD   keras.layersrE   addcompiler   rD   rE   r   r   r   r   corrgroups60__ffnnA   s    rX   c                   C   s   t jjddS r   r   r   r   r   r   independentlinear60__lassoT   s    rY   c                   C   s   t jjddS r"   r$   r   r   r   r   independentlinear60__ridgeY   s    rZ   c                   C   s   t jjdddS )r&   r      r(   r+   r   r   r   r   "independentlinear60__decision_tree^   s    r\   c                   C   s   t jjdddS r/   r3   r   r   r   r   "independentlinear60__random_foreste   s    r]   c                  C   s   ddl } | jddddddS )r6   r   Nr'   r1   r   r8   r9   r=   r?   r   r   r   independentlinear60__gbmj   s    r^   c                  C   s   ddl m}  ddlm} |  }||dddd ||ddd	 ||ddd	 ||d
 |jdddgd t|dddS rA   rR   rW   r   r   r   independentlinear60__ffnnr   s    r_   c                      s"   t jjddd  fdd _ S )r   l1gMb`?)penaltyCc                    s     | d d df S NrM   Zpredict_probar   r   r   r   <lambda>       zcric__lasso.<locals>.<lambda>r   r   ZLogisticRegressionr   r   r   rf   r   cric__lasso   s    rj   c                      s    t jjdd  fdd _ S )r#   l2)ra   c                    s     | d d df S rc   rd   re   rf   r   r   rg      rh   zcric__ridge.<locals>.<lambda>ri   r   r   rf   r   cric__ridge   s    rl   c                      s"   t jjddd  fdd _ S )r&   r   r[   r(   c                    s     | d d df S rc   rd   re   rf   r   r   rg      rh   z%cric__decision_tree.<locals>.<lambda>)r   r,   ZDecisionTreeClassifierr   r   r   rf   r   cric__decision_tree   s    rm   c                      s"   t jjddd  fdd _ S )r0   r1   r   r2   c                    s     | d d df S rc   rd   re   rf   r   r   rg      rh   z%cric__random_forest.<locals>.<lambda>)r   r4   ZRandomForestClassifierr   r   r   rf   r   cric__random_forest   s    rn   c                     s8   ddl } | jddddddd  j _ fd	d
 _ S )r6   r   N   i  g{Gz?g?r8   )r*   r:   r;   Z	subsampler<   r)   c                    s    j | ddS )NT)Zoutput_margin)__orig_predictre   rf   r   r   rg      rh   zcric__gbm.<locals>.<lambda>)r>   ZXGBClassifierr   rp   r?   r   rf   r   	cric__gbm   s
    rq   c                  C   s   ddl m}  ddlm}m} |  }||dddd ||d ||ddd	 ||d ||d
dd	 |jdddgd t|dddS )rB   r   rC   )rE   Dropout
   rG   iP  rI   g      ?rL   rM   ZsigmoidrN   Zbinary_crossentropyZaccuracyrO   rP   TrQ   )rS   rD   rT   rE   rr   rU   rV   r   )rD   rE   rr   r   r   r   r   
cric__ffnn   s    rt   c                  C   s|   d} d}t | |f}|j t | }d|d< d|d< d|d< d|d< d|dddf< d	|d< tjjdd
}||| |S )r&   i@B    rM   )r   r   r8   r   )rM   rM      r[   )r*   )npZzerosshaper   r,   r-   r   )NMr   r   Z	xor_modelr   r   r   human__decision_tree   s    
r{   )r   Zsklearn.ensemblegcZsklearn.preprocessingr   numpyrw   objectr   r!   r%   r.   r5   r@   rX   rY   rZ   r\   r]   r^   r_   rj   rl   rm   rn   rq   rt   r{   r   r   r   r   <module>   s0   



