ML之FE:基于单个csv文件数据集(自动切分为两个dataframe表)利用featuretools工具实现自动特征生成/特征衍生

设计思路


1、定义数据集


contents={"name": ['Bob',        'LiSa',                     'Mary',                       'Alan'],

         "ID":   [1,              2,                            3,                            4],    # 输出 NaN

         "age":  [np.nan,        28,                           38 ,                          '' ],   # 输出

       "born": [pd.NaT,     pd.Timestamp("1990-01-01"),  pd.Timestamp("1980-01-01"),        ''],     # 输出 NaT

         "sex":  ['男',          '女',                        '女',                        '男',],   # 输出 None

         "hobbey":['打篮球',     '打羽毛球',                   '打乒乓球',                    '',],   # 输出

         "money":[200.0,                240.0,                   290.0,                     300.0],  # 输出

         "weight":[140.5,                120.8,                 169.4,                      155.6],  # 输出

         }


2、DFS设计


(1)、指定一个包含数据集中所有实体的字典

(2)、指定实体间如何关联:当两个实体有一对多关系时,我们称之为“one”实体,即“parent entity”。

(3)、运行深度特征合成:DFS的最小输入是一组实体、一组关系和计算特性的“target_entity”。DFS的输出是一个特征矩阵和相应的特征定义列表。

让我们首先为数据中的每个客户创建一个特性矩阵,那么现在有几十个新特性来描述客户的行为。

(4)、改变目标的实体:DFS如此强大的原因之一是它可以为我们的数据中的任何实体创建一个特征矩阵。例如,如果我们想为会话构建特性

(5)、理解特征输出:一般来说,Featuretools通过特性名称引用生成的特性。

为了让特性更容易理解,Featuretools提供了两个额外的工具,Featuretools .graph_feature()和Featuretools .describe_feature(),

来帮助解释什么是特性以及Featuretools生成特性的步骤。

(6)、特征谱系图

特征谱系图可视地遍历功能生成过程。从基本数据开始,它们一步一步地展示应用的原语和生成的中间特征,以创建最终特征。

(7)、特征描述:功能工具还可以自动生成功能的英文句子描述。特性描述有助于解释什么是特性,并且可以通过包含手动定义的自定义来进一步改进。

有关如何自定义自动生成的特性描述的详细信息,请参见生成特性描述。



输出结果


  name  ID  age       born sex hobbey  money  weight

0   Bob   1  NaN        NaT   男    打篮球  200.0   140.5

1  LiSa   2   28 1990-01-01   女   打羽毛球  240.0   120.8

2  Mary   3   38 1980-01-01   女   打乒乓球  290.0   169.4

3  Alan   4             NaT   男         300.0   155.6

-------------------------------------------

nums_df:----------------------------------

  name  ID   age  money  weight

0   Bob   1   NaN  200.0   140.5

1  LiSa   2  28.0  240.0   120.8

2  Mary   3  38.0  290.0   169.4

3  Alan   4   NaN  300.0   155.6

cats_df:----------------------------------

  ID hobbey sex        born

0   4    NaN   男         NaN

1   1    打篮球   男         NaN

2   2   打羽毛球   女  1990-01-01

---------------------------------DFS设计:-----------------------------------

feature_matrix_nums

      ID   age  money  weight cats.hobbey cats.sex  cats.COUNT(nums)  \

name                                                                  

Bob    1   NaN  200.0   140.5         打篮球        男               1.0  

LiSa   2  28.0  240.0   120.8        打羽毛球        女               1.0  

Mary   3  38.0  290.0   169.4         NaN      NaN               NaN  

     cats.MAX(nums.age)  cats.MAX(nums.money)  cats.MAX(nums.weight)  \

name                                                                    

Bob                  NaN                 200.0                  140.5  

LiSa                28.0                 240.0                  120.8  

Mary                 NaN                   NaN                    NaN  

     cats.MEAN(nums.age)  cats.MEAN(nums.money)  cats.MEAN(nums.weight)  \

name                                                                      

Bob                   NaN                  200.0                   140.5  

LiSa                 28.0                  240.0                   120.8  

