【特征选择】使用遗传算法进行特征选择

遗传算法寻优

cross_val_score(lgb,train_X,train_y,scoring='f1',cv=sKfold).mean()  # 使用全部特征进行训练
0.8508040614085857
train_1 = train.drop('label',1)
cols = train_1.columns
train_1.head()
经营期限起是否广告经营是否城镇从业人数注册资本(金)实缴资本注册 - 实缴行政区划代码_count_encode行业类别代码_count_encode行业细类代码_count_encode企业类型_count_encode企业类型小类_count_encode状态_count_encode机构标识_count_encode职位标识_count_encode组织形式_count_encode经营方式_count_encode风险行业_count_encode经营场所_count_encode企业(机构)类型_count_encode行政区划代码_catboost_encode行业类别代码_catboost_encode行业细类代码_catboost_encode企业类型_catboost_encode企业类型小类_catboost_encode状态_catboost_encode机构标识_catboost_encode职位标识_catboost_encode组织形式_catboost_encode经营方式_catboost_encode风险行业_catboost_encode经营场所_catboost_encode企业(机构)类型_catboost_encode行政区划代码_targe_encode行业类别代码_targe_encode行业细类代码_targe_encode企业类型_targe_encode企业类型小类_targe_encode状态_targe_encode机构标识_targe_encode职位标识_targe_encode组织形式_targe_encode经营方式_targe_encode风险行业_targe_encode经营场所_targe_encode企业(机构)类型_targe_encode行政区划代码_woe_encode行业类别代码_woe_encode行业细类代码_woe_encode企业类型_woe_encode企业类型小类_woe_encode状态_woe_encode机构标识_woe_encode职位标识_woe_encode组织形式_woe_encode经营方式_woe_encode风险行业_woe_encode经营场所_woe_encode企业(机构)类型_woe_encode行政区划代码_ord_encode行业类别代码_ord_encode行业细类代码_ord_encode企业类型_ord_encode企业类型小类_ord_encode状态_ord_encode机构标识_ord_encode职位标识_ord_encode组织形式_ord_encode经营方式_ord_encode风险行业_ord_encode经营场所_ord_encode企业(机构)类型_ord_encode状态_2015资金数额_2015从业人数_2015从业人数是否公示_2015经营状态名称_2015是否有网站标志_2015是否有对外投资企业标志_2015有限责任公司本年度是否发生股东股权转让标志_2015公示状态_2015其中下岗失业人数雇员_2015其中退役士兵人数雇员_2015其中残疾人人数经营者_2015其中下岗失业人数经营者_2015其中退役士兵人数经营者_2015其中高校毕业生人数经营者_2015其中残疾人人数雇员_2015从业人数是否公示_2016经营状态名称_2016是否有网站标志_2016是否有对外投资企业标志_2016有限责任公司本年度是否发生股东股权转让标志_2016公示状态_2016其中下岗失业人数雇员_2016其中退役士兵人数雇员_2016其中残疾人人数经营者_2016其中下岗失业人数经营者_2016其中退役士兵人数经营者_2016其中高校毕业生人数经营者_2016其中残疾人人数雇员_2016其中高校毕业生人数雇员_2016状态_2017资金数额_2017从业人数_2017从业人数是否公示_2017经营状态名称_2017是否有网站标志_2017是否有对外投资企业标志_2017有限责任公司本年度是否发生股东股权转让标志_2017公示状态_2017其中下岗失业人数雇员_2017其中退役士兵人数雇员_2017其中残疾人人数经营者_2017其中下岗失业人数经营者_2017其中退役士兵人数经营者_2017其中高校毕业生人数经营者_2017其中残疾人人数雇员_2017其中高校毕业生人数雇员_2017状态_2018资金数额_2018从业人数_2018从业人数是否公示_2018经营状态名称_2018是否有网站标志_2018是否有对外投资企业标志_2018有限责任公司本年度是否发生股东股权转让标志_2018公示状态_2018其中下岗失业人数雇员_2018其中退役士兵人数雇员_2018其中残疾人人数经营者_2018其中下岗失业人数经营者_2018其中退役士兵人数经营者_2018其中高校毕业生人数经营者_2018其中残疾人人数雇员_2018其中高校毕业生人数雇员_2018状态_mode从业人数是否公示_mode经营状态名称_mode是否有网站标志_mode是否有对外投资企业标志_mode有限责任公司本年度是否发生股东股权转让标志_mode公示状态_mode状态_ischange从业人数是否公示_ischange经营状态名称_ischange是否有网站标志_ischange是否有对外投资企业标志_ischange有限责任公司本年度是否发生股东股权转让标志_ischange公示状态_ischange其中残疾人人数雇员_max其中残疾人人数雇员_mean其中残疾人人数雇员_min其中残疾人人数经营者_max其中残疾人人数经营者_mean其中残疾人人数经营者_min其中退役士兵人数雇员_max其中退役士兵人数雇员_mean其中退役士兵人数雇员_min其中下岗失业人数雇员_max其中下岗失业人数雇员_mean其中下岗失业人数雇员_min其中高校毕业生人数经营者_max其中高校毕业生人数经营者_mean其中高校毕业生人数经营者_min其中下岗失业人数经营者_max其中下岗失业人数经营者_mean其中下岗失业人数经营者_min从业人数_max从业人数_mean从业人数_min其中退役士兵人数经营者_max其中退役士兵人数经营者_mean其中退役士兵人数经营者_min资金数额_max资金数额_mean资金数额_min其中高校毕业生人数雇员_max其中高校毕业生人数雇员_mean其中高校毕业生人数雇员_min其中残疾人人数雇员_range其中残疾人人数经营者_range其中退役士兵人数雇员_range其中下岗失业人数雇员_range其中高校毕业生人数经营者_range其中下岗失业人数经营者_range从业人数_range其中退役士兵人数经营者_range资金数额_range其中高校毕业生人数雇员_rangeid_count变更信息代码_110.0变更信息代码_111.0变更信息代码_112.0变更信息代码_113.0变更信息代码_115.0变更信息代码_117.0变更信息代码_118.0变更信息代码_120.0变更信息代码_121.0变更信息代码_128.0变更信息代码_129.0变更信息代码_131.0变更信息代码_133.0变更信息代码_137.0变更信息代码_138.0变更信息代码_150.0变更信息代码_190.0变更信息代码_921.0变更信息代码_922.0变更信息代码_925.0变更信息代码_930.0变更信息代码_939.0变更总次数date_range变更频率个人所得税企业所得税其他收入印花税土地增值税地方教育附加城市维护建设税城镇土地使用税契税房产税教育费附加残疾人就业保障金水利建设专项收入税务部门罚没收入营业税税收总额tax_date_range每天交税金额是否有税收计记录中立消极积极曝光率积极-消极最近一次评价中立评分比例消极评分比例积极评分比例
企业唯一标识
47645761dc56bb8c5fae00114b768b5d9b6e917c3aec07c4479005.050.0052.018037017234140855679215839291631423415865164281879247950.0181430.0016330.0003070.0398250.0281750.0728610.0334430.0004370.0810490.0982500.0953100.0816440.0084100.0181000.0016200.0000000.0398230.0281650.0728623.338898e-020.000000e+000.0810510.0982540.0953130.0816450.008394-1.297707-3.657842-2.722611-0.531992-0.8843550.105468-0.670478-2.3692530.2210200.4321570.3985180.228804-2.0902161.01.01.01.01.0111.011.011.01.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0-1.0-1.0000000.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.01.00.00.0
59b38c56de3836838082cfcb1a298951abfe15e6940c49ba47002.0100.00102.054812968431408556792158336172601423415865164281879247950.1222770.0028300.0016100.0398250.0281750.0728610.2202120.0002530.0810490.0982500.0953100.0816440.0084100.1222920.0027950.0000000.0398230.0281650.0728622.202797e-010.000000e+000.0810510.0982540.0953130.0816450.0083940.679055-3.047387-1.065545-0.531992-0.8843550.1054681.385412-2.9164930.2210200.4321570.3985180.228804-2.0902162.02.02.01.01.0122.011.011.01.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0-1.0-1.0000000.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.01.00.00.0
e9f7b28ec10e047000d16ab79e1b5e6da434a1697cce78181859012.010.0012.0209214287222180757215831361871423457516428187927570.0465080.6094210.7181180.5239640.0036890.0728610.0709610.0578490.0810490.0040070.0953100.0816440.0036890.0464920.6101470.7197940.5244020.0034720.0728627.096774e-025.769231e-020.0810510.0037740.0953130.0816450.003472-0.3557093.0947243.5859022.745526-2.3217860.1054680.0927400.1222990.221020-2.2385550.3985180.228804-2.3217863.03.03.02.02.0133.012.011.02.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.00.01.00.00.00.00.00.00.00.01.00.00.00.00.00.00.00.00.00.01.00.00.03.00.03.0000000.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.01.00.00.0
f000950527a6feb63ee1ce82bb22ddd1ab8b8fdffa3b91fb106600-1.0100.00102.05481296833614085746731092261531423415865164281879274670.1222770.0028300.0002690.0398250.0306850.0195270.1397950.0213200.0810490.0982500.0953100.0816440.0306850.1222920.0027950.0000000.0398230.0306780.0195021.398545e-012.040816e-020.0810510.0982540.0953130.0816450.0306780.679055-3.047387-2.853231-0.531992-0.798098-1.2426890.836353-0.5506460.2210200.4321570.3985180.228804-0.7980982.02.04.01.03.0244.011.011.03.0-1.0-1.02.02.0-1.0-1.04.03.0-1.0-1.04.03.0-1.0-1.02.02.0-1.0-1.02.02.0-1.0-1.02.02.0-1.0-1.02.02.0-1.0-1.03.03.0-1.0-1.00.00.0-1.0-1.00.00.0-1.0-1.00.00.0-1.0-1.00.00.0-1.0-1.03.01.0-1.0-1.00.00.0-1.0-1.00.00.0-1.0-1.01.02.02.02.00.02.02.02.03.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.04.03.53.03.02.01.04.03.53.02.01.51.00.00.00.00.00.00.01.02.01.01.02.00.00.01.00.00.00.00.01.00.00.00.00.00.00.00.00.00.00.00.00.00.01.03.0220.00.0135750.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.01.00.00.0
9c7fa510616a6830b878f3c8c4317d93e1b022e7f22ae23190015.020.0022.0133810312246819382142158341271061081868115181930.0358400.0014660.0003250.0000140.0000140.0728610.0022000.0023570.0370430.0000140.0013280.0659940.0000140.0358020.0014550.0000000.0000000.0000000.0728624.563131e-143.371647e-130.0370370.0000000.0013140.0659940.000000-0.612630-3.765978-2.665179-5.790555-5.7940110.105468-0.753170-0.684177-0.604969-5.790339-3.8315790.000000-5.7905554.04.05.03.04.0155.023.022.04.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.0-1.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0-1.0-1.0000000.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.01.00.00.0
# 遗传算法特征选择
sKfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=2020)
def fun_(x):
    '''传入长度为特征数量的0,1向量,转化为bool之后作为特征的索引,提取特征子集,使用特征子集进行选了返回目标函数值'''
    X =  train_1[cols[x.astype('bool')]].values
    val = cross_val_score(lgb,X,train_y,scoring='f1',cv=sKfold).mean()
    return val

