• 【机器学习课程】第三章特征工程 1.特征构造1.2 多变量特征构造(特征衍生)


    1.2 多变量特征构造(特征衍生)

    1.2.1双变量四则运算方法构造特征

    1.在业务场景中,有关联的数据列通过简单的运算,将计算结果存储为新的特征列。

    2.发现有用的、高贡献的特征,对核心特征重点进行衍生尝试。

    import pandas as pd
    
    data=[[1,1],[2,77],[3,60]]
    data = pd.DataFrame(data)
    data.columns=['x1','x2']
    
    data['x1+x2'] = data['x1']+data['x2']
    data['x1-x2'] = data['x1']-data['x2']
    data['x2-x1'] = data['x2']-data['x1']
    data['x1*x2'] = data['x1']*data['x2']
    data['x1/x2'] = data['x1']/data['x2']
    data['x2/x1'] = data['x2']/data['x1']
    print(data)
    
    '''Out:
       x1  x2  x1+x2  x1-x2  x2-x1  x1*x2     x1/x2  x2/x1
    0   1   1      2      0      0      1  1.000000    1.0
    1   2  77     79    -75     75    154  0.025974   38.5
    2   3  60     63    -57     57    180  0.050000   20.0
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1.2.2双变量高阶多项式

    将两个变量的值进行幂运算(取0次幂、1次幂、2次幂、3次幂,),并完成组合得到新的特征。

    通过调用PolynomialFeatures评估器函数生成多项式计算结果
    PolynomialFeatures(degree,interaction_only=False,includeb_bias=True)

    *degree: 阶数(幂次)

    *interaction_only:默认为False ,仅考虑两项交叉的到的新特征

    *includeb_bias: 默认为True,考率计算特征的0次方

    from sklearn.preprocessing import PolynomialFeatures
    
    data=[[1,2],[3,4],[5,6]]
    data = pd.DataFrame(data)
    colname=['x1','x2']
    data.columns=colname
    degree =2 #最大阶数
    col_name_list=[] #新生成特征名称
    
    #两层循环生成新变量名称
    for d in range(2,degree+1): 
        for i in range(d+1):
            col_name_str=colname[0]+'^'+str(d-i) +'*'+colname[1]+'^'+str(i)
            
            col_name_list.append(col_name_str)
    print(col_name_list)
    '''Out:
    ['x1^2*x2^0', 'x1^1*x2^1', 'x1^0*x2^2']
    '''
    
    # 生成高阶多项式计算结果
    res=  PolynomialFeatures(degree=degree,include_bias=False,interaction_only=True).fit_transform(data)
    df = pd.DataFrame(res)
    df.columns=col_name_list
    
    # 原始数据和生成特征合并
    data = pd.concat([data,df],axis=1)  # 横向合并
    print(data)
    '''Out:
       x1  x2  x1^2*x2^0  x1^1*x2^1  x1^0*x2^2
    0   1   2        1.0        2.0        2.0
    1   3   4        3.0        4.0       12.0
    2   5   6        5.0        6.0       30.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

    1.2.3双变量交叉组合生成新特征

    将不同离散变量的不同取值两两组合,创建出新特征。

    这里需要注意如果某特征的取值内容过多,会导致生成的特征过于稀疏。

    下列例子,使用诊断时病人的状态特征为例,每个特征的取值内容仅有两个,三个特征,两两成组生成3个新特征。
    在这里插入图片描述

    # 创建空列表用于存储衍生后的特征名称和特征
    colNames_new_l = []
    features_new_l = []
    
    data=[['yes','no','yes'],['no','yes','yes'],['yes','yes','yes']]
    data = pd.DataFrame(data)
    col_names=['咳嗽','发烧','流涕']
    data.columns=col_names
    print(data)
    
    # enumerate过程
    for col_index, col_name in enumerate(col_names):
        print(col_index, col_name)
        
    # 衍生特征列名称
    for col_index, col_name in enumerate(col_names):
        for col_sub_index in range(col_index+1, len(col_names)):
            newNames = col_name + '&' + col_names[col_sub_index]
            print(newNames)
            
    # 创建衍生特征列名称及特征本身
    for col_index, col_name in enumerate(col_names):
        for col_sub_index in range(col_index+1, len(col_names)):
            
            newNames = col_name + '&' + col_names[col_sub_index]
            colNames_new_l.append(newNames)
            
            newDF = pd.Series(data[col_name].astype('str') 
                              + '&'
                              + data[col_names[col_sub_index]].astype('str'), 
                              name=col_name)
            features_new_l.append(newDF)
    
    features_new = pd.concat(features_new_l, axis=1)
    features_new.columns = colNames_new_l
    features_new
    
    • 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
  • 相关阅读:
    RHCE 9.0培训课程之容器技术的运行
    单个独立按键依次输入控制数据
    Codeforces Round #815 (Div. 2)(A~D1)
    1panel 搭建多个网站
    y45.第三章 Kubernetes从入门到精通 -- k8s中运行web服务(十八)
    Double 4 VR智能互动系统在轨道交通实训教学中的应用
    MySQL基础学习总结(二)
    ModelSim_10.5se软件安装
    设计模式:命令模式
    C++标准模板(STL)- 类型支持 (类型特性,is_void,is_null_pointer,is_integral)
  • 原文地址:https://blog.csdn.net/zzh1464501547/article/details/126735099