Mary                  NaN                    NaN                     NaN  

     cats.MIN(nums.age)  cats.MIN(nums.money)  cats.MIN(nums.weight)  \

name                                                                    

Bob                  NaN                 200.0                  140.5  

LiSa                28.0                 240.0                  120.8  

Mary                 NaN                   NaN                    NaN  

     cats.SKEW(nums.age)  cats.SKEW(nums.money)  cats.SKEW(nums.weight)  \

name                                                                      

Bob                   NaN                    NaN                     NaN  

LiSa                  NaN                    NaN                     NaN  

Mary                  NaN                    NaN                     NaN  

     cats.STD(nums.age)  cats.STD(nums.money)  cats.STD(nums.weight)  \

name                                                                    

Bob                  NaN                   NaN                    NaN  

LiSa                 NaN                   NaN                    NaN  

Mary                 NaN                   NaN                    NaN  

     cats.SUM(nums.age)  cats.SUM(nums.money)  cats.SUM(nums.weight)  \

name                                                                    

Bob                  0.0                 200.0                  140.5  

LiSa                28.0                 240.0                  120.8  

Mary                 NaN                   NaN                    NaN  

     cats.DAY(born)  cats.MONTH(born)  cats.WEEKDAY(born)  cats.YEAR(born)  

name                                                                        

Bob              NaN               NaN                 NaN              NaN  

LiSa             1.0               1.0                 0.0           1990.0  

Mary             NaN               NaN                 NaN              NaN  

features_defs_nums: 29 [<Feature: ID>, <Feature: age>, <Feature: money>, <Feature: weight>, <Feature: cats.hobbey>, <Feature: cats.sex>, <Feature: cats.COUNT(nums)>, <Feature: cats.MAX(nums.age)>, <Feature: cats.MAX(nums.money)>, <Feature: cats.MAX(nums.weight)>, <Feature: cats.MEAN(nums.age)>, <Feature: cats.MEAN(nums.money)>, <Feature: cats.MEAN(nums.weight)>, <Feature: cats.MIN(nums.age)>, <Feature: cats.MIN(nums.money)>, <Feature: cats.MIN(nums.weight)>, <Feature: cats.SKEW(nums.age)>, <Feature: cats.SKEW(nums.money)>, <Feature: cats.SKEW(nums.weight)>, <Feature: cats.STD(nums.age)>, <Feature: cats.STD(nums.money)>, <Feature: cats.STD(nums.weight)>, <Feature: cats.SUM(nums.age)>, <Feature: cats.SUM(nums.money)>, <Feature: cats.SUM(nums.weight)>, <Feature: cats.DAY(born)>, <Feature: cats.MONTH(born)>, <Feature: cats.WEEKDAY(born)>, <Feature: cats.YEAR(born)>]

feature_matrix_cats_df

   hobbey sex  COUNT(nums)  MAX(nums.age)  MAX(nums.money)  MAX(nums.weight)  \

ID                                                                            

4     NaN   男            1            NaN            300.0             155.6  

1     打篮球   男            1            NaN            200.0             140.5  

2    打羽毛球   女            1           28.0            240.0             120.8  

   MEAN(nums.age)  MEAN(nums.money)  MEAN(nums.weight)  MIN(nums.age)  \

ID                                                                      

4              NaN             300.0              155.6            NaN  

1              NaN             200.0              140.5            NaN  

2             28.0             240.0              120.8           28.0  

   MIN(nums.money)  MIN(nums.weight)  SKEW(nums.age)  SKEW(nums.money)  \

ID                                                                        

4             300.0             155.6             NaN               NaN  

1             200.0             140.5             NaN               NaN  

2             240.0             120.8             NaN               NaN  

   SKEW(nums.weight)  STD(nums.age)  STD(nums.money)  STD(nums.weight)  \

ID                                                                        

4                 NaN            NaN              NaN               NaN  

1                 NaN            NaN              NaN               NaN  

2                 NaN            NaN              NaN               NaN  

   SUM(nums.age)  SUM(nums.money)  SUM(nums.weight)  DAY(born)  MONTH(born)  \

ID                                                                            

4             0.0            300.0             155.6        NaN          NaN  

