【数据挖掘在量化交易中的应用:特征发现与特征提取】

好的,我将撰写一篇关于金融领域数据挖掘的技术博客,重点阐述特征发现和特征提取,特别是在量化交易中的应用。我会提供具体的实操步骤,并结合Python和TensorFlow进行代码示例。

完成后,我会通知您进行查看。

数据挖掘在量化交易中的应用:特征发现与特征提取

1. 概述

在金融领域的量化交易中,数据挖掘扮演着极其重要的角色。量化交易依赖于对海量金融数据的分析,从中寻找规律和模式,以支撑交易决策。数据挖掘技术可以帮助交易员和研究人员从嘈杂的数据中提取有意义的信号,从而形成交易策略的基础。在这个过程中,特征发现特征提取是两个关键环节。

  • 特征发现(Feature Discovery)指的是从数据中发现潜在的、有预测能力的指标或属性。简单来说,就是确定“哪些因素可能影响资产价格或收益”。在量化交易中,这通常需要结合金融领域的专业知识和数据分析方法,去寻找那些对股票走势、风险等有解释力的特征。例如,我们可能想知道某只股票的价格趋势是否受到近期成交量变化的影响,那么“成交量的变化率”就可能成为一个特征候选。

  • 特征提取(Feature Extraction)指的是从原始数据中计算或提炼出可用于模型的特征变量。原始金融数据可能包括价格序列、交易量序列、新闻文本等等,这些数据通常维度高且结构复杂,直接用于建模效果不佳。特征提取就是将这些原始数据转换为模型可接受的输入形式,并强化其中的信息、减少噪声。举例来说,我们可以从原始的股票价格序列中计算“5日均线”作为特征输入模型。特征提取还包括降维过程,即在不损失太多信息的情况下减少特征的数量,以简化模型、避免过拟合。

综上,特征发现侧重于找出哪些特征“值得用”,特征提取侧重于构建这些特征并将其应用于模型。在量化交易中,二者密不可分:只有先发现了有价值的特征,才能进一步将其提取并用于模型训练;同时,通过提取特征并验证其效果,又能反过来评估这些特征是否真正有用。

2. 特征发现

