从卦象到特征工程:传统文化中的特征提取直觉

📅 2026/7/8 15:14:35
从卦象到特征工程:传统文化中的特征提取直觉
从卦象到特征工程传统文化中的特征提取直觉一、六十四卦的特征矩阵——比 one-hot 优雅了三千年的编码体系《易经》六十四卦由六条爻线组成每爻分阴阳。如果从特征工程的视角看这是一个 64 个样本、6 个特征、每个特征 2 种取值的特征矩阵。这不是穿凿附会。八卦到六十四卦的生成过程——两两叠加形成新卦——本质上是一种组合特征生成。和现代特征工程中的多项式特征Polynomial Features在精神上高度一致。更有意思的是卦与卦之间的关系不是简单的欧氏距离。乾卦六爻全阳到坤卦六爻全阴有六步之遥——这和汉明距离Hamming Distance的概念完全吻合。在实际项目中这种对应关系可以产生直接的工程价值。比如在计算两卦相似度时用汉明距离走 6 步远比用余弦相似度在全 64 维空间里计算更直观、更高效。二、卦象变化的数学本质离散拓扑空间中的有限状态机把六十四卦看作一个离散拓扑空间每个卦是一个点状态每变化一爻从一个卦迁移到另一个卦状态转移六十四卦构成一个有 2^6 64 个节点的超立方体图6-维超立方体在这个空间中任意两个卦之间的距离等于它们不同爻的数量——即汉明距离。graph TD A[64 卦 64 个特征向量] -- B[每卦 6 爻 6 维特征] B -- C{爻的属性} C -- D[阴阳: 二元特征] C -- E[爻位: 位置编码] C -- F[乘承比应: 关系特征] D -- G[二元特征矩阵: 64 × 6] E -- G F -- G G -- H{特征转换} H -- I[One-Hot: 64 × 128] H -- J[爻变图: 384 条边] H -- K[二进制编码: 00-63] I -- L[NLP 应用: 文本分类特征] J -- M[Graph NN 应用: 节点分类] K -- N[序列建模: 状态预测] L -- O[特征维度爆炸需降维] M -- P[图结构保留关系信息] N -- Q[紧凑但丢失关系特征]见证奇迹的时刻当把六十四卦编码为 64 张图的 Graph Neural Network 节点时卦与卦之间的相生相克关系自动变成了图的边——完全不用额外特征工程。三、卦象特征提取的工程化实现以下实现了三种不同粒度的卦象编码方案import numpy as np from typing import List, Dict, Tuple class HexagramEncoder: 六十四卦特征编码器 —— 从二进制到图嵌入 # 六十四卦名称按二进制顺序排列 HEXAGRAM_NAMES [ 坤, 复, 师, 临, 谦, 明夷, 升, 泰, 豫, 震, 解, 归妹, 小过, 丰, 恒, 大壮, 比, 屯, 坎, 节, 蹇, 既济, 井, 需, 萃, 随, 困, 兑, 咸, 革, 大过, 夬, 剥, 颐, 蒙, 损, 艮, 贲, 蛊, 大畜, 晋, 噬嗑, 未济, 睽, 旅, 离, 鼎, 大有, 观, 益, 涣, 中孚, 渐, 家人, 巽, 小畜, 否, 无妄, 讼, 履, 遁, 同人, 姤, 干, ] staticmethod def binary_encode(hexagram_name: str) - np.ndarray: 方法1二进制编码 设计原因将卦象映射到 0~63 的整数用 6-bit 二进制表示。 这是最紧凑的编码方式保留了逐爻的比较能力。 汉明距离 不同爻的数量。 idx HexagramEncoder.HEXAGRAM_NAMES.index(hexagram_name) # 转 6-bit 二进制从低位到高位对应从下到上的爻 bits [(idx i) 1 for i in range(6)] return np.array(bits, dtypenp.float32) staticmethod def one_hot_encode(hexagram_name: str) - np.ndarray: 方法2独热编码 设计原因每个卦有唯一的 64 维独热向量。 适合作为分类任务的标签编码保留了所有卦之间的独立平等性。 缺点丢失了卦与卦之间的结构关系。 idx HexagramEncoder.HEXAGRAM_NAMES.index(hexagram_name) vec np.zeros(64, dtypenp.float32) vec[idx] 1.0 return vec staticmethod def relational_features(hexagram_name: str) - Dict[str, float]: 方法3关系特征提取 设计原因从卦象中提取结构化特征 - 阴阳比例阳爻数量表征刚柔属性 - 中位爻二爻和五爻中位的阴阳状态 - 互体二三四爻和三四五爻形成的两个交互卦 bits HexagramEncoder.binary_encode(hexagram_name) # 阳爻数量 —— 衡量卦的阳刚程度 yang_count int(bits.sum()) # 中位爻状态二爻、五爻 # 设计原因爻位特征保留位置信息 # 二爻和五爻在传统解释中具有特殊意义居中得正 middle_yang_2 float(bits[1]) # 二爻索引 1 middle_yang_5 float(bits[4]) # 五爻索引 4 # 上下卦分析下三爻为下卦上三爻为上卦 lower_trigram bits[:3] # 下卦 upper_trigram bits[3:] # 上卦 return { yang_ratio: yang_count / 6.0, lower_yang: float(lower_trigram.sum()) / 3.0, upper_yang: float(upper_trigram.sum()) / 3.0, middle_line_2: middle_yang_2, middle_line_5: middle_yang_5, is_pure_yang: 1.0 if yang_count 6 else 0.0, is_pure_yin: 1.0 if yang_count 0 else 0.0, } def hamming_distance(a: np.ndarray, b: np.ndarray) - int: 计算两个卦的汉明距离 —— 变化了几爻 return int((a ! b).sum()) def build_hexagram_graph() - Tuple[np.ndarray, np.ndarray]: 构建六十四卦的关系图邻接矩阵 边列表 设计原因任意两个卦之间如果只差一爻就有一条边。 这个图有 64 个节点和 192 条边每卦 6 爻每条边被两个卦共享。 可以用 GNN 在这个图上学习卦的特征表示。 adj np.zeros((64, 64), dtypenp.float32) edges [] for i in range(64): for j in range(i 1, 64): # 汉明距离 1 → 只差一爻 → 有边 bits_i np.array([(i b) 1 for b in range(6)]) bits_j np.array([(j b) 1 for b in range(6)]) if (bits_i ! bits_j).sum() 1: adj[i, j] 1.0 adj[j, i] 1.0 edges.append((i, j)) return adj, np.array(edges)四、结构化特征 vs 端到端学习什么时候传统智慧有价值编码方式维度关系保留适用场景二进制编码6汉明距离序列预测、状态机One-Hot64独立平等分类标签关系特征7结构化属性传统分析、可解释 ML图嵌入GNN自定义拓扑关系关系预测、聚类需要明确的是这篇文字的定位是用现代计算语言重新描述一个古老体系而非用 AI 证明易经的预测能力。从特征工程的角度看六十四卦体系最有趣的地方在于它在三千年前就提供了一个完整的结构化特征集——64 个样本、6 维特征、明确定义的关系网络。这种体系化思维本身就是一套数据建模的方法论。不过也要注意这类跨学科对比的边界。六十四卦的体系是为了哲学阐释而非数值计算设计的强行套用现代机器学习的评价标准如假设它应该满足某种数据分布既不公平也没有意义。有价值的不是验证古人已经发明了什么而是借鉴其结构化表示的思路来解决今天的问题。五、总结传统文化中的符号体系与数据科学中的特征工程之间存在方法论层面的对应关系。核心结论六十四卦本质是一个 64×6 的特征矩阵卦变对应汉明距离卦与卦之间的关系图是一个 64 节点 192 边的超立方体子图三种编码方案二进制、One-Hot、关系特征各有用武之地组合特征生成是现代 ML 的长项但结构化思维是最值得从传统中借鉴的部分跨学科思考的价值在于方法论迁移而非用现代工具为古代体系做背书做特征工程久了会发现在编码体系这件事上古人并非没有洞见——他们只是没有 GPU。