1             0.0            200.0             140.5        NaN          NaN  

2            28.0            240.0             120.8        1.0          1.0  

   WEEKDAY(born)  YEAR(born)  

ID                            

4             NaN         NaN  

1             NaN         NaN  

2             0.0      1990.0  

features_defs_cats_df: 25 [<Feature: hobbey>, <Feature: sex>, <Feature: COUNT(nums)>, <Feature: MAX(nums.age)>, <Feature: MAX(nums.money)>, <Feature: MAX(nums.weight)>, <Feature: MEAN(nums.age)>, <Feature: MEAN(nums.money)>, <Feature: MEAN(nums.weight)>, <Feature: MIN(nums.age)>, <Feature: MIN(nums.money)>, <Feature: MIN(nums.weight)>, <Feature: SKEW(nums.age)>, <Feature: SKEW(nums.money)>, <Feature: SKEW(nums.weight)>, <Feature: STD(nums.age)>, <Feature: STD(nums.money)>, <Feature: STD(nums.weight)>, <Feature: SUM(nums.age)>, <Feature: SUM(nums.money)>, <Feature: SUM(nums.weight)>, <Feature: DAY(born)>, <Feature: MONTH(born)>, <Feature: WEEKDAY(born)>, <Feature: YEAR(born)>]

<Feature: SUM(nums.age)>

The sum of the "age" of all instances of "nums" for each "ID" in "cats".



feature_matrix_cats_df.csv


features_defs_cats_df: 25

[<Feature: hobbey>, <Feature: sex>, <Feature: COUNT(nums)>, <Feature: MAX(nums.age)>, <Feature: MAX(nums.money)>, <Feature: MAX(nums.weight)>, <Feature: MEAN(nums.age)>, <Feature: MEAN(nums.money)>, <Feature: MEAN(nums.weight)>, <Feature: MIN(nums.age)>, <Feature: MIN(nums.money)>, <Feature: MIN(nums.weight)>, <Feature: SKEW(nums.age)>, <Feature: SKEW(nums.money)>, <Feature: SKEW(nums.weight)>, <Feature: STD(nums.age)>, <Feature: STD(nums.money)>, <Feature: STD(nums.weight)>, <Feature: SUM(nums.age)>, <Feature: SUM(nums.money)>, <Feature: SUM(nums.weight)>, <Feature: DAY(born)>, <Feature: MONTH(born)>, <Feature: WEEKDAY(born)>, <Feature: YEAR(born)>]


ID hobbey sex COUNT(nums) MAX(nums.age) MAX(nums.money) MAX(nums.weight) MEAN(nums.age) MEAN(nums.money) MEAN(nums.weight) MIN(nums.age) MIN(nums.money) MIN(nums.weight) SKEW(nums.age) SKEW(nums.money) SKEW(nums.weight) STD(nums.age) STD(nums.money) STD(nums.weight) SUM(nums.age) SUM(nums.money) SUM(nums.weight) DAY(born) MONTH(born) WEEKDAY(born) YEAR(born)

4   男 1   300 155.6   300 155.6   300 155.6             0 300 155.6        

1 打篮球 男 1   200 140.5   200 140.5   200 140.5             0 200 140.5        

2 打羽毛球 女 1 28 240 120.8 28 240 120.8 28 240 120.8             28 240 120.8 1 1 0 1990


ID hobbey sex COUNT(nums)            

4   男 1            

1 打篮球 男 1            

2 打羽毛球 女 1            

 MAX(nums.age) MAX(nums.money) MAX(nums.weight) MEAN(nums.age) MEAN(nums.money) MEAN(nums.weight) MIN(nums.age) MIN(nums.money) MIN(nums.weight)

   300 155.6   300 155.6   300 155.6

   200 140.5   200 140.5   200 140.5

 28 240 120.8 28 240 120.8 28 240 120.8

 SKEW(nums.age) SKEW(nums.money) SKEW(nums.weight) STD(nums.age) STD(nums.money) STD(nums.weight) SUM(nums.age) SUM(nums.money) SUM(nums.weight)

             0 300 155.6

             0 200 140.5

             28 240 120.8

 DAY(born) MONTH(born) WEEKDAY(born) YEAR(born)          

                 

                 

 1 1 0 1990          

