数据处理技术之降维与特征提取

了解更多

基于pandas,对DataFrame类型数据data的因素列feature_column,目标列target_column提取n_components维特征。

1.1 特征选择

1.1.1 低方差滤波器

例一:
def LowVarianceFilter(data,feature_column,n_components=-1):
    df=data[feature_column]
    #归一化
    df=df.apply(lambda x: (x - np.min(x)) / (np.max(x) - np.min(x))) 
    var=df.var()#/np.mean(df)
    sort_var=sorted(enumerate(var),key=lambda x:x[1],reverse=True)
    cols=[feature_column[it[0]] for it in sort_var][:n_components]
    return cols
例二:
#使用VarianceThreshold类进行方差过滤
from sklearn.feature_selection import VarianceThreshold
def LowVarianceFilter2(data,feature_column,score_column,n_components=-1):
    #要生成这个类的对象,就需要一个参数,就是最小方差的阈值,我们先设置为1,然后调用它的transform方法进行特征值的过滤
    variancethreshold=VarianceThreshold(threshold=300)
    variancethreshold.fit_transform(data[feature_column],data[score_column])
    #使用get_support方法,可以得到选择特征列的序号,然后根据这个序号在原始数据中把对应的列名选择出来即可
    cols=feature_column[variancethreshold.get_support()].tolist()
    return cols

1.1.2 高相关性滤波器

#高相关滤波(High Correlation filter),过滤指标,传入数据喝需要计算的列,如果两个变量之间是高度相关的,这意味着它们具有相似的趋势并且可能携带类似的信息。
def HighCorrelationFilter(data,feature_column,n_components=-1):
    #计算每个指标的方差
    corr = data.loc[:, feature_column].corr()
    corr=corr**2
    cor_dict={
   }
    for it in feature_column:
        cor_dict[it]=0
    for i in index_column:
        for j in index_column:
            cor_dict[i]+=corr[i][j]
    sort_cor= sorted(cor_dict.items(),key=lambda x:x[1],reverse=False)[:n_components]
    cols=[it[0] for it in sort_cor]
    return cols

1.1.3 相关系数法

先计算各个特征对目标值的相关系数,选择更加相关的特征。

#SelectKBest类,通过回归的方法,以及要选择多少个特征值,新建一个 SelectKBest对象,
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression
def SelectBestFeature(data,feature_column,score_column,n_components=-1):
    if n_components==-1:
        n_components=len(feature_column)
    selectKBest = SelectKBest(
        f_regression,k=n_components
    )
    #接着,把自变量选择出来,然后调用fit_transform方法,把自变量和因变量传入,即可选出相关度最高的变量。
    bestFeature =selectKBest.fit_transform(
        data[feature_column],
        data[score_column]
    )
    #我们想要知道选出的自变量的名字,使用get_support方法即可得到相应的列名
    cols=feature_column[selectKBest.get_support()].tolist()
    return cols

1.1.4 模型选择法

例一:

随机森林是一个广泛使用的特征选择算法,该算法可以计算出每个特征变量的重要性,从而我们可以舍弃重要性低的变量达到将为的目的。

from sklearn.ensemble import RandomForestRegressor
from sklearn.feature_selection import SelectFromModel
def GetFeatureByRandomForest(data,feature_column,score_column,n_components=-1):
    model = RandomForestRegressor(random_state=1, max_depth=10)
    model.fit(data[feature_column],data[score_column])
    #plot the feature importance graph
    importances = model.feature_importances_
    indices = np.argsort(importances) 
    plt.title('Feature Importances')
    plt.barh(range(len(indices)), importances[indices], color='b', align='center')
    plt.yticks(range(len(indices)), [feature_column[i] for i in indices])
    plt.xlabel('Relative Importance')
    plt.show()
    # use the SelectFromModel to selects the features 
    feature = SelectFromModel(model)
    fit = feature.fit_transform(data[feature_column],data[score_column])
    column_num = fit.shape[1]
    #np.argsort(x) #按升序排列 np.argsort(-x) #按降序排列 取索引
    indices = np.argsort(
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值