ppforest2 v0.1.0
Projection Pursuit Decision Trees and Random Forests
Loading...
Searching...
No Matches
Visualization.hpp
Go to the documentation of this file.
1#pragma once
2
55
58#include "utils/Types.hpp"
59
60#include <vector>
61#include <utility>
62#include <string>
63
64namespace ppforest2::viz {
65 // ===================================================================
66 // Node Data Collection
67 // ===================================================================
68
86 struct NodeData {
87 bool is_leaf;
88 int depth;
92 std::vector<types::Feature> projected_values;
93 std::vector<types::Response> groups;
94 };
95
120 std::vector<int> indices;
121 int depth;
122 std::vector<NodeData> nodes;
123
125
126 void visit(TreeCondition const& node) override;
127 void visit(TreeResponse const& node) override;
128 };
129
130 // ===================================================================
131 // Decision Boundary and Region Types
132 // ===================================================================
133
154
173
193 std::vector<std::pair<types::Feature, types::Feature>> vertices;
195 };
196
197 // ===================================================================
198 // 2D Projection Helpers
199 // ===================================================================
200
213 types::FeatureVector project_2d(types::FeatureVector const& full_proj, int var_i, int var_j);
214
228 types::Feature thr,
229 std::vector<std::pair<int, types::Feature>> const& fixed_vars);
230
231 // ===================================================================
232 // Parametric Line Clipping
233 // ===================================================================
234
250 types::Feature direction,
251 types::Feature range_min,
252 types::Feature range_max,
253 types::Feature& u_min,
254 types::Feature& u_max);
255
286 types::Feature threshold,
287 std::vector<HalfSpace> const& constraints,
288 types::Feature x_min,
289 types::Feature x_max,
290 types::Feature y_min,
291 types::Feature y_max,
292 BoundarySegment& segment,
293 int depth);
294
295 // ===================================================================
296 // Polygon Clipping (Sutherland–Hodgman)
297 // ===================================================================
298
300 using Polygon = std::vector<std::pair<types::Feature, types::Feature>>;
301
334 types::FeatureVector const& normal,
335 types::Feature threshold,
336 bool is_lower);
337
338 // ===================================================================
339 // Boundary Visitor
340 // ===================================================================
341
363 std::vector<std::pair<int, types::Feature>> fixed_vars;
365 int depth;
366 std::vector<HalfSpace> constraints;
367 std::vector<BoundarySegment> segments;
368
370 int var_j,
371 std::vector<std::pair<int, types::Feature>> const& fixed_vars,
376
377 void visit(TreeCondition const& node) override;
378 void visit(TreeResponse const& node) override;
379 };
380
381 // ===================================================================
382 // Region Visitor
383 // ===================================================================
384
407 std::vector<std::pair<int, types::Feature>> fixed_vars;
409 std::vector<HalfSpace> constraints;
410 std::vector<RegionPolygon> regions;
411
413 int var_j,
414 std::vector<std::pair<int, types::Feature>> const& fixed_vars,
419
420 void visit(TreeCondition const& node) override;
421 void visit(TreeResponse const& node) override;
422 };
423
424 // ===================================================================
425 // Tree Layout
426 // ===================================================================
427
443
452
456 struct LayoutEdge {
458 std::string label;
459 };
460
464 struct TreeLayout {
465 std::vector<LayoutNode> nodes;
466 std::vector<LayoutEdge> edges;
467 };
468
498}
Eigen::Matrix< Feature, Eigen::Dynamic, Eigen::Dynamic > FeatureMatrix
Dynamic-size matrix of feature values.
Definition Types.hpp:24
Eigen::Matrix< Feature, Eigen::Dynamic, 1 > FeatureVector
Dynamic-size column vector of feature values.
Definition Types.hpp:26
int Response
Scalar type for group labels (integer).
Definition Types.hpp:21
Eigen::Matrix< Response, Eigen::Dynamic, 1 > ResponseVector
Dynamic-size column vector of group labels.
Definition Types.hpp:29
float Feature
Scalar type for feature values (float or double).
Definition Types.hpp:17
Definition Visualization.hpp:64
bool clip_param_to_range(types::Feature origin, types::Feature direction, types::Feature range_min, types::Feature range_max, types::Feature &u_min, types::Feature &u_max)
Clip a parametric interval [u_min, u_max] to a 1D range.
bool clip_boundary_2d(types::FeatureVector const &a, types::Feature threshold, std::vector< HalfSpace > const &constraints, types::Feature x_min, types::Feature x_max, types::Feature y_min, types::Feature y_max, BoundarySegment &segment, int depth)
Clip a 2D decision boundary line to the visible rectangle and all ancestor half-space constraints.
TreeLayout compute_tree_layout(TreeNode const &root, LayoutParams const &params=LayoutParams())
Compute a left-aligned tree layout for rendering.
types::Feature adjust_threshold(types::FeatureVector const &full_proj, types::Feature thr, std::vector< std::pair< int, types::Feature > > const &fixed_vars)
Adjust a split threshold by subtracting contributions of fixed variables.
std::vector< std::pair< types::Feature, types::Feature > > Polygon
A polygon represented as an ordered list of (x, y) vertex pairs.
Definition Visualization.hpp:300
Polygon clip_polygon_halfspace(Polygon const &polygon, types::FeatureVector const &normal, types::Feature threshold, bool is_lower)
Clip a convex polygon against a single half-space.
types::FeatureVector project_2d(types::FeatureVector const &full_proj, int var_i, int var_j)
Extract a 2D sub-projection from a full p-dimensional projector.
Internal split node in a projection pursuit tree.
Definition TreeCondition.hpp:19
Visitor interface for tree node dispatch.
Definition TreeNode.hpp:28
Abstract base class for nodes in a projection pursuit tree.
Definition TreeNode.hpp:19
Leaf node in a projection pursuit tree.
Definition TreeResponse.hpp:12
A clipped decision boundary line segment in 2D feature space.
Definition Visualization.hpp:169
types::Feature y_end
Definition Visualization.hpp:170
int depth
Definition Visualization.hpp:171
types::Feature y_start
Definition Visualization.hpp:170
types::Feature x_start
Definition Visualization.hpp:170
types::Feature x_end
Definition Visualization.hpp:170
std::vector< BoundarySegment > segments
Output: clipped boundary segments.
Definition Visualization.hpp:367
std::vector< HalfSpace > constraints
Accumulated ancestor constraints.
Definition Visualization.hpp:366
std::vector< std::pair< int, types::Feature > > fixed_vars
Fixed (index, value) pairs.
Definition Visualization.hpp:363
BoundaryVisitor(int var_i, int var_j, std::vector< std::pair< int, types::Feature > > const &fixed_vars, types::Feature x_min, types::Feature x_max, types::Feature y_min, types::Feature y_max)
int var_i
Definition Visualization.hpp:362
int var_j
Indices of the two displayed feature variables.
Definition Visualization.hpp:362
types::Feature y_min
Definition Visualization.hpp:364
void visit(TreeCondition const &node) override
types::Feature y_max
Visible bounding box.
Definition Visualization.hpp:364
types::Feature x_max
Definition Visualization.hpp:364
types::Feature x_min
Definition Visualization.hpp:364
int depth
Definition Visualization.hpp:365
void visit(TreeResponse const &node) override
A half-space constraint derived from an ancestor split.
Definition Visualization.hpp:149
types::FeatureVector projector
Definition Visualization.hpp:150
types::Feature threshold
Definition Visualization.hpp:151
bool is_lower
true = lower child side (projected value < threshold).
Definition Visualization.hpp:152
An edge between two positioned nodes with a threshold label.
Definition Visualization.hpp:456
types::Feature to_y
Definition Visualization.hpp:457
types::Feature from_x
Definition Visualization.hpp:457
types::Feature to_x
Definition Visualization.hpp:457
std::string label
e.g. "< 1.50" or "≥ 1.50".
Definition Visualization.hpp:458
types::Feature from_y
Definition Visualization.hpp:457
A positioned tree node in the computed layout.
Definition Visualization.hpp:447
bool is_leaf
Definition Visualization.hpp:449
types::Feature y
Center position of the node.
Definition Visualization.hpp:448
types::Feature x
Definition Visualization.hpp:448
int node_idx
Pre-order index (0-based).
Definition Visualization.hpp:450
Layout parameters for tree structure rendering.
Definition Visualization.hpp:435
types::Feature node_h
Internal node height.
Definition Visualization.hpp:438
types::Feature leaf_w
Leaf node width.
Definition Visualization.hpp:439
types::Feature leaf_h
Leaf node height.
Definition Visualization.hpp:440
types::Feature gap
Horizontal gap between sibling subtrees.
Definition Visualization.hpp:441
types::Feature node_w
Internal node width.
Definition Visualization.hpp:437
types::Feature y_spacing
Vertical distance between depth levels.
Definition Visualization.hpp:436
std::vector< NodeData > nodes
Collected node data (pre-order).
Definition Visualization.hpp:122
void visit(TreeResponse const &node) override
types::FeatureMatrix const & x
Full observation matrix (n × p).
Definition Visualization.hpp:118
std::vector< int > indices
Indices of observations reaching the current node.
Definition Visualization.hpp:120
types::ResponseVector const & y
Full response vector (n).
Definition Visualization.hpp:119
void visit(TreeCondition const &node) override
NodeDataVisitor(types::FeatureMatrix const &x, types::ResponseVector const &y)
int depth
Current depth in the traversal.
Definition Visualization.hpp:121
Per-node data collected by routing observations through the tree.
Definition Visualization.hpp:86
types::Feature threshold
Definition Visualization.hpp:90
std::vector< types::Response > groups
Definition Visualization.hpp:93
types::FeatureVector projector
Definition Visualization.hpp:89
bool is_leaf
Definition Visualization.hpp:87
int depth
Definition Visualization.hpp:88
std::vector< types::Feature > projected_values
Definition Visualization.hpp:92
types::Response value
Definition Visualization.hpp:91
A convex decision region polygon in 2D with its predicted group.
Definition Visualization.hpp:192
std::vector< std::pair< types::Feature, types::Feature > > vertices
Definition Visualization.hpp:193
types::Response predicted_group
0-indexed group label from the leaf.
Definition Visualization.hpp:194
void visit(TreeCondition const &node) override
int var_i
Definition Visualization.hpp:406
types::Feature x_min
Definition Visualization.hpp:408
std::vector< HalfSpace > constraints
Accumulated ancestor constraints.
Definition Visualization.hpp:409
RegionVisitor(int var_i, int var_j, std::vector< std::pair< int, types::Feature > > const &fixed_vars, types::Feature x_min, types::Feature x_max, types::Feature y_min, types::Feature y_max)
types::Feature y_max
Bounding box for the initial rectangle.
Definition Visualization.hpp:408
int var_j
Indices of the two displayed feature variables.
Definition Visualization.hpp:406
std::vector< std::pair< int, types::Feature > > fixed_vars
Fixed (index, value) pairs.
Definition Visualization.hpp:407
types::Feature y_min
Definition Visualization.hpp:408
std::vector< RegionPolygon > regions
Output: one polygon per reachable leaf.
Definition Visualization.hpp:410
void visit(TreeResponse const &node) override
types::Feature x_max
Definition Visualization.hpp:408
Complete tree layout: positioned nodes and labelled edges.
Definition Visualization.hpp:464
std::vector< LayoutNode > nodes
Definition Visualization.hpp:465
std::vector< LayoutEdge > edges
Definition Visualization.hpp:466