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

📅 2026/7/8 15:26:08 👁️ 阅读次数 📝 编程学习
从卦象到特征工程:传统文化中的特征提取直觉

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

一、六十四卦的特征矩阵——比 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, dtype=np.float32) @staticmethod def one_hot_encode(hexagram_name: str) -> np.ndarray: """方法2:独热编码 设计原因:每个卦有唯一的 64 维独热向量。 适合作为分类任务的标签编码,保留了所有卦之间的独立平等性。 缺点:丢失了卦与卦之间的结构关系。 """ idx = HexagramEncoder.HEXAGRAM_NAMES.index(hexagram_name) vec = np.zeros(64, dtype=np.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), dtype=np.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。