字段解释:


<Feature: hobbey> : The "hobbey".

<Feature: sex> : The "sex".

<Feature: COUNT(nums)> : The number of all instances of "nums" for each "ID" in "cats".

<Feature: MAX(nums.age)> : The maximum of the "age" of all instances of "nums" for each "ID" in "cats".

<Feature: MAX(nums.money)> : The maximum of the "money" of all instances of "nums" for each "ID" in "cats".

<Feature: MAX(nums.weight)> : The maximum of the "weight" of all instances of "nums" for each "ID" in "cats".

<Feature: MEAN(nums.age)> : The average of the "age" of all instances of "nums" for each "ID" in "cats".

<Feature: MEAN(nums.money)> : The average of the "money" of all instances of "nums" for each "ID" in "cats".

<Feature: MEAN(nums.weight)> : The average of the "weight" of all instances of "nums" for each "ID" in "cats".

<Feature: MIN(nums.age)> : The minimum of the "age" of all instances of "nums" for each "ID" in "cats".

<Feature: MIN(nums.money)> : The minimum of the "money" of all instances of "nums" for each "ID" in "cats".

<Feature: MIN(nums.weight)> : The minimum of the "weight" of all instances of "nums" for each "ID" in "cats".

<Feature: SKEW(nums.age)> : The skewness of the "age" of all instances of "nums" for each "ID" in "cats".

<Feature: SKEW(nums.money)> : The skewness of the "money" of all instances of "nums" for each "ID" in "cats".

<Feature: SKEW(nums.weight)> : The skewness of the "weight" of all instances of "nums" for each "ID" in "cats".

<Feature: STD(nums.age)> : The standard deviation of the "age" of all instances of "nums" for each "ID" in "cats".

<Feature: STD(nums.money)> : The standard deviation of the "money" of all instances of "nums" for each "ID" in "cats".

<Feature: STD(nums.weight)> : The standard deviation of the "weight" of all instances of "nums" for each "ID" in "cats".

<Feature: SUM(nums.age)> : The sum of the "age" of all instances of "nums" for each "ID" in "cats".

<Feature: SUM(nums.money)> : The sum of the "money" of all instances of "nums" for each "ID" in "cats".

<Feature: SUM(nums.weight)> : The sum of the "weight" of all instances of "nums" for each "ID" in "cats".

<Feature: DAY(born)> : The day of the month of the "born".

<Feature: MONTH(born)> : The month of the "born".

<Feature: WEEKDAY(born)> : The day of the week of the "born".

<Feature: YEAR(born)> : The year of the "born".



feature_matrix_nums.csv


features_defs_nums: 29

[<Feature: ID>, <Feature: age>, <Feature: money>, <Feature: weight>, <Feature: cats.hobbey>, <Feature: cats.sex>, <Feature: cats.COUNT(nums)>, <Feature: cats.MAX(nums.age)>, <Feature: cats.MAX(nums.money)>, <Feature: cats.MAX(nums.weight)>, <Feature: cats.MEAN(nums.age)>, <Feature: cats.MEAN(nums.money)>, <Feature: cats.MEAN(nums.weight)>, <Feature: cats.MIN(nums.age)>, <Feature: cats.MIN(nums.money)>, <Feature: cats.MIN(nums.weight)>, <Feature: cats.SKEW(nums.age)>, <Feature: cats.SKEW(nums.money)>, <Feature: cats.SKEW(nums.weight)>, <Feature: cats.STD(nums.age)>, <Feature: cats.STD(nums.money)>, <Feature: cats.STD(nums.weight)>, <Feature: cats.SUM(nums.age)>, <Feature: cats.SUM(nums.money)>, <Feature: cats.SUM(nums.weight)>, <Feature: cats.DAY(born)>, <Feature: cats.MONTH(born)>, <Feature: cats.WEEKDAY(born)>, <Feature: cats.YEAR(born)>]


