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
56#include "models/TreeBranch.hpp"
57#include "models/TreeLeaf.hpp"
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::Outcome> groups;
94 };
95
118 public:
121 std::vector<int> indices;
122 int depth;
123 std::vector<NodeData> nodes;
124
126
127 void visit(TreeBranch const& node) override;
128 void visit(TreeLeaf const& node) override;
129 };
130
131 // ===================================================================
132 // Decision Boundary and Region Types
133 // ===================================================================
134
160
179
199 std::vector<std::pair<types::Feature, types::Feature>> vertices;
201 };
202
203 // ===================================================================
204 // 2D Projection Helpers
205 // ===================================================================
206
219 types::FeatureVector project_2d(types::FeatureVector const& full_proj, int var_i, int var_j);
220
234 types::FeatureVector const& full_proj,
235 types::Feature thr,
236 std::vector<std::pair<int, types::Feature>> const& fixed_vars
237 );
238
252 HalfSpace const& hs, int var_i, int var_j, std::vector<std::pair<int, types::Feature>> const& fixed_vars
253 );
254
255 // ===================================================================
256 // Parametric Line Clipping
257 // ===================================================================
258
274 types::Feature origin,
275 types::Feature direction,
276 types::Feature range_min,
277 types::Feature range_max,
278 types::Feature& u_min,
279 types::Feature& u_max
280 );
281
312 types::FeatureVector const& a,
314 std::vector<HalfSpace> const& constraints,
315 types::Feature x_min,
316 types::Feature x_max,
317 types::Feature y_min,
318 types::Feature y_max,
319 BoundarySegment& segment,
320 int depth
321 );
322
323 // ===================================================================
324 // Polygon Clipping (Sutherland–Hodgman)
325 // ===================================================================
326
328 using Polygon = std::vector<std::pair<types::Feature, types::Feature>>;
329
362 Polygon const& polygon, types::FeatureVector const& normal, types::Feature cutpoint, bool is_lower
363 );
364
365 // ===================================================================
366 // Spatial Visitor (shared base for boundary and region visitors)
367 // ===================================================================
368
384 public:
386 std::vector<std::pair<int, types::Feature>> fixed_vars;
388 int depth;
389 std::vector<HalfSpace> constraints;
390
392 int var_i,
393 int var_j,
394 std::vector<std::pair<int, types::Feature>> const& fixed_vars,
399 );
400
408 void visit(TreeBranch const& node) override;
409
411 void visit(TreeLeaf const& node) override;
412 };
413
414 // ===================================================================
415 // Boundary Visitor
416 // ===================================================================
417
438 public:
440 std::vector<BoundarySegment> segments;
441
442 void visit(TreeBranch const& node) override;
443 };
444
445 // ===================================================================
446 // Region Visitor
447 // ===================================================================
448
470 public:
472 std::vector<RegionPolygon> regions;
473
474
475 void visit(TreeLeaf const& node) override;
476 };
477
478 // ===================================================================
479 // Tree Layout
480 // ===================================================================
481
497
506
510 struct LayoutEdge {
512 std::string label;
513 };
514
518 struct TreeLayout {
519 std::vector<LayoutNode> nodes;
520 std::vector<LayoutEdge> edges;
521 };
522
552}
Internal split node in a projection pursuit tree.
Definition TreeBranch.hpp:15
Leaf node in a projection pursuit tree.
Definition TreeLeaf.hpp:12
Visitor interface for tree node dispatch.
Definition TreeNode.hpp:31
Abstract base class for nodes in a projection pursuit tree.
Definition TreeNode.hpp:19
Visitor that collects and clips decision boundary line segments.
Definition Visualization.hpp:437
std::vector< BoundarySegment > segments
Output: clipped boundary segments.
Definition Visualization.hpp:440
void visit(TreeBranch const &node) override
SpatialVisitor(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)
std::vector< NodeData > nodes
Collected node data (pre-order).
Definition Visualization.hpp:123
void visit(TreeLeaf const &node) override
types::FeatureMatrix const & x
Full observation matrix (n × p).
Definition Visualization.hpp:119
std::vector< int > indices
Indices of observations reaching the current node.
Definition Visualization.hpp:121
void visit(TreeBranch const &node) override
types::OutcomeVector const & y
Full response vector (n).
Definition Visualization.hpp:120
int depth
Current depth in the traversal.
Definition Visualization.hpp:122
NodeDataVisitor(types::FeatureMatrix const &x, types::OutcomeVector const &y)
Visitor that collects convex decision region polygons.
Definition Visualization.hpp:469
void visit(TreeLeaf const &node) override
std::vector< RegionPolygon > regions
Output: one polygon per reachable leaf.
Definition Visualization.hpp:472
SpatialVisitor(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_min
Definition Visualization.hpp:387
types::Feature x_max
Definition Visualization.hpp:387
std::vector< HalfSpace > constraints
Accumulated ancestor half-space constraints.
Definition Visualization.hpp:389
types::Feature x_min
Definition Visualization.hpp:387
int var_i
Definition Visualization.hpp:385
int var_j
Indices of the two displayed feature variables.
Definition Visualization.hpp:385
types::Feature y_max
Visible bounding box.
Definition Visualization.hpp:387
void visit(TreeBranch const &node) override
Push constraint, recurse into children, pop.
std::vector< std::pair< int, types::Feature > > fixed_vars
Fixed (index, value) pairs.
Definition Visualization.hpp:386
void visit(TreeLeaf const &node) override
No-op default; override in subclasses that need leaf work.
SpatialVisitor(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 depth
Definition Visualization.hpp:388
Definition Cutpoint.hpp:17
Eigen::Matrix< Feature, Eigen::Dynamic, Eigen::Dynamic > FeatureMatrix
Dynamic-size matrix of feature values.
Definition Types.hpp:33
Eigen::Matrix< Outcome, Eigen::Dynamic, 1 > OutcomeVector
Dynamic-size column vector of predictions.
Definition Types.hpp:42
Eigen::Matrix< Feature, Eigen::Dynamic, 1 > FeatureVector
Dynamic-size column vector of feature values.
Definition Types.hpp:36
Feature Outcome
Scalar type for predictions (float for both classification and regression).
Definition Types.hpp:30
float Feature
Scalar type for feature values.
Definition Types.hpp:24
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.
HalfSpace project_halfspace_2d(HalfSpace const &hs, int var_i, int var_j, std::vector< std::pair< int, types::Feature > > const &fixed_vars)
Project a p-dimensional HalfSpace constraint to the 2D display plane.
bool clip_boundary_2d(types::FeatureVector const &a, types::Feature cutpoint, 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_cutpoint(types::FeatureVector const &full_proj, types::Feature thr, std::vector< std::pair< int, types::Feature > > const &fixed_vars)
Adjust a split cutpoint 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:328
Polygon clip_polygon_halfspace(Polygon const &polygon, types::FeatureVector const &normal, types::Feature cutpoint, 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.
A clipped decision boundary line segment in 2D feature space.
Definition Visualization.hpp:175
types::Feature y_end
Definition Visualization.hpp:176
int depth
Definition Visualization.hpp:177
types::Feature y_start
Definition Visualization.hpp:176
types::Feature x_start
Definition Visualization.hpp:176
types::Feature x_end
Definition Visualization.hpp:176
A half-space constraint derived from an ancestor split.
Definition Visualization.hpp:150
HalfSpace(types::FeatureVector projector, types::Feature cutpoint, bool is_lower)
Definition Visualization.hpp:155
types::FeatureVector projector
Definition Visualization.hpp:151
bool is_lower
true = lower child side (projected value < cutpoint).
Definition Visualization.hpp:153
types::Feature cutpoint
Definition Visualization.hpp:152
An edge between two positioned nodes with a cutpoint label.
Definition Visualization.hpp:510
types::Feature to_y
Definition Visualization.hpp:511
types::Feature from_x
Definition Visualization.hpp:511
types::Feature to_x
Definition Visualization.hpp:511
std::string label
e.g. "< 1.50" or "≥ 1.50".
Definition Visualization.hpp:512
types::Feature from_y
Definition Visualization.hpp:511
A positioned tree node in the computed layout.
Definition Visualization.hpp:501
bool is_leaf
Definition Visualization.hpp:503
types::Feature y
Center position of the node.
Definition Visualization.hpp:502
types::Feature x
Definition Visualization.hpp:502
int node_idx
Pre-order index (0-based).
Definition Visualization.hpp:504
Layout parameters for tree structure rendering.
Definition Visualization.hpp:489
types::Feature node_h
Internal node height.
Definition Visualization.hpp:492
types::Feature leaf_w
Leaf node width.
Definition Visualization.hpp:493
types::Feature leaf_h
Leaf node height.
Definition Visualization.hpp:494
types::Feature gap
Horizontal gap between sibling subtrees.
Definition Visualization.hpp:495
types::Feature node_w
Internal node width.
Definition Visualization.hpp:491
types::Feature y_spacing
Vertical distance between depth levels.
Definition Visualization.hpp:490
Per-node data collected by routing observations through the tree.
Definition Visualization.hpp:86
types::FeatureVector projector
Definition Visualization.hpp:89
std::vector< types::Outcome > groups
Definition Visualization.hpp:93
bool is_leaf
Definition Visualization.hpp:87
int depth
Definition Visualization.hpp:88
types::Feature cutpoint
Definition Visualization.hpp:90
std::vector< types::Feature > projected_values
Definition Visualization.hpp:92
types::Outcome value
Definition Visualization.hpp:91
A convex decision region polygon in 2D with its predicted group.
Definition Visualization.hpp:198
std::vector< std::pair< types::Feature, types::Feature > > vertices
Definition Visualization.hpp:199
types::Outcome predicted_group
0-indexed group label from the leaf.
Definition Visualization.hpp:200
Complete tree layout: positioned nodes and labelled edges.
Definition Visualization.hpp:518
std::vector< LayoutNode > nodes
Definition Visualization.hpp:519
std::vector< LayoutEdge > edges
Definition Visualization.hpp:520