gplearn 为分类问题生成新特征

gplearn

主要思想是利用遗传算法的理念对特征进行有监督的符号编码,期望利用加入的随机性来发现一些对于机器学习算法难以发现的非线性关系。

下面示例代码说明了如何利用auc指标来衡量GP迭代过程的中的选择指标。

from sklearn.metrics import roc_auc_score,roc_curve,auc
from gplearn.fitness import make_fitness
def auc_score_lg(y_true, y_pred, sample_weight=None):
    fpr, tpr, thresholds   = roc_curve(y_true, y_pred, sample_weight)
    return auc(fpr,tpr)
auc_scores = make_fitness(function=auc_score_lg, greater_is_better=True)


function_set = ['add', 'sub', 'mul', 'div', 'sqrt', 'log', 'abs', 'neg', 'inv', 'max', 'min', 'sin', 'cos', 'tan']
gp = SymbolicTransformer(generations=20, population_size=20000,
                         hall_of_fame=200, n_components=200,
#                          metric='spearman',
                         metric=auc_scores,
                         function_set=function_set,
                         parsimony_coefficient='auto',
                         max_samples=0.9, verbose=1,
                         random_state=0, n_jobs=8)
gp.fit(train_train_X, train_train_Y)