金融市场生成了丰富多样的数据,例如股票的价格(开盘价、收盘价、最高价、最低价)、交易量、衍生出的技术指标(如移动平均线、相对强弱指数等)、基本面指标、新闻情绪等等。特征发现的任务就是在这海量数据中发掘出对预测有帮助的信息片段。这一过程通常包括以下方面:

  • 领域知识驱动的特征:许多金融特征最初来自专业人士的经验和直觉。例如,技术分析领域总结出大量指标:

    • 移动平均线(MA):一段时间内价格的平均值,用于平滑短期波动,刻画趋势方向。常见的有5日、20日、60日均线等。
    • 指数移动平均线(EMA):对近期数据赋予更高权重的均线,反应更敏捷的趋势变化。
    • 相对强弱指数(RSI):基于一段时间内上涨和下跌幅度比例的振荡指标,用于判断市场超买或超卖状态。
    • 移动平均趋向指数(MACD):利用长短两条EMA的差异来判断价格趋势的强弱转换。
    • 布林带(Bollinger Bands):由移动平均线和其上下若干标准差构成的带状区域,反映价格的波动区间。
    • 成交量指标:如成交量移动平均、**OBV(能量潮)**等,用于衡量资金流入流出和趋势的配合度。
    • 波动率指标:如一定周期内收益率的标准差(历史波动率)或平均真实波幅(ATR),用于衡量市场的剧烈程度。

    以上这些都是经过长期市场检验而被认为有意义的特征。例如,“均线金叉死叉”(短期均线上穿或下穿长期均线)常被视为买卖信号,就是基于移动平均线特征的简单交易规则。领域知识为我们提供了特征候选池,在构建量化策略时往往会优先考虑这些常见特征。

  • 统计分析:除了依靠先验经验,我们也可以用数据驱动的方法来发现新的特征或验证特征有效性。基本的做法包括:

    • 计算各候选特征与目标变量(如下周期收益)的相关系数,筛选出相关性较高的特征。
    • 使用假设检验Granger因果检验等方法,评估某个特征在统计上是否对未来价格有显著的预测能力。
    • 分析特征分布的差异,例如在历史上股票上涨日和下跌日分别具有怎样的平均特征值,从而发现特征与市场走势的关系。

    例如,通过统计分析,研究人员可能发现“在高成交量(相对于平均成交量)出现后,股票次日上涨的概率更高”,由此确认“成交量突增”可以作为一个有效特征信号。

  • 时间序列分析:金融数据本质上是时间序列数据。利用时间序列模型可以发现数据自身的动态模式:

    • 构建ARIMA模型检查价格或收益序列的自相关性和季节性。如果发现显著的自相关,那么过去价格本身就可以作为特征(例如昨天的收益率对预测明天的收益率有影响)。
    • 应用周期分解谱分析来发现周期成分。例如股市可能存在周几效应或季度效应,这些周期性的模式也可以看作特征(如“星期一效应”)。
    • 检测结构性变化,如用CUSUM检测价格波动的变化点,从而定义出“事件特征”(比如某天突破了一个重要价位区间)。
  • 降维和因子分析:当我们手头已经有大量潜在特征时,可以使用降维手段寻找最具有代表性的特征组合:

    • 主成分分析(PCA)是一种常用方法。它可以将多个相关特征线性组合,提取出几个主要成分来解释大部分数据变化。在金融中,PCA常被用于发现隐含因子。例如,对一组股票收益率做PCA,可能提取出的主成分对应市场整体走势、行业因素等,这些主成分本身可以作为新的特征用于预测或风险分析。
    • 因子分析/特征因子:扩展PCA的概念,在量化投资中,有“因子库”概念,即用基本面指标或技术指标构建各种因子,然后通过多元回归或机器学习确定哪些因子对股票超额收益有解释力。这也是一种特征发现的过程,只不过特征被称为“因子”。

综上所述,特征发现通常是一个反复迭代的过程:结合金融理论提出假设 -> 从数据中验证或寻找模式 -> 确认有用的特征。一个有效的特征能帮助模型更好地区分未来上涨或下跌的情形,或者更准确地预测未来的收益分布。因此,花时间在特征发现上往往能显著提升量化交易策略的表现。

3. 特征提取

