前言
提取了很多特征,但是这些特征那些是有效的呢?那些特征是可以剔除的呢?基于此问题,本博客来讨论一下。
PCA校验
数据集可以自己弄来,可能需要归一化。
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from pandas.core.frame import DataFrame
dataPath = "datalab/36395/"
dataFile = "dataProcessByTwoTask.csv"
data = pd.read_csv(dataPath + dataFile , encoding='utf-8')
print(data.shape)
print(data.head(2))
ab = np.arange(69)
print(ab)
X_train = data.iloc[ab]
pca_sk = PCA(n_components=50)
// 利用训练特征决定50个正交维度的方向,并转化原训练特征
pca_X_train = pca_sk.fit_transform(X_train)
#pca_X_test = pca_sk.transform(X_train)
print("降维后数据集规模:{}".format(pca_X_train.shape))
print(pca_X_train[0:2])
运行 - 结果:
4423, 70)
take_amount_in_later_12_month_highest trans_amount_increase_rate_lately \
0 0 0.90
1 2000 1.28
transd_mcc trans_days_interval_filter trans_days_interval \
0 17.0 27.0 26.0
1 19.0 30.0 14.0
repayment_capability number_of_trans_from_2011 historical_trans_day \
0 19890 30.0 151.0
1 16970 23.0 224.0
rank_trad_1_month trans_amount_3_month ... \
0 0.40 34030 ...
1 0.35 10590 ...
loans_avg_limit consfin_credit_limit consfin_credibility \
0 1688.0 1200.0 75.0
1 1758.0 15100.0 80.0
consfin_org_count_current consfin_product_count consfin_max_limit \
0 1.0 2.0 1200.0
1 5.0 6.0 22800.0
consfin_avg_limit latest_query_day loans_latest_day \
0 1200.0 12.0 18.0
1 9360.0 4.0 2.0
first_transaction_time_day
0 17
1 2
[2 rows x 70 columns]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68]
降维后数据集规模:(69, 50)
[[ -1.07522268e+05 -6.30441595e+03 2.82432053e+03 -1.93347881e+04
-1.65625183e+03 -8.86291024e+03 4.69082780e+02 -5.41692974e+02
9.59855188e+02 -1.17498610e+03 -8.27317923e+02 7.44677439e+02
-2.95320251e+02 1.00262713e+03 2.88593126e+02 -1.67027282e+02
1.00704755e+01 -5.51748767e+00 -2.64264010e+01 1.03976939e+01
2.41833376e+00 -8.67013872e+00 -1.39779453e+01 1.55178837e+00
-6.08964397e+00 -4.07650452e+00 -1.59907843e+01 4.33065850e+00
7.00473045e+00 -1.01812729e+01 -1.90941839e+00 -3.02104040e+00
-6.30292531e+00 7.82081815e+00 -4.50838859e-01 -2.44343401e-01
-2.33156766e+00 -1.55272399e+00 6.03854544e-01 -4.44479902e-01
-3.94035823e+00 -1.42114318e+00 -1.58559025e+00 3.19432485e+00
3.16414591e+00 -1.11029179e+00 1.89054341e-01 3.52892846e+00
-2.48207266e-01 -3.74139917e-02]
[ -1.07287429e+05 -1.15331483e+04 -1.47156042e+04 9.74568582e+03
-8.83707652e+03 -1.80063437e+03 -2.02682915e+03 2.20253946e+03
2.18952762e+03 5.81271155e+02 7.46027569e+02 9.23489176e+02
1.74562840e+02 -9.05207703e+01 7.89127100e+00 3.50719339e+01
8.87024342e+01 1.07562984e+02 -3.73552973e+01 -4.56951209e+00
1.41880195e+01 1.64441214e+01 -8.28721202e-01 -3.01259284e+00
-4.83479942e+00 2.43014026e+00 -1.37180875e+01 -6.89473596e+00
5.67154532e+00 1.29839303e+00 -6.05073773e+00 -1.66655939e+00
1.22784208e+01 -2.05540945e+00 1.63740245e+00 -1.60083170e-01
3.87686452e+00 3.48324574e+00 1.33216991e+00 5.51007857e-01
-8.96974992e-01 -5.30343056e+00 4.21107917e+00 -1.04052498e+00
-1.93495138e+00 -2.78269936e+00 -1.00751398e+00 1.55444165e+00
2.30216194e-01 -6.47515436e-01]]
PCA优势与劣势
PCA 主成分分分析,跟特征选取是有区别的,它是竟可能的保留原特征的方差,采取生成新特征的方法,所以用PCA是看不到降维后的具体特征名字,用于减少数据集的维度,同时保持数据集中使方差贡献最大的特征。改变了原来特征的形式。
-
PCA算法的主要优点有:
1)仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
2)各主成分之间正交,可消除原始数据成分间的相互影响的因素。
3)计算方法简单,主要运算是特征值分解,易于实现。 -
PCA算法的主要缺点有:
1)主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
2)方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
特征筛选
采用了wrapper(封装式)特征筛选法,以lgb模型作为筛选模型,通过递归特征消除的方式最终筛选得到了最优的特征子集,这样可以有效减小特征维度并增强模型泛化能力。具体来说就是原始特征数为N,每次删除K个特征并检验当前N-K个特征下的模型得分,如果当前得分有所提高,则取当前N-K个特征为最优特征子集,继续下一次循环,再删除k个特征,以此类推,可以求得最优特征子集。