트리 및 덴드로그램
W&B에서 트리(trees) 및 그래프 차트를 사용자 정의하는 방법
Created on December 9|Last edited on January 24
Comment
순환 덴드로그램
W&B에 순환 덴드로그램을 로그 합니다 W&B에 순환 덴드로그램을 로그 합니다 간단한 Colab 예시
입력 포맷: 최소한, 각 노드에는 id가 필요합니다. 루트(root)를 제외한 대부분의 노드에는 부모 id(parent id)가 있어야 합니다. 이름/라벨은 선택 사항입니다.
이 예시는 Vega 문서에서 직접 가져온 것으로, 이 차트는 코드/변수 유형 트리를 렌더링합니다. 전체 Vega 스펙의 경우, 이 리포트의 마지막을 확인하시기 바랍니다.
디스플레이 구성
왼쪽 상단의 톱니바퀴 아이콘을 클릭하여 차트 설정을 양방향으로 조정합니다.
- labels: labels(라벨): 노드 이름 표시/감추기
- radius(반경): 동심원 레이어 사이의 공간
- extent(범위): 차트를 렌더링 할 원의 0-360도
- rotate(회전): 원 방향 (루트를 중심으로 한 피벗 차트)
- layout(레이아웃): 자식 노드(child nodes)의 시각적 공간
- links(링크): 가장자리가 렌더링 되는 방식(선, 곡선, 직교)
전체 덴드로그램
1
전체 덴드로그램
data = [[a["id"], a["name"], a["parent"], a["size"]] for a in raw_data]
table = wandb.Table(columns=["node_id", "node_name", "parent", "size"], data=data)
fields = {"node_name" : "node_name", "node_id" : "node_id", "parent" : "parent", "size" : "size"}
dendro = wandb.plot_table(vega_spec_name="stacey/dendrogram", data_table=table, fields=fields)
wandb.log({"custom_tree" : dendro})
raw_data
는 다음의 형식을 가집니다:
raw_data = [
{
"id": 126,
"name": "Variable",
"parent": 67,
"size": 1124
},
{
"id": 127,
"name": "Variance",
"parent": 67,
"size": 1876
},
{
"id": 128,
"name": "Xor",
"parent": 67,
"size": 1101
},
{
"id": 129,
"name": "scale",
"parent": 1
}, ...
]
트리 (정규 덴드로그램)
여기서 확률 공간을 표시하는 정규 트리로 동일한 샘플 데이터가 렌더링 됩니다 Vega의 원본 참조. 위의 플로팅 코드에 대한 유일한 변경 사항으로 vega_spec_name
변경이 요구됩니다.
Flat tree
1
다음 단계
사용자 정의 차트 기능
- 디스플레이 설정에 만족하면 고정 버전을 저장하는 방법을 표시합니다
- 노드 호버, 특히 URLs에 관한 유용한 정보를 포함합니다
- 크기/상대 가중치에 따른 노드 색상/모양을 조정합니다
- 모든 노드의 이름이 지정되지 않은 예시 (기존 덴드로그램에 가까움)
- 더 작은 DAGs/PGMs/라벨이 있는 노드를 표시하도록 일반화합니다
- Python 및 Vega의 다른 입력 포맷으로 일반화합니다 (예: scipy 또는 sklearn의 경우와 같이, 원 데이터에서 계층적 군집화(hierarchical clustering)/트리 구조를 연산합니다)
- 사용자가 군집화 알고리듬에 대한 더 많은 제어 권한을 가질 수 있도록 합니다
- 세련된 Sankey와 같은 차트 유형
표시할 데이터세트/리서치
-
그래프 합성곱 신경망 응용 (기대되는 개요 문서)
-
새로운 방향
-
생명공학 분야: 예: 유전자 온톨로지 및 의미적 유사성 에 대한 다음과 같은 시각화
-
논문 인용 그래프: 1.7M arXiv 논문 의 데이터세트및 Kaggle 데이터
-
논문에서 시간에 따른 머신러닝으로부터의 개념/용어의 진화 (“배치 정규화” “강화 학습” 알고리듬)
-
온라인 확산에 따른 해시태그/밈/아티클 헤드라인의 진화
-
W&B 특징: 아티팩트 그래프, 실행 그래프, 오류 유형 그래프, 스윕 & 초매개변수 중요도 탐색
유용한 참고 자료
순환 덴드로그램 전체 Vega 스펙
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"description": "An example of a radial layout for a node-link diagram of hierarchical data.",
"width": 720,
"height": 720,
"padding": 5,
"autosize": "none",
"signals": [
{
"name": "labels", "value": true,
"bind": {"input": "checkbox"}
},
{
"name": "radius", "value": 280,
"bind": {"input": "range", "min": 20, "max": 600}
},
{
"name": "extent", "value": 360,
"bind": {"input": "range", "min": 0, "max": 360, "step": 1}
},
{
"name": "rotate", "value": 0,
"bind": {"input": "range", "min": 0, "max": 360, "step": 1}
},
{
"name": "layout", "value": "tidy",
"bind": {"input": "radio", "options": ["tidy", "cluster"]}
},
{
"name": "links", "value": "line",
"bind": {
"input": "select",
"options": ["line", "curve", "diagonal", "orthogonal"]
}
},
{ "name": "originX", "update": "width / 2" },
{ "name": "originY", "update": "height / 2" }
],
"data": [
{
"name": "wandb",
"transform": [
{
"type": "stratify",
"key": "${field:node_id}",
"parentKey": "${field:parent}"
},
{
"type": "tree",
"sort" : {"field": "${field:size}", "order": "descending"},
"method": {"signal": "layout"},
"size": [1, {"signal": "radius"}],
"as": ["alpha", "radius", "depth", "children"]
},
{
"type": "formula",
"expr": "(rotate + extent * datum.alpha + 270) % 360",
"as": "angle"
},
{
"type": "formula",
"expr": "PI * datum.angle / 180",
"as": "radians"
},
{
"type": "formula",
"expr": "inrange(datum.angle, [90, 270])",
"as": "leftside"
},
{
"type": "formula",
"expr": "originX + datum.radius * cos(datum.radians)",
"as": "x"
},
{
"type": "formula",
"expr": "originY + datum.radius * sin(datum.radians)",
"as": "y"
}
]
},
{
"name": "links",
"source": "wandb",
"transform": [
{ "type": "treelinks" },
{
"type": "linkpath",
"shape": {"signal": "links"}, "orient": "radial",
"sourceX": "source.radians", "sourceY": "source.radius",
"targetX": "target.radians", "targetY": "target.radius"
}
]
}
],
"scales": [
{
"name": "color",
"type": "linear",
"range": {"scheme": "magma"},
"domain": {"data": "wandb", "field": "depth"},
"zero": true
}
],
"marks": [
{
"type": "path",
"from": {"data": "links"},
"encode": {
"update": {
"x": {"signal": "originX"},
"y": {"signal": "originY"},
"path": {"field": "path"},
"stroke": {"value": "#ccc"}
}
}
},
{
"type": "symbol",
"from": {"data": "wandb"},
"encode": {
"enter": {
"size": {"value": 100},
"stroke": {"value": "#fff"}
},
"update": {
"x": {"field": "x"},
"y": {"field": "y"},
"fill": {"scale": "color", "field": "depth"}
}
}
},
{
"type": "text",
"from": {"data": "wandb"},
"encode": {
"enter": {
"text": {"field": "${field:node_name}"},
"fontSize": {"value": 9},
"baseline": {"value": "middle"}
},
"update": {
"x": {"field": "x"},
"y": {"field": "y"},
"dx": {"signal": "(datum.leftside ? -1 : 1) * 6"},
"angle": {"signal": "datum.leftside ? datum.angle - 180 : datum.angle"},
"align": {"signal": "datum.leftside ? 'right' : 'left'"},
"opacity": {"signal": "labels ? 1 : 0"}
}
}
}
]
Add a comment
Iterate on AI agents and models faster. Try Weights & Biases today.