一旦确定了要研究的特征,我们就需要从原始数据中提取这些特征用于建模。特征提取可以是简单的计算,也可以涉及复杂的算法和模型。下面从浅入深介绍特征提取的方法:

  • 手工计算特征:对于已知的特征定义,提取过程通常直接依据数学公式或逻辑。例如:

    • 计算移动平均线:给定价格序列,5日均线 = 最近5天收盘价之和 / 5。
    • 计算收益率或涨跌幅:今天的收益率 = (今天收盘价 - 昨天收盘价) / 昨天收盘价。
    • 计算波动率:过去20日收益率的标准差即为20日历史波动率。

    使用编程工具(如Python的pandas库)可以方便地计算这些指标。下面的代码演示了如何从价格序列计算一些常见技术指标作为特征:

    import pandas as pd# 假设我们有一个DataFrame存储了股票历史数据
    data = pd.DataFrame({'Close': [...],   # 收盘价序列'Volume': [...]   # 成交量序列
    })# 计算5日移动平均线
    data['MA5'] = data['Close'].rolling(window=5).mean()
    # 计算20日移动平均线
    data['MA20'] = data['Close'].rolling(window=20).mean()
    # 计算5日均量
    data['Vol5'] = data['Volume'].rolling(window=5).mean()
    # 计算相对强弱指数(14日)
    delta = data['Close'].diff()  # 今日涨跌
    up = delta.clip(lower=0).fillna(0)
    down = -delta.clip(upper=0).fillna(0)
    avg_gain = up.rolling(window=14).mean()
    avg_loss = down.rolling(window=14).mean()
    rs = avg_gain / avg_loss
    data['RSI14'] = 100 - (100 / (1 + rs))
    

    上述代码中,我们利用滚动窗口计算了均线、均量和RSI等指标。这些提取出的特征列可以直接用于后续的模型训练。例如,可以用当前的MA5MA20值作为模型输入,预测未来价格走势。手工计算特征的过程相对直接,但需要我们预先知道要计算哪些特征。

  • 机器学习自动特征提取:在某些情况下,我们并不知道哪些特征最有效,或者原始数据过于复杂(例如高频订单簿数据、新闻文本)。这时可以利用机器学习模型自身来自动提取特征。典型的例子包括:

    • 长短期记忆网络(LSTM)等序列模型:LSTM是一种特殊的循环神经网络,非常适合处理时间序列数据。我们可以将过去一段时间的价格序列作为输入,让LSTM网络自行学习序列中的模式。LSTM的隐藏层状态实际上就是从原始序列提取的动态特征,不需要我们显式提供技术指标,网络会学到比如“近期趋势方向”“波动程度”等隐含特征。例如,用过去10天的收盘价序列来预测第11天的价格涨跌,LSTM模型可能会自动学会像移动平均、动量等类似的概念,只不过这些特征是以网络权重形式隐含存在的。
    • 卷积神经网络(CNN):CNN在图像领域广泛应用,但也可用于金融时间序列的特征提取。如果我们将价格序列看作一维“图像”,卷积网络的滤波器可以检测局部模式(例如连续几天内的价格形态,类似于技术分析中的K线形态识别)。CNN提取的特征可能对应于某种模式的出现频率或强度,这些信息对预测未来走势有用。此外,一些研究将金融时间序列转换为图像(比如所谓的“资金流向图”或“热度图”),然后用CNN提取图像特征,也是换一种角度进行特征提取的方法。
    • 基于Transformer的模型:近年来,Transformer模型(原本用于自然语言处理)也被引入时间序列分析。Transformer可以通过自注意力机制从序列中提取复杂的时序特征,例如关注哪些时间步对预测最重要。但由于其复杂性和对数据量的要求较高,在实际量化交易中应用还在探索中。
  • 降维技术:当我们已经有大量特征时,使用降维可以提取信息浓缩的低维特征:

    • 主成分分析(PCA):前面提到,PCA能将原始特征线性组合成若干主成分。我们可以用PCA提取出的主成分作为新的特征输入模型。例如,有10个相关的技术指标,通过PCA得到2个主要成分,就大大减少了特征维度。这既降低了计算复杂度,也可能提高模型的泛化能力(因为去除了冗余特征)。
    • 自编码器(Autoencoder):这是利用神经网络实施降维的一种方法。自编码器包含“编码器”和“解码器”两部分:编码器将高维输入压缩到低维的“编码”表示,解码器则将其还原回高维。训练自编码器的过程就是让输出尽可能重建输入,从而迫使编码器学到一个能最大程度表示原始数据特征的低维表示。相比PCA线性变换,自编码器可以学习非线性的特征组合,表达能力更强。

下面是一个使用Python和TensorFlow(Keras接口)构建自编码器进行特征提取的代码示例。假设我们已经有一个数据集X,其中每一行包含了一系列提取的特征(例如多个技术指标数值),我们希望将特征维度从X.shape[1]降至一个更小的维度(编码维度),得到压缩的特征表示。

