PolynomialFeatures
#include <Skigen/Preprocessing>
template <typename Scalar = double>
class Skigen::PolynomialFeatures(degree=2, include_bias=true, interaction_only=false)
Generate polynomial and interaction features.
Generate a new feature matrix consisting of all polynomial combinations of the features with degree less than or equal to the specified degree. For example, if an input sample is two dimensional and of the form [a, b], the degree-2 polynomial features are [1, a, b, a², ab, b²].
Mirrors sklearn.preprocessing.PolynomialFeatures.
Parameters:
-
degree : int, default=2 Maximum polynomial degree (
int, default2). -
include_bias : bool, default=true If
true, include a bias column of ones (bool, defaulttrue). -
interaction_only : bool, default=false If
true, only interaction features are produced (bool, defaultfalse).
Attributes:
-
degree : int Maximum polynomial degree.
-
n_output_features : Eigen::Index Number of output features after transformation.
Methods
SKIGEN_PARAMS()
Compute the powers matrix for later transformation.
Parameters:
- X Training data of shape (n_samples, n_features).
Returns:
- result
Reference to the fitted transformer (
*this).
transform(X)
Transform data to polynomial features.
Parameters:
- X : MatrixType Data matrix of shape (n_samples, n_features).
Returns:
- result : MatrixType Transformed matrix of shape (n_samples, n_output_features).
Throws:
std::runtime_error— if the model has not been fitted.
inverse_transform()
Not supported — polynomial feature generation is not reversible.
Throws:
std::runtime_error— Always throws.
Example
// Degree 2 with bias: 1, x1, x2, x1², x1·x2, x2²
Skigen::PolynomialFeatures<double> poly2(2);
Eigen::MatrixXd X2 = poly2.fit_transform(X);
std::cout << "Degree 2 with bias (" << X2.rows() << "x" << X2.cols()
<< "):\n" << X2 << "\n\n";
// Degree 2 without bias: x1, x2, x1², x1·x2, x2²
Skigen::PolynomialFeatures<double> poly2_no_bias(2, false);
Eigen::MatrixXd X2nb = poly2_no_bias.fit_transform(X);
std::cout << "Degree 2 no bias (" << X2nb.rows() << "x" << X2nb.cols()
<< "):\n" << X2nb << "\n\n";