def GV_col(func,len_,num_,it_num = 50,jiaopei = 0.8,bianyi = 0.2):
    '''
    func:目标函数 输入为0,1向量,输出为目标函数值
    len_:特征维度
    it_num:种群的数量
    jiaopei:种群进行杂交的概率
    bianyi:种群进行变异的概率
    返回值:传入长度为特征数量的0,1向量 
            历史种群达到的最优值    
    '''
    pop = np.random.randint(0,2,(num_,len_))
    best_f = 0
    list_best_f = []
    for _ in range(it_num):
        scores = [func(i) for i in pop]
        best_fit_ = scores[np.argmax(scores)]
        if best_fit_ > best_f:
            best_f = best_fit_
            best_p = pop[np.argmax(scores)]
        list_best_f.append(best_f)
        fitness  = scores  - min(scores) + 0.01
        idx = np.random.choice(np.arange(num_), size=num_, replace=True,
                                   p=(fitness)/(fitness.sum()) )
        pop = np.array(pop)[idx]
        new_pop = []
        for father in pop:
            child = father
            if np.random.rand() < jiaopei:
                mother_id = np.random.randint(num_)
                low_point = np.random.randint(len_)
                high_point = np.random.randint(low_point+1,len_+1)
                child[low_point:high_point] = pop[mother_id][low_point:high_point]
                if np.random.rand() < bianyi:
                    mutate_point = np.random.randint(0, len_)
                    child[mutate_point] = 1 - child[mutate_point]
            new_pop.append(child)
        pop = new_pop
        print(f'{_}/{it_num},当前分数:{best_f}')
    return best_p,list_best_f