import numpy as np
from tensorflow import keras
from tensorflow.keras import layers# 假设 X 是形状为 (样本数, 特征数) 的二维numpy数组,包含原始高维特征数据
X = np.array([...])  # 这里用实际数据替代 [...]# 定义自编码器结构
input_dim = X.shape[1]       # 原始特征维度
encoding_dim = 3             # 压缩到3维(可根据需要调整)# 输入层
input_layer = keras.Input(shape=(input_dim,))
# 编码层:将输入压缩到encoding_dim维
encoded_layer = layers.Dense(encoding_dim, activation='relu')(input_layer)
# 解码层:从编码的低维表示重建回原始维度
decoded_layer = layers.Dense(input_dim, activation='linear')(encoded_layer)# 构建自编码器模型(输入->输出)
autoencoder = keras.Model(inputs=input_layer, outputs=decoded_layer)
# 构建仅包含编码器的模型(输入->编码表示),用于提取特征
encoder = keras.Model(inputs=input_layer, outputs=encoded_layer)# 编译模型
autoencoder.compile(optimizer='adam', loss='mse')# 训练自编码器,让输出尽量重建输入
autoencoder.fit(X, X, epochs=50, batch_size=32, shuffle=True, verbose=0)# 使用训练好的编码器提取低维特征
X_compressed = encoder.predict(X)
print("原始特征维度:", input_dim)
print("压缩后特征维度:", X_compressed.shape[1])

在上面的代码中,我们将原始特征维度通过编码层压缩到了3。这相当于自动找出了3个隐藏因素来表示原有的数据特征结构。训练完成后,用encoder.predict(X)即可得到每个样本的3维新特征(保存在X_compressed中)。这些新特征可以进一步用于聚类分析、可视化,或作为输入特征喂给下游的机器学习模型。代码最后打印了原始和压缩后的特征维度,以确认降维成功。

需要注意的是,自编码器的训练是无监督的,只利用了数据自身重构误差作为训练信号。因此,自编码器提取的特征侧重于最大程度保留信息,但不一定与预测目标强相关。在实践中,可能需要结合监督信号(如使用带有目标的深度学习模型,或者对提取特征进行相关性分析)来选择最有用的特征。

通过上述各种技术,我们可以将大量、复杂的原始金融数据转化为精炼的特征,为建立有效的预测模型打下坚实基础。

4. 案例分析

为了更具体地说明特征发现和特征提取的过程,本节将通过一个简单的量化交易策略案例,演示从原始数据开始如何逐步构建特征、训练模型并生成交易信号。

案例背景:我们假设关注某只股票的日频交易数据,希望构建一个模型来预测该股票明日的涨跌方向,并据此制定交易策略(次日看涨则买入,看跌则卖出或空仓)。基于特征发现的经验,我们怀疑短期动量短期波动率可能是有效的预测特征:直觉上,如果最近几天股价持续上涨(动量为正),则明天继续上涨的概率可能较高;而波动率则代表不确定性大小,可能影响我们对信号的信心。为此,我们选取5日动量(近期价格涨跌幅度)和5日波动率作为特征输入模型。

我们将完整流程拆分如下:

  1. 数据获取:获取股票历史数据(日期、收盘价、成交量等)。在本例中,为了专注于流程,我们将模拟一段股票价格序列来代替真实数据。
  2. 数据预处理:清洗数据,处理缺失值、异常值,并计算每日收益率等基础序列。本例中模拟数据相对干净,预处理主要是计算收益等。
  3. 特征发现:通过对模拟数据的探索,我们确定使用5日动量和5日波动率作为预测特征。
  4. 特征提取:根据定义从原始价格序列计算5日动量和波动率特征。
  5. 模型训练:使用提取的特征作为输入,训练一个分类模型来预测明日涨跌(上涨=1/下跌=0)。这里我们使用一个简单的神经网络模型(使用TensorFlow Keras)进行演示。
  6. 策略评估:在测试数据上评估模型预测的准确率,并通过统计策略在测试集上的收益来评估策略有效性(本例将输出预测准确率作为指标)。

下面的代码实现了上述流程:

import numpy as np
from tensorflow import keras
from tensorflow.keras import layers# 1. 模拟数据获取:生成模拟的股票价格序列
np.random.seed(42)
N = 1000  # 天数
# 生成带有轻微上升趋势和动量效应的模拟价格序列
price = np.zeros(N)
price[0] = 100  # 初始价格
for t in range(1, N):# 模拟每日收益:上一日收益的部分动量 + 随机扰动(均值0,标准差1)prev_return = (price[t-1] - price[t-2])/price[t-2] if t>1 else 0ret = 0.5 * prev_return + np.random.normal(0, 1) * 0.01  # 假设0.5的动量系数,加上小随机波动price[t] = price[t-1] * (1 + ret)  # 根据收益更新价格# 2. 数据预处理:计算每日收益率序列
returns = np.zeros(N)
returns[1:] = (price[1:] - price[:-1]) / price[:-1]  # 收益率=价格变动/昨收# 3. 特征发现:假设通过分析,我们决定使用5日动量和5日波动率
#    5日动量可以用当前价与5日前价之差的百分比表示;5日波动率用过去5日收益率的标准差表示。# 4. 特征提取:计算5日动量和5日波动率特征
window = 5
mom5 = (price[window:] - price[:-window]) / price[:-window]        # 5日动量(5日累计涨跌幅)
vol5 = np.array([returns[i-window:i].std() for i in range(window, N)])  # 5日波动率(收益率标准差)# 对齐特征和标签的数据长度(前window天因无法计算5日特征而被舍弃)
X = np.column_stack([mom5, vol5])   # 特征矩阵X
y = (returns[window:] > 0).astype(int)   # 标签:明日是否上涨,1表示上涨,0表示下跌# 将数据分为训练集和测试集(例如前80%为训练,后20%为测试)
train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]# 5. 模型训练:构建并训练一个简单的神经网络分类模型
model = keras.Sequential([layers.Dense(16, activation='relu', input_shape=(X.shape[1],)),  # 隐含层,有16个神经元layers.Dense(1, activation='sigmoid')  # 输出层,1个神经元,用sigmoid输出概率
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=20, batch_size=32, verbose=0)  # 训练20个epoch# 6. 策略评估:在测试集上评估模型预测准确率
loss, accuracy = model.evaluate(X_test, y_test, verbose=0)
print(f"模型在测试集上的预测准确率: {accuracy*100:.2f}%")

让我们逐步解释这段代码:

  • 数据模拟:我们用一个带随机性的过程生成了price序列。在生成过程中,引入了一定的动量效应ret = 0.5 * prev_return + ...表示今日的收益率部分来自昨日收益(动量因子0.5),再加上一些随机噪声(这里乘以0.01保证波动率适中)。这样生成的价格序列既有随机波动,也存在短期趋势可循,方便演示特征有效性。

  • 计算收益率returns数组存储每日的百分比收益率,作为后续计算波动率和制定标签的基础。

  • 特征提取:计算5日动量mom5和5日波动率vol5

    • 5日动量 mom5 的计算:取当前价与5天前价格的比值减1,即 (price[t] / price[t-5]) - 1,在代码中等价为 (price[t] - price[t-5]) / price[t-5]。这表示过去5天总体涨了多少。动量为正表示上涨,动量为负表示下跌。
    • 5日波动率 vol5 的计算:取过去5天returns的标准差作为波动大小的度量。波动率高意味着市场剧烈波动,不确定性大。
  • 准备训练数据:由于前window天无法计算5日特征,我们舍弃最开始的窗口期,使得特征矩阵X和标签y长度一致。然后将数据集按时间切分为训练集和测试集(这里简单地用前80%天作为训练,后20%作为测试,这种方法在时间序列上相当于用较早的数据训练,在较新的数据测试)。

  • 模型构建:使用Keras顺序模型构建了一个两层全连接神经网络。隐含层有16个节点,使用ReLU激活函数;输出层1个节点,使用Sigmoid激活输出预测为上涨的概率。由于是二分类问题,损失函数选用二元交叉熵binary_crossentropy,优化器使用Adam,评估指标选准确率。

  • 模型训练:用训练集的数据进行了20轮(epochs)的训练,verbose=0表示不输出训练过程日志(避免干扰文章重点)。在实际中,可以通过验证集调整epoch数量以防止过拟合。

  • 模型评估:在测试集上评估模型,获取损失值和准确率,并打印出准确率百分比。准确率表示模型预测明日涨跌方向的正确率。例如,输出若为“模型在测试集上的预测准确率: 60.00%”,意味着在测试集上有60%的日子模型判断对了涨跌方向。

策略应用:有了上述模型,我们就可以制定交易策略:每天收盘后根据当日特征预测次日涨跌。如果模型预测上涨概率大于50%(即模型输出 > 0.5,标签为1的情况),则视为看多信号,在收盘时买入并持有下一交易日;如果预测下跌(标签为0),则卖出或空仓观望。这样的策略本质上是根据模型信号在第二天开盘建立头寸,持有一天,在下一个收盘平仓。通过这种方式,我们将数据挖掘和模型预测得到的信号转化为了具体的交易动作。

策略评估:除了预测准确率之外,在真实策略评估中我们更关心资金收益表现。可以计算策略在测试期的累计回报、最大回撤、夏普比率等指标。以本例的模型为基础,我们可以进一步计算,如果在每次模型预测涨时满仓买入,预测跌时空仓,那么一段时间下来策略的收益如何。由于我们是用模拟数据,且未考虑交易成本,这里不展开计算实际收益。但在实务中,假如模型预测有一定准确率且胜率高于随机猜测,再辅以良好的资金管理和止损机制,就有可能构建出正期望收益的策略。

值得注意的是,这个案例非常简化,主要目的是演示流程。在真实世界中,我们需要:

  • 使用更加丰富和可靠的数据源(例如通过API获取多年历史数据甚至包含多资产、多频率的数据)。
  • 提取更多元的特征(包括基本面信息、宏观经济指标、市场情绪等)。
  • 进行更严格的模型验证(如交叉验证、在不同时期和市场测试)来确保特征和模型的稳健性,而不只是简单地用后20%数据做测试。
  • 考虑交易成本、滑点等实际因素对策略收益的影响。

通过这个案例,我们可以看到,从数据挖掘角度出发,特征的选择和提取直接决定了模型的输入质量。哪怕模型本身并不复杂,如本例仅用了一个小型神经网络,好的特征也能赋予模型较强的预测能力。

5. 结论

数据挖掘中的特征发现和特征提取,是量化交易研究中提升策略表现的关键步骤。回顾全文,我们可以提炼出以下要点:

  • 特征是量化模型的基石:没有合适的特征,哪怕再高级的算法也难有作为。在金融领域,特征可以来自价格、成交量等市场数据,也可以来自基本面、新闻等非结构化数据。优秀的量化策略往往建立在深思熟虑的特征之上。

  • 特征发现需要融合专业知识与数据分析:金融市场具有自身的规律和噪声,依靠领域知识能够快速定位可能有效的特征方向,再通过数据统计验证其有效性。另一方面,数据驱动的方法(相关分析、PCA、机器学习等)可以从海量信息中挖掘出人类直觉难以发现的模式。两者相辅相成,有助于全面搜寻阿尔法信号。

  • 特征提取确保模型吃“营养”:通过特征提取,我们把原始数据转化为模型可利用的信息。这一步包括计算显式指标和应用算法自动提炼模式。良好的特征提取可以去除数据中的随机噪声,突出关键信息,从而有效降低模型学习难度,提升预测性能。

  • 案例启示:简单案例表明,即使使用基础的特征和模型,只要信息有效,模型就能在一定程度上预测市场方向并形成交易策略。在复杂的市场中,我们可以扩展这种思路,融合数十上百个特征并使用更复杂的模型(例如集成学习、深度神经网络)以捕捉更细微的信号。

  • 挑战与改进方向:未来,特征发现与提取在量化交易中依然充满挑战。一方面,市场在变化,过去有效的特征可能失效,需要不断发掘新的特征或对旧特征进行改进(例如引入新的数据源,如社交媒体情绪、搜索引擎趋势等作为特征)。另一方面,随着人工智能的发展,自动化特征工程(AutoML for feature engineering)有望减轻研究人员的负担,让算法自己从海量数据中探索特征空间。此外,提高特征和模型的解释性也很重要,在追求策略收益的同时,需要了解模型是基于哪些信号在决策,以防范潜在风险。最后,注重模型和特征的稳健性,避免过拟合于历史数据,也是持续改进的一个方向。

总之,数据挖掘为量化交易注入了源源不断的动力,而特征发现和特征提取则是将原始数据转化为交易智慧的桥梁。掌握并善用这些技术,能帮助量化交易策略在激烈的市场竞争中取得优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在视频中提取关键帧?

在视频处理中,提取关键帧是一项常见的任务。下面将介绍如何基于FFmpeg和Python,结合OpenCV库来实现从视频中提取关键帧的功能。 实现思路 使用FFmpeg获取视频的关键帧时间戳:FFmpeg是一个强大的视频处理工具,可以通过命令行获取…

九、数据治理架构流程

一、总体结构 《数据治理架构流程图》(Data Governance Architecture Flowchart) 水平结构:流程图采用水平组织,显示从数据源到数据应用的进程。 垂直结构:每个水平部分进一步划分为垂直列,代表数据治理的…

Docker 搭建 Gitlab 服务器 (完整详细版)

参考 Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab-CSDN博客 Docker 安装 (完整详细版)_docker安装-CSDN博客 Docker 日常命令大全(完整详细版)_docker命令-CSDN博客 1、Gitlab镜像 # 查找Gitlab镜像 docker search gitlab # 拉取Gitlab镜像 docker pull gitlab/g…

Spring MVC 框架学习笔记:从入门到精通的实战指南

目录 1. Spring MVC 概述 2. Spring MVC 项目搭建 3. Spring MVC 执行流程 4. Spring MVC RequestMapping 注解 5. Spring MVC 获取请求参数 6. Spring MVC 常见注解 7. Spring MVC 响应处理 8. Spring MVC SSM 整合 9. Spring MVC 作用域传参 10. Spring MVC 上传 1…

RK3568开发笔记-AD7616调试笔记

目录 前言 一、AD7616介绍 高分辨率 高速采样速率 宽模拟输入范围 集成丰富功能 二、原理图连接 三、设备树配置 四、内核驱动配置 五、AD芯片测试 总结 前言 在嵌入式数据采集领域,将模拟信号精准转换为数字信号至关重要。AD7616 作为一款性能卓越的 16 位模数转换器…

【对话推荐系统】Towards Topic-Guided Conversational Recommender System 论文阅读

Towards Topic-Guided Conversational Recommender System 论文阅读 Abstract1 Introduction2 Related Work2.1 Conversation System2.2 Conversational Recommender System2.3 Dataset for Conversational Recommendation 3 Dataset Construction3.1 Collecting Movies for Re…

ASP.NET Core 8.0学习笔记(二十八)——EFCore反向工程

一、什么是反向工程 1.原则:DBFirst 2.反向工程:根据数据库表来反向生成实体类 3.生成命令:Scaffold-DbContext ‘连接字符串’ 字符串示例: Server.;DatabaseDemo1;Trusted_Connectiontrue; MultipleActiveResultSets true;Tru…

springcloud和dubbo的区别

Spring Cloud和Dubbo作为微服务架构中非常流行的两个框架,它们在多个方面存在显著的区别。以下是对两者区别的详细分析: 1. 初始定位和生态环境 Spring Cloud:定位为微服务架构下的一站式解决方案,依托于Spring平台,…

【大模型LLM】DeepSeek LLM Scaling Open-Source Language Models with Longtermism

深度探索LLM:以长期主义扩展开源语言模型 0.论文摘要 开源大语言模型(LLMs)的快速发展确实令人瞩目。然而,以往文献中描述的扩展规律得出了不同的结论,这为LLMs的扩展蒙上了一层阴影。我们深入研究了扩展规律&#…

C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载

下载地址<------完整源码 在数字化转型加速的背景下&#xff0c;企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台&#xff0c;其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下&#xff0c;C#开发者需要耗费大…

Qt常用控件之多行输入框QTextEdit

多行输入框QTextEdit QTextEdit 是一个多行输入框控件&#xff0c;支持富文本和 markdown 格式&#xff0c;当文本内容超出编辑框的范围时能自动提供滚动条。 QPlainTextEdit 是只支持富文本格式的多行输入框&#xff0c;属性和使用上与 QTextEdit 几乎没有区别。 QTextEdit属…

VC++零基础入门之系列教程 【附录E MFC快速参考指南】

附录E MFC快速参考指南 E.1 创建窗口 使用M F C CWnd wnd; W n d . C r e a t e E x ( E xSt y l e , C l a s s N a m e , Wi n d o w N a m e , S t y l e , x , y, Wi d t h , H e i g h t , P a r e n t , M e n u , P a r a m ) ; 使用A P I HWND hwnd=::CreateWi n d …

【前端】react+ts 轮播图的实现

一、场景描述 在很多网站的页面中都有轮播图&#xff0c;所以我想利用react.js和ts实现一个轮播图。自动轮播图已经在前面实现过了&#xff0c;如&#xff1a;https://blog.csdn.net/weixin_43872912/article/details/145622444?sharetypeblogdetail&sharerId145622444&a…

python与C系列语言的差异总结(4)

如果具有传统编译型语言的经验&#xff0c;大家可能会对是否使用字典而犹豫不决&#xff0c;担心字典的效率比列表或数组低。事实上Python字典的执行速度已经相当快了。Python语言的许多内部特性都依赖于字典&#xff0c;为提高字典的效率已经投入了大量的心血。Python的所有数…

[Web 安全] 反序列化漏洞 - 学习笔记

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] Web 安全攻防 - 学习手册-CSDN博客 0x01&#xff1a;反序列化漏洞 — 漏洞介绍 反序列化漏洞是一种常见的安全漏洞&#xff0c;主要出现在应用程序将 序列化数据 重新转换为对象&#xff08;即反序列化&#xff09;的过程中…

