|
- .. _fe_cn:
-
- AutoGL 特征工程
- ==========================
-
- 我们提供了一系列的节点和图的特征工程方法。您可以挑选需要的特征工程方法,并在一个特性工程管道中编写。
-
- 快速开始
- -----------
- .. code-block :: python
-
- # 1. 选择一个数据集.
- from autogl.datasets import build_dataset_from_name
- data = build_dataset_from_name('cora')
-
- # 2. 选择特征工程方法
- from autogl.module.feature._base_feature_engineer._base_feature_engineer import _ComposedFeatureEngineer
- from autogl.module.feature import EigenFeatureGenerator
- from autogl.module.feature import NetLSD
-
- # 可以通过以下方式将多个特征工程方法组合起来
- fe = _ComposedFeatureEngineer([
- EigenFeatureGenerator(size=32),
- NetLSD()
- ])
-
- # 3.拟合变换数据
- fe.fit(data)
- data1=fe.transform(data,inplace=False)
-
-
- 特征工程方法
- ---------------------
- 现在支持3种类型的特征工程方法, 分别是 ``generators``, ``selectors`` , ``graph``. 你可以像在 ``快速开始`` 部分一样引入对应的模块,或者可以直接在Config或者Solver中传入需要的方法名称。
-
- 1. ``generators``
-
- +---------------------------+-------------------------------------------------+
- | 方法名 | 描述 |
- +===========================+=================================================+
- | ``GraphletGenerator`` | 生成local graphlet 数量作为节点特征 |
- +---------------------------+-------------------------------------------------+
- | ``EigenFeatureGenerator`` | 生成特征向量作为节点特征 |
- +---------------------------+-------------------------------------------------+
- | ``PageRankFeatureGenerator`` | 生成Pagerank 分数作为节点特征 |
- +---------------------------+-------------------------------------------------+
- | `` LocalDegreeProfileGenerator `` | 生成Local Degree Profile作为节点特征 |
- +---------------------------+-------------------------------------------------+
- | ``NormalizeFeatures`` | 归一化所有节点特征 |
- +---------------------------+-------------------------------------------------+
- | ``OneHotDegreeGenerator`` | 生成节点度的独热编码作为节点特征 |
- +---------------------------+-------------------------------------------------+
- | ``OneHotFeatureGenerator`` | 生成节点ID的独热编码作为节点特征 |
- +---------------------------+-------------------------------------------------+
-
- 2. ``selectors``
-
- +----------------------+--------------------------------------------------------------------------------+
- | 方法名 | 描述 |
- +======================+================================================================================+
- | ``FilterConstant`` | 删除所有常量和独热编码节点特征 |
- +----------------------+--------------------------------------------------------------------------------+
- | ``GBDTFeatureSelector`` | 通过梯度下降决策树对节点特征进行重要性排序,选择最重要的K个重要的节点特征 |
- +----------------------+--------------------------------------------------------------------------------+
-
- 3. ``graph``
-
- ``NetLSD`` 是一种图特征生成方法。
-
- 一系列Networkx中的图特征生成方法被集成到库中, 若想了解详情,请查阅NetworkX的相关文档。 (``NxLargeCliqueSize``, ``NxAverageClusteringApproximate``, ``NxDegreeAssortativityCoefficient``, ``NxDegreePearsonCorrelationCoefficient``, ``NxHasBridge``
- ,``NxGraphCliqueNumber``, ``NxGraphNumberOfCliques``, ``NxTransitivity``, ``NxAverageClustering``, ``NxIsConnected``, ``NxNumberConnectedComponents``,
- ``NxIsDistanceRegular``, ``NxLocalEfficiency``, ``NxGlobalEfficiency``, ``NxIsEulerian``)
-
- 特征工程类型根据变化特征的方法进行分类。 ``generators`` 生成新特征并拼接或覆盖原始的特征。 而 ``selectors`` 选择原始特征中有用的部分。
- 前两种可以节点或者边的层级使用(更改节点或边的特征), 而 ``graph`` 关注图级别的特征工程(在图特征上进行修改)。
- 如果您需要进一步开发使用,可以通过继承其中一种基础类进行修改;或者可以直接继承更加底层的``BaseFeature``类。
-
- 构建您自己的特征工程方法
- ------------------
- 您可以继承其中一种特征工程基础类 ``BaseFeatureGenerator``或 ``BaseFeatureSelector`` 进行修改, 重载方法 ``extract_xx_features``。对于图层级特征工程,可以参考 ``_NetworkXGraphFeatureEngineer`` 的实现。
-
- .. code-block :: python
-
- # 例子:创建节点ID独热编码特征
- import autogl
- import torch
- from autogl.module.feature._generators._basic import BaseFeatureGenerator
-
- class OneHotFeatureGenerator(BaseFeatureGenerator):
- # 设置 overrider_features 为False , 则将原始特征拼接起来; 否则直接覆盖原始特征。
- def __init__(self, override_features: bool = False):
- super(BaseFeatureGenerator, self).__init__(override_features)
-
- def _extract_nodes_feature(self, data: autogl.data.Data) -> torch.Tensor:
- num_nodes: int = (
- data.x.size(0)
- if data.x is not None and isinstance(data.x, torch.Tensor)
- else (data.edge_index.max().item() + 1)
- )
- return torch.eye(num_nodes)
|