tsfresh:时间序列特征自动提取与应用
tsfresh:时间序列特征自动提取与应用
本文系统介绍了 tsfresh 技术在 A 股市场数据分析与量化投资中的应用。从基础特征提取到高级策略开发,结合实战案例,详细讲解了如何利用 tsfresh 构建量化投资策略,并优化风险控制,助力读者全面掌握时间序列特征提取在量化领域的技术应用。
文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。适合量化新手建立系统认知,为策略开发打下基础。
第一章:tsfresh 技术概述与环境搭建
1.1 tsfresh 简介
tsfresh 是一个用于时间序列特征提取的 Python 库,它能够自动从时间序列数据中提取大量特征,并通过统计检验筛选出与目标变量相关的特征,简化了时间序列数据分析流程,广泛应用于预测维护、金融分析等领域。
1.2 环境搭建
tsfresh 安装
pip install "tsfresh[dask]"
推荐阅读:Dask:Python高效并行计算利器 🔥
验证安装成功与否
安装完成后,可以通过以下Python代码验证tsfresh是否安装成功:
import tsfresh
print(tsfresh.__version__)
如果输出了版本号,说明安装成功。
相关依赖库安装
# 安装 pandas、numpy、matplotlib 等库
pip install pandas numpy matplotlib
Tushare 数据接口申请与配置
- 访问 Tushare 官网 注册账号并获取 API Token。
- 安装 Tushare Python SDK:
pip install tushare
- 配置 Tushare API:
import tushare as ts
ts.set_token("your_token") # 替换为你的Tushare Token
pro = ts.pro_api()
1.3 数据准备
使用 Tushare 获取 A 股市场数据
import pandas as pd# 获取某股票的历史日线数据
def get_stock_data(ts_code, start_date, end_date):df = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date)return df# 示例:获取股票 000001.SZ 的 2024年数据
stock_data = get_stock_data("000001.SZ", "20240101", "20241231")
stock_data["trade_date"] = pd.to_datetime(stock_data["trade_date"])
stock_data.sort_values("trade_date", inplace=True)
print(stock_data.head())
数据存储与管理
Parquet是一种高效的列式存储格式,适用于大数据处理。它具有高压缩比和快速读取的特点,适合存储大规模数据。
推荐阅读:
- Pandas+PyArrow:股票数据存储 Parquet 入门指引 🔥
- A股数据存储实战:Parquet技术深度解析 🔥
# 将获取的数据存储为Parquet文件
stock_data.to_parquet("./data/000001.SZ.parquet", index=False)# 从Parquet文件读取数据
stock_data = pd.read_parquet("./data/000001.SZ.parquet")print(stock_data.head())
数据清洗与预处理
# 检查缺失值
print(stock_data.isnull().sum())# 处理缺失值,例如用前一日数据填充
stock_data.fillna(method="ffill", inplace=True)# 按交易日期排序
stock_data.sort_values("trade_date", inplace=True)
第二章:时间序列特征提取基础
2.1 时间序列特征提取概述
时间序列特征提取是从时间序列数据中提取出能够代表其主要特征的信息,这些特征可以用于后续的数据分析、建模和预测。在金融领域,时间序列特征提取可以帮助我们理解市场趋势、识别交易模式、构建预测模型等。
tsfresh 提供了全面的特征提取功能,能够自动从时间序列数据中提取大量特征,并通过统计检验筛选出与目标变量相关的特征,大大简化了特征工程的流程。
2.2 基本特征提取方法
统计特征
统计特征是最基本的特征类型,包括均值、方差、中位数、极值等。这些特征能够反映时间序列数据的集中趋势和离散程度。
from tsfresh import extract_features# 假设 stock_data 是之前获取的股票数据,包含 'close' 列
# 为 tsfresh 准备数据,需要将时间序列数据整理成特定格式
def prepare_tsfresh_data(stock_data):# 为每行数据添加一个唯一标识符,表示属于同一个时间序列stock_data["id"] = range(0, len(stock_data))# 选择需要的列,包括标识符、时间戳和目标值ts_data = stock_data[["id", "trade_date", "close"]]return ts_datats_data = prepare_tsfresh_data(stock_data)# 提取统计特征
statistical_features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",default_fc_parameters={"mean": None,"variance": None,"median": None,"maximum": None,"minimum": None,},
)
print(statistical_features)
时间域特征
时间域特征关注时间序列在时间维度上的变化特性,如趋势、周期性、波动性等。
# 定义要提取的时间域特征
time_domain_features = {"abs_energy": None,"absolute_sum_of_changes": None,"cid_ce": [{"normalize": True}, {"normalize": False}],"friedrich_coefficients": [{"coeff": 0, "m": 3, "r": 30}],"linear_trend": [{"attr": "pvalue"},{"attr": "rvalue"},{"attr": "intercept"},{"attr": "slope"},{"attr": "stderr"},],"spkt_welch_density": [{"coeff": 2}],"binned_entropy": [{"max_bins": 10}],
}# 提取时间域特征
td_features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",default_fc_parameters=time_domain_features,
)
print(td_features)
频域特征
频域特征通过傅里叶变换等方法将时间序列数据转换到频域,提取频率成分、功率谱等信息。
# 提取频域特征
frequency_domain_features = {"fft_aggregated": [{"aggtype": "centroid"},{"aggtype": "variance"},{"aggtype": "skew"},{"aggtype": "kurtosis"},],"fft_coefficient": [{"coeff": 0, "attr": "real"}, {"coeff": 1, "attr": "real"}],"index_mass_quantile": [{"q": 0.5}],"number_peaks": [{"n": 10}],
}fd_features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",default_fc_parameters=frequency_domain_features,
)
print(fd_features)
2.3 实战:对 A 股某股票的历史价格数据进行基本特征提取
# 综合提取统计特征、时间域特征和频域特征
from tsfresh.feature_extraction import ComprehensiveFCParameters# 定义综合特征提取参数
comprehensive_features = ComprehensiveFCParameters()
# 移除不需要的特征
comprehensive_features.pop("fft_aggregated", None)
comprehensive_features.pop("fft_coefficient", None)
comprehensive_features.pop("index_mass_quantile", None)
comprehensive_features.pop("number_peaks", None)
comprehensive_features.pop("spectral_entropy", None)# 提取综合特征
all_features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",default_fc_parameters=comprehensive_features,
)# 查看提取的特征
print(all_features.head())# 特征可视化
import matplotlib.pyplot as plt# 绘制收盘价走势图
plt.figure(figsize=(10, 6))
plt.plot(stock_data["trade_date"], stock_data["close"])
plt.title("Stock Closing Price Trend")
plt.xlabel("Trade Date")
plt.ylabel("Closing Price")
plt.show()# 绘制提取的特征分布
import randomsampled_features = random.sample(all_features.columns.tolist(), 25
) # 随机选取25个特征示例
all_features[sampled_features].plot(kind="hist", subplots=True, layout=(5, 5), figsize=(15, 15)
)
plt.legend()
plt.show()
第三章:高级时间序列特征提取
3.1 高级特征提取技术
自动特征提取
tsfresh 的强大之处在于其能够自动从时间序列数据中提取大量特征,无需手动定义每个特征。
from tsfresh import extract_features
from tsfresh.feature_extraction import ComprehensiveFCParameters# 定义自动特征提取参数
automatic_features = ComprehensiveFCParameters()# 提取自动特征
auto_features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",default_fc_parameters=automatic_features,
)# 查看提取的特征数量和部分特征
print(f"Extracted {auto_features.shape[1]} features.")
print(auto_features.head())
特征筛选与选择
提取大量特征后,需要进行筛选以选择与目标变量相关的特征,减少维度并提高模型性能。
from tsfresh import select_features# 假设我们有一个目标变量,例如股票的未来收益率
# 这里需要根据实际情况构建目标变量
# target = ...# 筛选与目标变量相关的特征
selected_features = select_features(auto_features, target)# 查看筛选后的特征数量和部分特征
print(f"Selected {selected_features.shape[1]} features.")
print(selected_features.head())
特征工程技巧
- 特征组合:将多个基础特征组合成新的特征,例如计算两个时间序列的比率或差值。
- 时间窗口特征:在不同时间窗口上提取特征,捕捉短期和长期趋势。
- 滞后特征:创建滞后版本的时间序列,用于捕捉过去值对当前值的影响。
3.2 实战:深入提取 A 股市场时间序列特征
多只股票数据的特征提取
from tsfresh import extract_features
from tsfresh.feature_extraction import ComprehensiveFCParameters# 定义自动特征提取参数
automatic_features = ComprehensiveFCParameters()# 为 tsfresh 准备数据
def prepare_tsfresh_data_multi(stocks_data):stocks_data["id"] = (stocks_data["ts_code"].astype(str) + "_" + stocks_data["trade_date"].astype(str))ts_data_multi = stocks_data[["id", "trade_date", "close"]]return ts_data_multits_data_multi = prepare_tsfresh_data_multi(stocks_data)# 提取多只股票的特征
auto_features_multi = extract_features(ts_data_multi,column_id="id",column_sort="trade_date",column_value="close",default_fc_parameters=automatic_features,
)# 查看提取的特征
print(auto_features_multi.head())
不同时间周期数据的特征对比
# 获取日线、周线、月线数据
def get_data_different_timeframes(ts_code, start_date, end_date):# 日线数据daily_data = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date)# 周线数据weekly_data = pro.weekly(ts_code=ts_code, start_date=start_date, end_date=end_date)# 月线数据monthly_data = pro.monthly(ts_code=ts_code, start_date=start_date, end_date=end_date)return daily_data, weekly_data, monthly_data# 示例:获取某股票的不同时间周期数据
daily, weekly, monthly = get_data_different_timeframes("000001.SZ", "20240101", "20241231"
)# 分别提取不同时间周期的特征
def extract_features_timeframe(data, timeframe):data["id"] = [timeframe + "_" + str(i) for i in range(len(data))]ts_data = data[["id", "trade_date", "close"]]features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",default_fc_parameters=automatic_features,)return featuresdaily_features = extract_features_timeframe(daily, "daily")
weekly_features = extract_features_timeframe(weekly, "weekly")
monthly_features = extract_features_timeframe(monthly, "monthly")# 合并不同时间周期的特征
all_timeframe_features = pd.concat([daily_features, weekly_features, monthly_features])
print(all_timeframe_features.head())
特征可视化与解读
# 可视化某只股票的特征分布
import matplotlib.pyplot as plt# 选择某只股票的特征数据
stock_features = auto_features_multi[auto_features_multi.index.str.contains("000001.SZ")
]# 去除 NaN 值
stock_features = stock_features.dropna(axis=1)# 绘制部分特征的分布
fig, axes = plt.subplots(nrows=3, ncols=3, figsize=(15, 10))
axes = axes.flatten()feature_columns = stock_features.columns[:9] # 选择前 9 个特征进行可视化for i, feature in enumerate(feature_columns):axes[i].hist(stock_features[feature], bins=20)axes[i].set_title(feature)plt.tight_layout()
plt.show()
第四章:时间序列分类与回归应用
4.1 时间序列分类基础
时间序列分类是根据时间序列的特征将其划分到不同的类别中。在 A 股市场中,可以用于股票的行业分类、风格分类等。
常见分类算法
- 逻辑回归:适用于二分类问题。
- 支持向量机:适用于高维数据分类。
- 随机森林:基于集成学习的分类算法,具有较高的准确性和鲁棒性。
- 神经网络:适用于复杂模式识别。
4.2 使用 tsfresh 进行时间序列分类
特征提取与选择
from tsfresh import extract_features, select_features# 假设我们有多只股票的数据,ts_data 包含 'id'、'trade_date' 和 'close' 列
# 提取特征
features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",
)# 假设我们有一个目标分类标签,例如股票的行业分类
# labels = ...# 筛选与分类相关的特征
selected_features = select_features(features, labels)# 查看筛选后的特征
print(selected_features.head())
分类模型训练与评估
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(selected_features, labels, test_size=0.2, random_state=42
)# 模型训练
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)# 模型评估
y_pred = clf.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(classification_report(y_test, y_pred))
实战:对 A 股股票进行分类
# 获取多只股票的数据并提取特征
# 假设我们已经获取了多只股票的数据并存储在 stocks_data 中# 为 tsfresh 准备数据
ts_data = prepare_tsfresh_data_multi(stocks_data)# 提取特征
features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",
)# 假设我们有一个行业分类标签字典,key 为股票代码,value 为行业分类
# industry_labels = ...# 将标签与特征数据对齐
labels = [industry_labels[id.split("_")[0]] for id in features.index]# 筛选特征
selected_features = select_features(features, labels)# 数据集划分与模型训练
X_train, X_test, y_train, y_test = train_test_split(selected_features, labels, test_size=0.2, random_state=42
)
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)# 评估模型
y_pred = clf.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(classification_report(y_test, y_pred))
4.3 时间序列回归分析
时间序列回归是根据时间序列的特征预测一个连续的目标值,如股票的未来价格。
常见回归算法
- 线性回归:简单的线性模型。
- 决策树回归:适用于非线性关系。
- 梯度提升回归:基于梯度提升的回归算法,具有较高的预测精度。
- 神经网络回归:适用于复杂函数逼近。
使用 tsfresh 进行时间序列回归
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error, r2_score# 假设我们已经提取了特征并存储在 features 中
# 假设我们有一个目标值,例如股票的未来收益率
# target = ...# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42
)# 模型训练
regressor = GradientBoostingRegressor(n_estimators=100, random_state=42)
regressor.fit(X_train, y_train)# 模型评估
y_pred = regressor.predict(X_test)
print(f"RMSE: {mean_squared_error(y_test, y_pred, squared=False)}")
print(f"R^2: {r2_score(y_test, y_pred)}")
实战:预测 A 股股票的未来价格走势
# 获取股票历史数据并提取特征
# 假设我们已经获取了股票数据并存储在 stock_data 中# 构建目标值,例如未来 5 天的收盘价
stock_data["future_close"] = stock_data["close"].shift(-5)# 删除未来数据缺失的行
stock_data.dropna(subset=["future_close"], inplace=True)# 为 tsfresh 准备数据
ts_data = prepare_tsfresh_data(stock_data)# 提取特征
features = extract_features(ts_data,column_id="id",column_sort="trade_date",column_value="close",
)# 将目标值与特征数据对齐
target = stock_data.loc[features.index, "future_close"]# 数据集划分与模型训练
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42
)
regressor = GradientBoostingRegressor(n_estimators=100, random_state=42)
regressor.fit(X_train, y_train)# 评估模型
y_pred = regressor.predict(X_test)
print(f"RMSE: {mean_squared_error(y_test, y_pred, squared=False)}")
print(f"R^2: {r2_score(y_test, y_pred)}")
第五章:tsfresh 在量化投资中的高级应用
5.1 量化投资概述
量化投资是利用数学模型和计算机技术,对金融市场进行分析、预测,并制定投资策略的过程。时间序列分析在量化投资中占据重要地位,通过对历史价格、成交量等时间序列数据的分析,可以挖掘市场规律、预测价格走势。
5.2 使用 tsfresh 构建量化投资策略
特征工程与策略设计
import numpy as np
from sklearn.model_selection import train_test_split
from tsfresh import extract_features, select_features
from tsfresh.utilities.dataframe_functions import impute
from sklearn.metrics import mean_squared_error
from sklearn.ensemble import GradientBoostingRegressor
import pandas as pd# 获取股票数据
def get_stock_data(ts_code, start_date, end_date):df = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date)return df# 构建目标变量(例如未来5天的收益率)
def build_target_variable(data, periods=-5):data["trade_date"] = pd.to_datetime(data["trade_date"])data.sort_values("trade_date", inplace=True)data["future_close"] = data["close"].shift(periods)data.dropna(subset=["future_close"], inplace=True)data["id"] = range(0, len(data))data.set_index("id", inplace=True)data.reset_index(inplace=True)return data# 提取特征
def feature_engineering(data):extracted_features = extract_features(data,column_id="id",column_sort="trade_date",column_value="close",)# 处理缺失值impute(extracted_features)target_variable = (data["future_close"] - data["close"]) # 目标变量为未来5天的收盘价变化 data["future_return"]selected_features = select_features(extracted_features, target_variable)return selected_features, target_variable# 策略设计
def strategy_development(features, variable, variables):X_train, X_test, y_train, y_test = train_test_split(features, variable, test_size=0.2, random_state=42)# 模型训练model = GradientBoostingRegressor(n_estimators=100, random_state=42)model.fit(X_train, y_train)y_pred = model.predict(X_test)mse = mean_squared_error(y_test, y_pred)print(f"均方误差(MSE):{mse}")# 策略信号生成variables["predicted_future_change"] = model.predict(features)variables["predicted_future_close"] = (variables["close"] + variables["predicted_future_change"])# 根据信号生成持仓信号variables["signal"] = np.where(variables["predicted_future_close"] > variables["close"], 1, -1)variables["strategy_returns"] = (variables["signal"].shift(1) * variables["close"].pct_change())cumulative_returns = (variables["strategy_returns"] + 1).cumprod()# 绘制结果plt.figure(figsize=(10, 6))plt.plot(cumulative_returns, label="Strategy Returns")plt.plot(stock_data["close"].pct_change().cumsum(), label="Buy and Hold")plt.title("Strategy Performance")plt.xlabel("Date")plt.ylabel("Cumulative Returns")plt.legend()plt.show()return variables# 实战:构建基于 tsfresh 的量化投资策略
stock_data = get_stock_data('000001.SZ', '20200101', '20201231')
target_variables = build_target_variable(stock_data)
selected_features, target_variable = feature_engineering(target_variables)
strategy_data = strategy_development(selected_features, target_variable, target_variables
)
策略回测与评估
import matplotlib.pyplot as plt
import numpy as np# 策略回测
def strategy_backtest(strategy_data):strategy_data["return"] = strategy_data["close"].pct_change() * strategy_data["signal"].shift(1)strategy_data["cumulative_return"] = (1 + strategy_data["return"]).cumprod()return strategy_data# 策略评估
def strategy_evaluation(strategy_data):# 计算年化收益率annual_return = (strategy_data["cumulative_return"].iloc[-1]) ** (252 / len(strategy_data)) - 1# 计算最大回撤cumulative_return = strategy_data["cumulative_return"]peak = cumulative_return.expanding(min_periods=1).max()drawdown = (cumulative_return - peak) / peakmax_drawdown = drawdown.min()# 计算夏普比率daily_return = strategy_data["return"].dropna()sharpe_ratio = daily_return.mean() / daily_return.std() * np.sqrt(252)# 打印结果print(f"Annual Return: {annual_return}")print(f"Max Drawdown: {max_drawdown}")print(f"Sharpe Ratio: {sharpe_ratio}")return annual_return, max_drawdown, sharpe_ratio# 可视化策略表现
def plot_strategy_performance(strategy_data):plt.figure(figsize=(10, 6))plt.plot(strategy_data["trade_date"], strategy_data["cumulative_return"])plt.title("Strategy Performance")plt.xlabel("Trade Date")plt.ylabel("Cumulative Return")plt.show()# 执行策略回测与评估
strategy_data = strategy_backtest(strategy_data)
strategy_evaluation(strategy_data)
plot_strategy_performance(strategy_data)
风险控制与优化
# 风险控制
def risk_management(strategy_data):# 设置止损止盈strategy_data["stop_loss"] = -0.05 # 止损5%strategy_data["stop_profit"] = 0.1 # 止盈10%# 调整仓位strategy_data["signal"] = strategy_data["signal"] * 0.5 # 降低仓位50%return strategy_data# 策略优化
def strategy_optimization(strategy_data):# 参数优化# 可以通过网格搜索、随机搜索等方法优化模型参数# 这里以调整预测周期为例target_variables = build_target_variable(stock_data, periods=-1) # 预测3天收益率# 重新进行特征提取、模型训练和策略开发selected_features, target_variable = feature_engineering(target_variables)strategy_data = strategy_development(selected_features, target_variable, target_variables)return strategy_data# 执行风险控制与策略优化
strategy_data = risk_management(strategy_data)
strategy_data = strategy_optimization(strategy_data)
# 执行策略回测与评估
strategy_data = strategy_backtest(strategy_data)
strategy_evaluation(strategy_data)
plot_strategy_performance(strategy_data)
5.3 项目中的挑战与解决方案
- 数据质量问题:A 股市场数据可能存在缺失、异常等情况,通过数据清洗、插值等方法进行处理。
- 特征提取的难点:时间序列数据具有复杂的波动性和季节性,通过综合运用多种特征提取方法和参数调整,确保提取的特征具有代表性和预测能力。
- 模型过拟合问题:通过交叉验证、正则化等手段,避免模型对训练数据的过度拟合,提高模型的泛化能力。
附录
以下是 tsfresh
提供的预定义字典及其说明:
- ComprehensiveFCParameters
- 说明:包含所有特征提取函数,以及所有可能的参数组合。这是
tsfresh
默认的特征提取设置,如果不指定default_fc_parameters
,则会使用此设置。 - 特点:计算全面,但计算成本较高。
- MinimalFCParameters
- 说明:只包含少量特征提取函数,用于快速测试。
- 特点:计算速度快,但特征覆盖范围有限。
- EfficientFCParameters
- 说明:与
ComprehensiveFCParameters
类似,但去掉了标记为“高计算成本”的特征。 - 特点:在计算效率和特征覆盖之间取得了平衡,适合对运行时间要求较高的场景。
ComprehensiveFCParameters
ComprehensiveFCParameters
是 tsfresh
提供的一个预定义字典,用于提取时间序列的全面特征集合。它包含了所有无参数的特征提取函数,以及所有有参数的特征提取函数及其不同的参数组合。
特征提取函数名称 | 参数 |
---|---|
abs_energy | 无参数 |
absolute_sum_of_changes | 无参数 |
agg_autocorrelation | param : 包含 lag 和 aggtype 的字典列表 |
agg_linear_trend | param : 包含 chunk_len 和 f_agg 的字典列表 |
approximate_entropy | param : 包含 m 和 r 的字典列表 |
ar_coefficient | param : 包含 coeff 和 k 的字典列表 |
augmented_dickey_fuller | param : 包含 attr 的字典列表 |
autocorrelation | param : 包含 lag 的字典列表 |
binned_entropy | param : 包含 max_bins 的字典列表 |
c3 | param : 包含 lag 的字典列表 |
change_quantiles | param : 包含 ql , qh , isabs , 和 f_agg 的字典列表 |
cid_ce | param : normalize:布尔值(True 或 False) |
count_above | param : 包含 t 的字典列表 |
count_above_mean | 无参数 |
count_below | param : 包含 t 的字典列表 |
count_below_mean | 无参数 |
cwt_coefficients | param : 包含 widths , coeff , 和 w 的字典列表 |
energy_ratio_by_chunks | param : 包含 num_segments 和 segment_focus 的字典列表 |
fft_aggregated | param : 包含 aggtype 的字典列表:“centroid”、“variance”、“skew”、“kurtosis” |
fft_coefficient | param : 包含 coeff 和 attr 的字典列表 |
first_location_of_maximum | 无参数 |
first_location_of_minimum | 无参数 |
friedrich_coefficients | param : 包含 m , r , 和 coeff 的字典列表 |
has_duplicate | 无参数 |
has_duplicate_max | 无参数 |
has_duplicate_min | 无参数 |
index_mass_quantile | param : 包含 q 的字典列表 |
kurtosis | 无参数 |
large_standard_deviation | param : 包含 r 的字典列表 |
last_location_of_maximum | 无参数 |
last_location_of_minimum | 无参数 |
length | 无参数 |
linear_trend | param : 包含 attr 的字典列表:"pvalue" :线性回归的 p 值。"rvalue" :线性回归的相关系数。"intercept" :线性回归的截距。"slope" :线性回归的斜率。"stderr" :线性回归的标准误差。 |
longest_strike_above_mean | 无参数 |
longest_strike_below_mean | 无参数 |
mean | 无参数 |
mean_abs_change | 无参数 |
mean_change | 无参数 |
mean_second_derivative_central | 无参数 |
median | 无参数 |
number_crossing_m | param : 包含 m 的字典列表 |
number_cwt_peaks | param : 包含 n 的字典列表 |
number_peaks | param : 包含 n 的字典列表 |
partial_autocorrelation | param : 包含 lag 的字典列表 |
percentage_of_reoccurring_datapoints_to_all_datapoints | 无参数 |
percentage_of_reoccurring_values_to_all_values | 无参数 |
quantile | param : 包含 q 的字典列表 |
range_count | param : 包含 min 和 max 的字典列表 |
ratio_beyond_r_sigma | param : 包含 r 的字典列表 |
ratio_value_number_to_time_series_length | 无参数 |
skewness | 无参数 |
spkt_welch_density | param : 包含 coeff 的字典列表 |
standard_deviation | 无参数 |
sum_of_reoccurring_data_points | 无参数 |
sum_of_reoccurring_values | 无参数 |
sum_of_values | 无参数 |
symmetry_looking | param : 包含 r 的字典列表 |
time_reversal_asymmetry_statistic | param : 包含 lag 的字典列表 |
variance | 无参数 |
variance_larger_than_standard_deviation | 无参数 |
MinimalFCParameters
EfficientFCParameters
是 tsfresh
提供的一种预定义特征提取参数设置,旨在平衡计算效率和特征覆盖范围。它去掉了计算成本较高且冗余的特征,适合在实际应用中快速提取有效特征。
特征提取函数名称 | 参数 |
---|---|
abs_energy | 无参数 |
mean | 无参数 |
median | 无参数 |
std | 无参数 |
variance | 无参数 |
minimum | 无参数 |
maximum | 无参数 |
mean_abs_change | 无参数 |
mean_change | 无参数 |
mean_second_derivative_central | 无参数 |
first_location_of_maximum | 无参数 |
first_location_of_minimum | 无参数 |
last_location_of_maximum | 无参数 |
last_location_of_minimum | 无参数 |
longest_strike_above_mean | 无参数 |
longest_strike_below_mean | 无参数 |
count_above_mean | 无参数 |
count_below_mean | 无参数 |
ratio_value_number_to_time_series_length | 无参数 |
autocorrelation | param : 包含 lag 的字典列表 |
fft_coefficient | param : 包含 coeff 和 attr 的字典列表:coeff 是傅里叶系数的索引,attr 是系数的属性,可以是 “real”、“imag”、“abs”、“angle” |
linear_trend | param : 包含 attr 的字典列表 |
EfficientFCParameters
EfficientFCParameters
是 tsfresh
提供的一种预定义特征提取参数设置,旨在平衡计算效率和特征覆盖范围。它去掉了计算成本较高且冗余的特征,适合在实际应用中快速提取有效特征。
特征提取函数名称 | 参数 |
---|---|
abs_energy | 无参数 |
mean | 无参数 |
median | 无参数 |
std | 无参数 |
variance | 无参数 |
minimum | 无参数 |
maximum | 无参数 |
mean_abs_change | 无参数 |
mean_change | 无参数 |
mean_second_derivative_central | 无参数 |
first_location_of_maximum | 无参数 |
first_location_of_minimum | 无参数 |
last_location_of_maximum | 无参数 |
last_location_of_minimum | 无参数 |
longest_strike_above_mean | 无参数 |
longest_strike_below_mean | 无参数 |
count_above_mean | 无参数 |
count_below_mean | 无参数 |
ratio_value_number_to_time_series_length | 无参数 |
autocorrelation | param : 包含 lag 的字典列表 |
fft_coefficient | param : 包含 coeff 和 attr 的字典列表 |
linear_trend | param : 包含 attr 的字典列表 |
风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。
相关文章:
tsfresh:时间序列特征自动提取与应用
tsfresh:时间序列特征自动提取与应用 本文系统介绍了 tsfresh 技术在 A 股市场数据分析与量化投资中的应用。从基础特征提取到高级策略开发,结合实战案例,详细讲解了如何利用 tsfresh 构建量化投资策略,并优化风险控制,…...
【A2DP】深入解读A2DP中通用访问配置文件(GAP)的互操作性要求
目录 一、模式支持要求 1.1 发现模式 1.2 连接模式 1.3 绑定模式 1.4 模式间依赖关系总结 1.5 注意事项 1.6 协议设计深层逻辑 二、安全机制(Security Aspects) 三、空闲模式操作(Idle Mode Procedures) 3.1 支持要求 …...
CUDA编程之内存
CUDA的内存类型有全局内存、共享内存、常量内存、纹理内存、本地内存、寄存器等。我们需要分别了解它们的特点和使用场景。在CUDA编程中,合理利用各种内存类型对性能优化至关重要。 1. 全局内存(Global Memory) 特点:设…...
【Agent实战】货物上架位置推荐助手(RAG方式+结构化prompt(CoT)+API工具结合ChatGPT4o能力Agent项目实践)
本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 结论 效果图示 1.prompt 2. API工具封…...
ffmpeg面试题整理
1. 基础概念 问题:FFmpeg 是什么?它的核心功能有哪些? 编解码:支持几乎所有音视频格式(如 H.264, AAC, MP3)。转换:在不同容器格式之间转换(如 MP4 → MKV)。流处理&…...
Idea运行项目报错:java.lang.OutOfMemoryError: Java heap space 解决方法
问题描述 Maven构建的时候,一直报错java.lang.OutOfMemoryError: Java heap space 尝试解决 找了几个JAVA高级小伙伴,一起去百度了各种可能,设置内存大小,发现都不行,还不断的重装了IDEA,以为是这个版本…...
解决 Linux /dev/mapper/ubuntu--vg-ubuntu--lv 磁盘空间不足的问题
解决 Linux /dev/mapper/ubuntu–vg-ubuntu–lv 磁盘空间不足的问题 https://blog.csdn.net/weixin_47908992/article/details/139882219 查看LVM卷组的信息 vgdisplay rootubuntu:~# vgdisplay--- Volume group ---VG Name ubuntu-vgSystem ID Fo…...
前端UI编程基础知识:基础三要素(结构→表现→行为)
以下是重新梳理的前端UI编程基础知识体系,结合最新技术趋势与实战要点,以更适合快速掌握的逻辑结构呈现: 一、基础三要素(结构→表现→行为) 1. HTML5 核心能力 • 语义化标签:<header>, <nav&g…...
Trae:与AI结伴,开启编程新体验
Trae:与AI结伴,开启编程新体验 在数字化时代,编程已经成为推动技术发展的核心力量。然而,随着项目复杂度的增加,开发者面临着诸多挑战,例如代码编写效率低下、代码质量难以把控等。如今,Trae作…...
如何用正则表达式爬取古诗文网中的数据(python爬虫)
一、了解正则表达式的基本内容: 什么是正则表达式 正则表达式(Regular Expression,简称 regex)是一种用于匹配字符串的模式。它通过特定的语法规则,可以高效地搜索、替换和提取文本中的特定内容。正则表达式广泛应用于…...
深度学习 Deep Learning 第1章 深度学习简介
第1章 深度学习简介 概述 本章介绍人工智能(AI)和深度学习领域,讨论其历史发展、关键概念和应用。解释深度学习如何从早期的AI和机器学习方法演变而来,以及如何有效解决之前方法无法应对的挑战。 关键概念 1. 人工智能的演变 …...
ByteByteGo学习笔记:通知系统设计
引言 在当今这个信息爆炸的时代,通知系统已经成为了现代应用程序中不可或缺的重要组成部分。无论是突发新闻的即时推送、产品更新的及时告知、促销活动的精准触达,还是用户交互的实时反馈,通知都扮演着至关重要的角色。一个高效、可靠、可扩…...
[设计模式]1_设计模式概览
摘要:设计模式原则、设计模式的划分与简要概括,怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用,后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则(语言无关) 本质原理图 原…...
Python + Qt Designer构建多界面GUI应用程序:Python如何调用多个界面文件
引言 Qt Designer是一个用户友好的图形用户界面设计工具,它可以帮助开发人员通过拖放的方式快速创建界面。在实际开发中,往往需要设计多个界面文件,并在Python代码中进行统一管理和使用。本文将介绍如何在Python中使用Qt Designer设计好的多…...
AGI大模型(7):提示词应用
1 生成数据 LLM具有⽣成连贯⽂本的强⼤能⼒。使⽤有效的提示策略可以引导模型产⽣更好、更⼀致和更真实的响应。LLMs还可以特别有⽤地⽣成数据,这对于运⾏各种实验和评估⾮常有⽤。例如,我们可以使⽤它来为情感分类器⽣成快速样本,如下所示: 提示: ⽣成10个情感分析的范…...
【倒霉bug2025】找不到vc_runtimeMinimum_x64.msi
今天是倒霉的一天,当喉咙痛到无法出门玩耍的我打开steam准备开始玩《冰封世界》时,游戏启动直接报错 在选择安装之后弹出一个经典窗口 然后在C:\ProgramData\PackageCache中找msi到位置点击确定继续报错说msi版本不对 上网一搜,找不到vc_ru…...
什么是强哈希算法pbkdf2(Password-Based Key Derivation Function)
文章目录 什么是pbkdf2使用场景 在线工具 什么是pbkdf2 维基百科:https://zh.wikipedia.org/zh-cn/PBKDF2 PBKDF2(Password-Based Key Derivation Function 2)是一种基于密码的密钥派生函数。它的主要作用是从密码和盐(salt&…...
Python 基础语法详解
一、变量和数据类型 变量 在 Python 中,变量无需声明类型,直接赋值即可。变量名区分大小写。 # 整数类型 age 25 print(age) # 输出:25# 浮点数类型 height 1.75 print(height) # 输出:1.75# 字符串类型 name "张三&…...
AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴
【本周AI新闻: AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴】 https://www.bilibili.com/video/BV1bkQyYCEvQ/?share_sourcecopy_web&vd_source32ed33e1165d68429b2e2eb4749f3f26 最近AI圈子里最火的话题非Manus莫属!这款由中国武汉创业公司“蝴…...
为什么会出现redis数据库?redis是什么?
什么是 Redis? 为什么要用 Redis? 下面我将从 Redis 出现的背景、Redis 的解决方案个来回答。 1、Redis 出现的背景 互联网的应用越来越多,例如社交网络、电商、实时服务发展的十分迅速,这就导致了传统技术栈(如关系型数据库)…...
每日一题---dd爱框框(Java中输入数据过多)
dd爱框框 实例: 输入: 10 20 1 1 6 10 9 3 3 5 3 7 输出: 3 5 这道题要解决Java中输入的数过多时,时间不足的的问题。 应用这个输入模板即可解决: Java中输入大量数据 import java.util.*; import java.io.*;pu…...
Flink-学习路线
最近想学习一下Flink,公司的实时需求还是不少的,因此结合ai整理了一份学习路线,记录一下。 当然,公司也有Scala版本Flink框架,也学习了一下。这里只说Java版本 1. Java基础 目标: 掌握Java编程语言的基础知识。 内容…...
一次Milvus迁移的记录
前言 希望把Linux上生产环境中使用docker compose运行的milvus迁移到本地(mac os)的docker compose中 操作过程 找到了官方有两个相关的项目: https://github.com/zilliztech/milvus-backup https://github.com/zilliztech/vts 但是…我都没用,因为使…...
矩阵的转置
对于的矩阵,使用两个指针变量,可以方便实现(i,j)处元素与(j,i)处元素交换位置。令指针Arow&A[i][0],则Arow[j]可实现对第i行j列元素的访问。令指针Bptr&A[0][i],则*Bptr就可以访问(0,i)处元素,然后,…...
使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号
使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰,能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明: 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…...
Python Matplotlib面试题精选及参考答案
目录 绘制函数 y=2x+5 在区间 [1,10] 的折线图,设置标题和坐标轴标签 在同一图中绘制 sin (x) 和 cos (x) 曲线,添加图例和网格线(x∈[0,2π]) 绘制分段函数:当 x<0 时 y=0,x≥0 时 y=x,设置不同线段颜色 绘制带数据点的折线图,使用红色虚线样式和圆形标记(数据…...
在线 SQL 转 SQLAlchemy:一键生成 Python 数据模型
一款高效的在线 SQL 转 SQLAlchemy 工具,支持自动解析 SQL 语句并生成 Python SQLAlchemy 模型代码,适用于数据库管理、后端开发和 ORM 结构映射。无需手写 SQLAlchemy 模型,一键转换 SQL 结构,提升开发效率,简化数据库…...
基于自定义线程池手写一个异步任务管理器
我们在后端执行某些耗时逻辑操作时往往会导致长时间的线程阻塞,在这种情况之下,我们往往会引一条异步线程去处理这些异步任务,如果每次都创建新的线程来处理这些任务,不仅会增加代码冗余,还可能造成线程管理混乱&#…...
基恩士PLC编程小技巧八:脚本过长如何实现换行及替换
基恩士PLC编程小技巧八:脚本过长如何实现换行? 一、问题点 我们在使用基恩士编程软件KV STUDIO 进行脚本编程时,经常遇到这样的问题:脚本的一行过长,程序不好阅读及维护。 IF MR1000 OR MR1001 OR MR1002 OR MR1003 OR…...
每日一题---数组中两个字符串的最小距离
数组中两个字符串的最小距离 给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。 链接:数组中两个字符串的最小距离__牛…...
【PTA题目解答】7-1利用STL比较数据大小并排序(15分)c++
1.题目: 2.算法原理 根据题目要求,模拟即可,set容器会帮我们把插入的数自动排序好 题目说输入非整型数据就停止,不用特意判断输入的数据是整型还是非整型,如果用户输入的是字符(例如 a)&#…...
如何用Deepseek制作流程图?
使用Deepseek制作流程图,本质上是让AI根据你的需求,生成相关流程图的代码,然后在流程图编辑器中渲染,类似于Python一样,ChatGPT可以生成代码,但仍需在IDE中执行。 你知道绘制流程图最高效的工具是什么吗&a…...
【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑
【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑 🌟 核心概念 单片机变量的定义与赋值是程序设计的基础,其本质是通过 RAM(随机存储器) 和 ROM(只读存储器) 的协作实现…...
vscode python相对路径的问题
vscode python相对路径的问题 最近使用使用vscode连接wsl2写python时,经常遇到找不到包中的方法的问题,最终发现vscode在执行python代码时目录不是从当前python文件开始算起,而是从当前工作区的目录开始算起,比如说我打开的是/ho…...
C语言中的指针与函数
引言 在C语言编程中,指针是一个非常重要且强大的概念。它不仅帮助我们高效地管理内存,还能提升程序的灵活性和性能。而指针与函数的结合使用,是C语言中非常常见且极具挑战性的一个话题。正确理解和使用指针与函数的关系,不仅能帮助程序员提高代码质量,还能优化程序的执行…...
深度学习-服务器训练SparseDrive过程记录
1、cuda安装 1.1 卸载安装失败的cuda 参考:https://blog.csdn.net/weixin_40826634/article/details/127493809 注意:因为/usr/local/cuda-xx.x/bin/下没有卸载脚本,很可能是apt安装的,所以通过执行下面的命令删除: a…...
理解langchain langgraph 官方文档示例代码中的MemorySaver
以下是langchain v0.3官方示例代码 from langgraph.checkpoint.memory import MemorySaver from langgraph.graph import START, MessagesState, StateGraph# 可以理解为:定义一个流程,这个流程中用到的数据类型是Messages。 <---定义一个有向图&…...
JumpServer基础功能介绍演示
堡垒机可以让运维人员通过统一的平台对设备进行维护,集中的进行权限的管理,同时也会对每个操作进行记录,方便后期的溯源和审查,JumpServer是由飞致云推出的开源堡垒机,通过简单的安装配置即可投入使用,本文…...
Spring @Bean注解使用场景二
bean:最近在写一篇让Successfactors顾问都能搞明白的sso的逻辑的文章,所以一致在研究IAS的saml2.0的协议,希望用代码去解释SP、idp的一些概念,让顾问了解SSO与saml的关系,在github找代码的时候发现一些代码的调用关系很难理解&…...
创业者认知、思辨、成长指南
一、为什么要创业? 1、因为没有家产继承和家庭关系,不能躺平; 比如父母留下了大量的财富,靠钱生钱吃利息,收租,做做投资这些形式,就可以活得很好; 再比如父母或者血亲有资源&#…...
ECharts中Map(地图)样式配置、渐变色生成
前言 ECharts是我们常用的图表控件,功能特别强大,每次使用都要查API比较繁琐,这里就记录开发中常用的配置。 官网:https://echarts.apache.org/handbook/zh/get-started 配置项:https://echarts.apache.org/zh/opti…...
PostgreSQL存储管理体系结构学习笔记2
1.表和元组的组织方式 在PostgreSQL中,同一个表中的元组按照创建顺序依次插入到表文件中。元组之间不进行关联,这样的表文件称之为堆文件。PostgreSQL系统中包含了四种堆文件:普通堆,临时堆,序列,TOAST表。…...
【PTA题目解答】7-3 字符串的全排列(20分)next_permutation
1.题目 给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。 输入格式: 一行,一个字符串,长度不大于8。 输出格式: 输出所有全排列,每行一种排列形式,字典序从小到大。 输入样例…...
SOME/IP:用Python实现协议订阅、Offer、订阅ACK与报文接收
文章目录 前言一、代码层次二、详细代码1. eth_scapy_sd.py2、eth_scapy_someip.py3、network_define.py4、packet_define.py5、unpack_define.py6、someip_controller.py 前言 1、需要pip安装scapy库 2、需要修改根据实际情况配置network_define.py 3、执行someip_controller…...
嵌入式八股ARM篇
前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…...
剑指 Offer II 087. 复原 IP
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20087.%20%E5%A4%8D%E5%8E%9F%20IP/README.md 剑指 Offer II 087. 复原 IP 题目描述 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址…...
RCE-Labs超详细WP-Level10(无字母命令执行_二进制整数替换)
温馨提示 这关涉及的知识点较多, 写的很长, 中间留了很多错误引导(本人在实验时遇到的问题, 或许你们也会遇到), 在后文才逐步解释源码分析 跟前几关一样, 更改了 WAF 的过滤字段这个关卡, 只有0, 1, (单引号), $, <, \ , ( , )可以用解题分析(实验这些命令, 可以先在自己本…...
数据结构(泛型)
1,装箱 int i 10;Integer j Integer.valueOf(i);2.拆箱 Integer i 10;int j i.intValue(); 3.自动装箱 int i 10;Integer j i;int i 10;Integer j (Integer) i; 4,自动拆箱 Integer i 10;int j i;Integer i 10;int j (int) i; 有一段代码需要解析一下: …...
Android Dagger2 框架辅助工具模块深度剖析(六)
一、引言 在 Android 开发领域,依赖注入(Dependency Injection,简称 DI)作为一种至关重要的设计模式,能显著降低代码间的耦合度,提升代码的可测试性与可维护性。Dagger2 作为一款强大的依赖注入框架&#…...
LVGL第三方库的使用(中文库)
一、第三方库文档 3rd party libraries(第三方库) — LVGL 文档 FreeType 中文字库 SDL 模拟器使用freetype中文字库 1.开启字库 2.安装freetype 字库 sudo apt-get update sudo apt-get install libfreetype6-dev 3.修改makefile 添加字库 4.显示中…...