AutoGL 特征工程
我们提供了一系列的节点和图的特征工程方法。您可以挑选需要的特征工程方法,并在一个特性工程管道中编写。
快速开始
# 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中传入需要的方法名称。
generators
selectors
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
的实现。
# 例子:创建节点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)