python-featuretools-advanced-featuretools

from sklearn.cluster import KMeans
import featuretools as ft
import featuretools.variable_types as vtypes
from featuretools.primitives import make_agg_primitive
from tsfresh.feature_extraction.feature_calculators import (cid_ce, number_peaks, 
                                                             last_location_of_maximum, 
                                                             skewness, sample_entropy)

# 定義EntitySet
es = ft.EntitySet(id = 'engines')
es = es.entity_from_dataframe(dataframe = train,
                              entity_id='obs', 
                              index = 'index',
                              time_index = 'time')
# 建立關係
es.normalize_entity(base_entity_id='obs',
                    new_entity_id = 'engines', 
                    index = 'engine_no')
# 重新定義EntitySet                         
test_es = ft.EntitySet(id = 'test_engines')
test_es = test_es.entity_from_dataframe(dataframe = test,
                                        entity_id='obs', 
                                        index = 'index',
                                        time_index = 'time')
test_es.normalize_entity(base_entity_id='obs',
                         new_entity_id = 'engines', 
                         index = 'engine_no')
# 用來評估時間序列的複雜度,越複雜的序列有越多的谷峯
def cid_ce_func(x): return cid_ce(x , False)
# 峯值個數
def number_peaks_func(x): return number_peaks(x , 5)
# 最大值最後出現的位置
def last_location_of_maximum_func(x): return last_location_of_maximum(x)
# 偏度
def skewness_func(x): return skewness(x)
# 熵
def sample_entropy_func(x): return sample_entropy(x)

cid_ce_primitive = make_agg_primitive(cid_ce_func,
                                      input_types = [vtypes.Numeric],
                                      return_type = vtypes.Numeric,
                                      name = 'Complexity')

number_peaks_primitive = make_agg_primitive(number_peaks_func,
                                            input_types = [vtypes.Numeric],
                                            return_type = vtypes.Numeric,
                                            name = 'NumberPeaks')

last_location_of_maximum_primititive = make_agg_primitive(last_location_of_maximum_func,
                                                          input_types = [vtypes.Numeric],
                                                          return_type = vtypes.Numeric,
                                                          name = 'LastLocationMax')

skewness_primitive = make_agg_primitive(skewness_func,
                                        input_types = [vtypes.Numeric],
                                        return_type = vtypes.Numeric,
                                        name = 'Skewness')

sample_entropy_primitive = make_agg_primitive(sample_entropy_func,
                                              input_types = [vtypes.Numeric],
                                              return_type = vtypes.Numeric,
                                              name = 'Entropy')
feature_matrix, feature_names = ft.dfs(entityset=es, target_entity='engines',
                                       agg_primitives = ['min', 'max', 'mean', 
                                                         'count', 'sum', 'last',
                                                         'skew', 'std', 'trend',
                                                         cid_ce_primitive, number_peaks_primitive, 
                                                         last_location_of_maximum_primititive,
                                                         skewness_primitive, sample_entropy_primitive],
                                       trans_primitives = ['cum_mean', 'cum_sum'],
                                       max_depth = 1, n_jobs = -1, verbose = 1,
                                       chunk_size = 100)
test_feature_matrix = ft.calculate_feature_matrix(entityset=test_es, 
                                                  features=feature_names,
                                                  n_jobs = -1, verbose = 1,
                                                  chunk_size = 100)
# 增加模型選擇
feature_matrix = feature_selection(feature_matrix)
test_feature_matrix = test_feature_matrix[feature_matrix.columns]
# 評價特徵
preds, fi = evaluate(feature_matrix, train_labels, test_feature_matrix, test_labels)
norm_fi = plot_feature_importances(fi)
# 增加深度
feature_matrix, feature_names = ft.dfs(entityset=es, target_entity='engines',
                                       agg_primitives = ['min', 'max', 'mean', 
                                                         'count', 'sum', 'last',
                                                         'skew', 'std', 'trend',
                                                         cid_ce_primitive, number_peaks_primitive, 
                                                         last_location_of_maximum_primititive,
                                                         skewness_primitive, sample_entropy_primitive],
                                       trans_primitives = ['cum_mean', 'cum_sum'],
                                       max_depth = 2, n_jobs = -1, verbose = 1,
                                       chunk_size = 100)
# 
test_feature_matrix = ft.calculate_feature_matrix(entityset=test_es, 
                                                  features=feature_names,
                                                  n_jobs = -1, verbose = 1,
                                                  chunk_size = 100)
preds, fi = evaluate(feature_matrix, train_labels, test_feature_matrix, test_labels)
norm_fi = plot_feature_importances(fi)
                                                                                                                                                                                   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章