w = GV_col(fun_,244,10,30,0.9,0.3)  #设置种群数量为10,迭代30次最后最优值为0.8518982053263855
0/30,当前分数:0.8422718298032565
1/30,当前分数:0.8422718298032565
2/30,当前分数:0.8487626570528729
3/30,当前分数:0.8487626570528729
4/30,当前分数:0.850974123058376
5/30,当前分数:0.850974123058376
6/30,当前分数:0.850974123058376
7/30,当前分数:0.850974123058376
8/30,当前分数:0.850974123058376
9/30,当前分数:0.850974123058376
10/30,当前分数:0.850974123058376
11/30,当前分数:0.850974123058376
12/30,当前分数:0.850974123058376
13/30,当前分数:0.850974123058376
14/30,当前分数:0.850974123058376
15/30,当前分数:0.850974123058376
16/30,当前分数:0.850974123058376
17/30,当前分数:0.850974123058376
18/30,当前分数:0.850974123058376
19/30,当前分数:0.850974123058376
20/30,当前分数:0.850974123058376
21/30,当前分数:0.850974123058376
22/30,当前分数:0.850974123058376
23/30,当前分数:0.850974123058376
24/30,当前分数:0.850974123058376
25/30,当前分数:0.850974123058376
26/30,当前分数:0.8518982053263855
27/30,当前分数:0.8518982053263855
28/30,当前分数:0.8518982053263855
29/30,当前分数:0.8518982053263855
plt.plot(w[1])
[<matplotlib.lines.Line2D at 0x29a465389b0>]

在这里插入图片描述

lgb.fit(train_X,train_y)
LGBMClassifier(max_depth=4, min_child_samples=10, n_estimators=150,
               num_leaves=14, reg_alpha=0.28296338218326345,
               reg_lambda=0.18095776927233131, subsample=0.8272103969163492)
# 删除特征重要度为0的特征,
cols_2 = train.drop('label',1).columns[lgb.feature_importances_.astype('bool')]
train_X_2 = train[cols_2].values
cross_val_score(lgb,train_X_2,train_y,scoring='f1',cv=sKfold).mean()
0.8496644165439153
cols_3 = cols[w[0].astype('bool')]
train_X_3 = train[cols_3].values
cross_val_score(lgb,train_X_3,train_y,scoring='f1',cv=sKfold).mean()
0.8518982053263855
  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值