'Predict probability estimates.
By default the inputs to later models in a chain is the binary class
predictions not the class probabilities. To use class probabilities
as features in subsequent models set the cv property to be one of
the allowed values other than None.
Parameters
X : {array-like, sparse matrix}, shape (n_samples, n_features)
Returns
Y_prob : array-like, shape (n_samples, n_classes)'

@if_delegate_has_method('base_estimator')
def predict_proba(self, X):

    X = check_array(X, accept_sparse=True)
    Y_prob_chain = np.zeros((X.shape[0], len(self.estimators_)))
    Y_pred_chain = np.zeros((X.shape[0], len(self.estimators_)))
    for (chain_idx, estimator) in enumerate(self.estimators_):
        previous_predictions = Y_pred_chain[:, :chain_idx]
        if sp.issparse(X):
            X_aug = sp.hstack((X, previous_predictions))
        else:
            X_aug = np.hstack((X, previous_predictions))
        Y_prob_chain[:, chain_idx] = estimator.predict_proba(X_aug)[:, 1]
        Y_pred_chain[:, chain_idx] = estimator.predict(X_aug)
    inv_order = np.empty_like(self.order_)
    inv_order[self.order_] = np.arange(len(self.order_))
    Y_prob = Y_prob_chain[:, inv_order]
    return Y_prob
