**TSFresh(基于可扩展假设查验的时间序列特性提取)**是一个专门用于时间序列数据特性主动提取的框架。该框架提取的特性可直策应用于分类、回归和非常检测等呆板学习使命。TSFresh通过主动化特性工程流程,显着提升了时间序列分析的服从。
主动化特性提取过程涉及处理处罚数百个统计特性,包罗均值、方差、偏度和自干系性等,并通过统计查验方法筛选出具有显着性的特性,同时剔除冗余特性。该框架支持单变量和多变量时间序列数据处理处罚。
TSFresh工作流程
TSFresh的根本工作流程包罗以下步调:起首将数据转换为特定格式,然后使用
函数举行特性提取,末了可选择性地使用
函数举行特性选择。
TSFresh要求输入数据采取长格式(Long Format),每个时间序列必须包罗唯一的
标识列。
构建示例:天生100个特性的100组时间序列观测数据
- importpandasaspd importnumpyasnp fromtsfreshimportextract_features
- fromtsfreshimportselect_features
- fromtsfresh.utilities.dataframe_functionsimportimpute fromtsfresh.feature_extractionimportEfficientFCParameters fromtsfresh.feature_extraction.feature_calculators
- importmean fromsklearn.model_selectionimporttrain_test_split fromsklearn.ensembleimportRandomForestClassifier fromsklearn.metricsimportaccuracy_score, classification_report, confusion_matrix importmatplotlib.pyplotasplt importseabornassns # 构建大规边幅本数据集 np.random.seed(42) n_series=100 n_timepoints=100 time_series_list= [] foriinrange(n_series): frequency=np.random.uniform(0.5, 2) phase=np.random.uniform(0, 2*np.pi) noise_level=np.random.uniform(0.05, 0.2) values=np.sin(frequency*np.linspace(0, 10, n_timepoints) +phase) +np.random.normal(0, noise_level, n_timepoints) df=pd.DataFrame({ 'id
- ': i, 'time': range(n_timepoints), 'value': values }) time_series_list.append(df) time_series=pd.concat(time_series_list, ignore_index=True) print("Original time series data:") print(time_series.head()) print(f"Number of time series: {n_series}") print(f"Number of timepoints per series: {n_timepoints}")
复制代码 接下来对天生的数据举行可视化分析:
- # 选择性可视化时间序列数据 plt.figure(figsize=(12, 6)) foriinrange(5): # 绘制前5条时间序列 plt.plot(time_series[time_series['id
- '] ==i]['time'], time_series[time_series['id
- '] ==i]['value'], label=f'Series {i}') plt.title('Sample of Time Series') plt.xlabel('Time') plt.ylabel('Value') plt.legend() plt.savefig("sample_TS.png") plt.show()
复制代码
数据显现出预期的随机性特性,这与实际时间序列数据的特性符合。
特性提取过程
数据出现出典范的时间序列特性,包罗噪声和颠簸。下面使用
函数实行特性提取使用。
- # 实行特性提取 features=extract_features
- (time_series, column_id
- ="id
- ", column_sort="time", n_jobs=0) print("\nExtracted features:") print(features.head()) # 对缺失值举行插补处理处罚 features_imputed=impute(features)
复制代码 输出示例(部门特性):
- value__mean value__variance value__autocorrelation_lag_1 id
- 1 0.465421 0.024392 0.856201 2 0.462104 0.023145 0.845318
复制代码 特性选择
为进步模子服从,须要对提取的特性举行筛选。使用
函数基于统计显着性举行特性选择。
- # 构造目的变量(基于频率的二分类) target=pd.Series(index=range(n_series), dtype=int) target[features_imputed.index%2==0] =0 # 偶数索引分类 target[features_imputed.index%2==1] =1 # 奇数索引分类 # 实行特性选择 selected_features=select_features
- (features_imputed, target) # 特性选择效果处理处罚 ifselected_features.empty: print("\nNo features were selected. Using all features.") selected_features=features_imputed else: print("\nSelected features:") print(selected_features.head()) print(f"\nNumber of features: {selected_features.shape[1]}") print("\nNames of features (first 10):") print(selected_features.columns.tolist()[:10])
复制代码 此过程可有效筛选出与目的变量具有显着干系性的特性。
特性应用于监视学习
特性工程的重要目的是为呆板学习模子提供有效的输入变量。TSFresh可与scikit-learn等主流呆板学习库无缝集成。
以下展示了特性在分类使命中的应用实例:
- # 分类模型构建
- # 数据集划分
- X_train_clf, X_test_clf, y_train_clf, y_test_clf=train_test_split(
- selected_features, target, test_size=0.2, random_state=42
- )
- # 随机森林分类器训练
- clf=RandomForestClassifier(random_state=42)
- clf.fit(X_train_clf, y_train_clf)
- # 模型评估
- y_pred_clf=clf.predict(X_test_clf)
- print("\nClassification Model Performance:")
- print(f"Accuracy: {accuracy_score(y_test_clf, y_pred_clf):.2f}")
- print("\nClassification Report:")
- print(classification_report(y_test_clf, y_pred_clf))
- # 混淆矩阵可视化
- cm=confusion_matrix(y_test_clf, y_pred_clf)
- plt.figure(figsize=(8, 6))
- sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
- plt.title('Confusion Matrix')
- plt.xlabel('Predicted')
- plt.ylabel('Actual')
- plt.savefig("confusion_matrix.png")
- plt.show()
复制代码
- # 特征重要性分析
- feature_importance=pd.DataFrame({
- 'feature': X_train_clf.columns,
- 'importance': clf.feature_importances_
- }).sort_values('importance', ascending=False)
- print("\nTop 10 Most Important Features:")
- print(feature_importance.head(10))
- # 特征重要性可视化
- plt.figure(figsize=(12, 6))
- sns.barplot(x='importance', y='feature', data=feature_importance.head(20))
- plt.title('Top 20 Most Important Features')
- plt.xlabel('Importance')
- plt.ylabel('Feature')
- plt.savefig("feature_importance.png")
- plt.show()
复制代码
多变量时间序列处理处罚
TSFresh支持对数据会集的多个变量同时举行特性提取。
- # 多变量特性提取示例 # 添加新的时间序列变量 time_series["value2"] =time_series["value"] *0.5+np.random.normal(0, 0.05, len(time_series)) # 对多个变量举行特性提取 features_multivariate=extract_features
- ( time_series, column_id
- ="id
- ", column_sort="time", default_fc_parameters=EfficientFCParameters(), n_jobs=0 ) print("\nMultivariate features:") print(features_multivariate.head())
复制代码 自界说特性提取方法
TSFresh框架答应通过
- tsfresh.feature_extraction.feature_calculators
复制代码 模块定制特性提取函数。
- # 多变量特性提取实现 # 构造附加时间序列变量 time_series["value2"] =time_series["value"] *0.5+np.random.normal(0, 0.05, len(time_series)) # 实行多变量特性提取 features_multivariate=extract_features
- ( time_series, column_id
- ="id
- ", column_sort="time", default_fc_parameters=EfficientFCParameters(), n_jobs=0 ) print("\nMultivariate features:") print(features_multivariate.head())
复制代码 以下展示了使用matplotlib举行数据分布可视化:
- # 盘算时间序列均值特性 custom_features=time_series.groupby("id
- ")["value"].apply(mean) print("\nCustom features (mean of each time series, first 5):") print(custom_features.head()) # 特性分布可视化 plt.figure(figsize=(10, 6)) sns.histplot(custom_features, kde=True) plt.title('Distribution of Mean Values for Each Time Series') plt.xlabel('Mean Value') plt.ylabel('Count') plt.savefig("dist_of_means_TS.png") plt.show()
复制代码
- # 特征与目标变量关系可视化
- plt.figure(figsize=(10, 6))
- sns.scatterplot(x=custom_features, y=target)
- plt.title('Relationship between Mean Values and Target')
- plt.xlabel('Mean Value')
- plt.ylabel('Target')
- plt.savefig("means_v_target_TS.png")
- plt.show()
复制代码
总结
TSFresh在时间序列特性工程范畴显现出显着上风。通过主动化特性天生气制,它为鄙俚呆板学习使命提供了丰富的特性输入。但是须要注意的是,大量主动天生的特性大概导致过拟合标题,这一方面仍需进一步的实证研究验证。
https://avoid
.overfit.cn/post/5730b6960bca45f9b89ce5393afb7005
作者:Kyle Jones
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qid
ao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|