深入理解C语言中的位段

在C语言编程中&#xff0c;我们常常会遇到需要对内存进行精细控制的场景&#xff0c;位段&#xff08;bit - field&#xff09;便是C语言提供的一种强大工具&#xff0c;它允许我们在一个字节或多个字节内对数据进行按位的定义和操作&#xff0c;极大地提高了内存使用效率。 一…

实现使用RBF(径向基函数)神经网络模拟二阶电机数学模型中的非线性干扰,以及使用WNN(小波神经网络)预测模型中的非线性函数来抵消迟滞影响的功能

下面将详细介绍如何实现使用RBF&#xff08;径向基函数&#xff09;神经网络模拟二阶电机数学模型中的非线性干扰&#xff0c;以及使用WNN&#xff08;小波神经网络&#xff09;预测模型中的非线性函数来抵消迟滞影响的功能。我们将按照以下步骤进行&#xff1a; 步骤1&#x…

Grouped-Query Attention(GQA)详解: Pytorch实现

Grouped-Query Attention&#xff08;GQA&#xff09;详解 Grouped-Query Attention&#xff08;GQA&#xff09; 是 Multi-Query Attention&#xff08;MQA&#xff09; 的改进版&#xff0c;它通过在 多个查询头&#xff08;Query Heads&#xff09;之间共享 Key 和 Value&am…

ReentrantLock 用法与源码剖析笔记

&#x1f4d2; ReentrantLock 用法与源码剖析笔记 &#x1f680; 一、ReentrantLock 核心特性 &#x1f504; 可重入性&#xff1a;同一线程可重复获取锁&#xff08;最大递归次数为 Integer.MAX_VALUE&#xff09;&#x1f527; 公平性&#xff1a;支持公平锁&#xff08;按等…

基于GO语言的车牌识别api技术-港澳车牌文字识别

随着科技的飞速发展&#xff0c;智能化管理逐渐渗透到我们生活的方方面面。车牌识别技术作为智能交通的重要组成部分&#xff0c;不仅极大提升了交通管理的效率&#xff0c;还为市民出行带来了更多便利。而港澳地区的车牌识别技术&#xff0c;凭借其高效、精准、快速的特点&…