name ID age money weight cats.hobbey cats.sex cats.COUNT(nums) cats.MAX(nums.age) cats.MAX(nums.money) cats.MAX(nums.weight) cats.MEAN(nums.age) cats.MEAN(nums.money) cats.MEAN(nums.weight) cats.MIN(nums.age) cats.MIN(nums.money) cats.MIN(nums.weight) cats.SKEW(nums.age) cats.SKEW(nums.money) cats.SKEW(nums.weight) cats.STD(nums.age) cats.STD(nums.money) cats.STD(nums.weight) cats.SUM(nums.age) cats.SUM(nums.money) cats.SUM(nums.weight) cats.DAY(born) cats.MONTH(born) cats.WEEKDAY(born) cats.YEAR(born)

Bob 1   200 140.5 打篮球 男 1   200 140.5   200 140.5   200 140.5             0 200 140.5        

LiSa 2 28 240 120.8 打羽毛球 女 1 28 240 120.8 28 240 120.8 28 240 120.8             28 240 120.8 1 1 0 1990

Mary 3 38 290 169.4                                                  

Alan 4   300 155.6   男 1   300 155.6   300 155.6   300 155.6             0 300 155.6        


name ID age money weight          

Bob 1   200 140.5          

LiSa 2 28 240 120.8          

Mary 3 38 290 169.4          

Alan 4   300 155.6          

 cats.hobbey cats.sex cats.COUNT(nums)            

 打篮球 男 1            

 打羽毛球 女 1            

                 

   男 1            

 cats.MAX(nums.age) cats.MAX(nums.money) cats.MAX(nums.weight) cats.MEAN(nums.age) cats.MEAN(nums.money) cats.MEAN(nums.weight) cats.MIN(nums.age) cats.MIN(nums.money) cats.MIN(nums.weight)

   200 140.5   200 140.5   200 140.5

 28 240 120.8 28 240 120.8 28 240 120.8

                 

   300 155.6   300 155.6   300 155.6

 cats.SKEW(nums.age) cats.SKEW(nums.money) cats.SKEW(nums.weight) cats.STD(nums.age) cats.STD(nums.money) cats.STD(nums.weight) cats.SUM(nums.age) cats.SUM(nums.money) cats.SUM(nums.weight)

             0 200 140.5

             28 240 120.8

                 

             0 300 155.6

 cats.DAY(born) cats.MONTH(born) cats.WEEKDAY(born) cats.YEAR(born)          

                 

 1 1 0 1990          

                 

                 


字段解释:


<Feature: ID> : The "ID".

<Feature: age> : The "age".

<Feature: money> : The "money".

<Feature: weight> : The "weight".

<Feature: cats.sex> : The "sex" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.hobbey> : The "hobbey" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.COUNT(nums)> : The number of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MAX(nums.age)> : The maximum of the "age" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MAX(nums.money)> : The maximum of the "money" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MAX(nums.weight)> : The maximum of the "weight" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MEAN(nums.age)> : The average of the "age" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MEAN(nums.money)> : The average of the "money" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MEAN(nums.weight)> : The average of the "weight" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MIN(nums.age)> : The minimum of the "age" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MIN(nums.money)> : The minimum of the "money" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MIN(nums.weight)> : The minimum of the "weight" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.SKEW(nums.age)> : The skewness of the "age" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.SKEW(nums.money)> : The skewness of the "money" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.SKEW(nums.weight)> : The skewness of the "weight" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.STD(nums.age)> : The standard deviation of the "age" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.STD(nums.money)> : The standard deviation of the "money" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.STD(nums.weight)> : The standard deviation of the "weight" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.SUM(nums.age)> : The sum of the "age" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.SUM(nums.money)> : The sum of the "money" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.SUM(nums.weight)> : The sum of the "weight" of all instances of "nums" for each "ID" in "cats" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.DAY(born)> : The day of the month of the "born" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.MONTH(born)> : The month of the "born" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.WEEKDAY(born)> : The day of the week of the "born" for the instance of "cats" associated with this instance of "nums".

<Feature: cats.YEAR(born)> : The year of the "born" for the instance of "cats" associated with this instance of "nums".


上一篇:Encoder-Decoder自动生成对联,要试试么?


下一篇:MongoDB 4.X CRUD基本操作