Actual source code: petscregressor.h
1: #pragma once
3: #include <petsctao.h>
5: /* MANSEC = ML */
6: /* SUBMANSEC = PetscRegressor */
8: /*S
9: PetscRegressor - Abstract PETSc object that manages regression and classification problems
11: Level: beginner
13: Notes:
14: For linear problems `PetscRegressor` supports ordinary least squares, lasso, and ridge regression using the `PetscRegressorType` of `PETSCREGRESSORLINEAR`
15: and `PetscRegressorLinearType` of `REGRESSOR_LINEAR_OLS`, `REGRESSOR_LINEAR_LASSO`, and `REGRESSOR_LINEAR_RIDGE`.
17: We have slightly abused the term "regressor" in the naming of this component of PETSc.
18: Statisticians would say that we are doing "regression", and a "regressor", in this context, strictly means an
19: independent (or "predictor") variable in the regression analysis. However, "regressor" has taken on an informal
20: meaning in the machine-learning community of something along the lines of "algorithm or implementation used to fit
21: a regression model". Examples are `MLPRegressor` (multi-layer perceptron regressor) or `RandomForestRegressor`
22: from the scikit-learn toolkit (which is itself not consistent about the use of the term "regressor", since it has a
23: `LinearRegression` component instead of a `LinearRegressor` component).
25: .seealso: `PetscRegressorCreate()`, `PetscRegressorLinearType`, `PetscRegressorSetType()`, `PetscRegressorType`, `PetscRegressorDestroy()`,
26: `PETSCREGRESSORLINEAR`, `PetscRegressorLinearType`, `REGRESSOR_LINEAR_OLS`, `REGRESSOR_LINEAR_LASSO`, `REGRESSOR_LINEAR_RIDGE`.
27: S*/
28: typedef struct _p_PetscRegressor *PetscRegressor;
30: /*J
31: PetscRegressorType - String with the name of a PETSc regression method.
33: Level: beginner
35: .seealso: [](ch_regressor), `PetscRegressorSetType()`, `PetscRegressor`, `PetscRegressorRegister()`, `PetscRegressorCreate()`, `PetscRegressorSetFromOptions()`,
36: `PETSCREGRESSORLINEAR`
37: J*/
38: typedef const char *PetscRegressorType;
39: #define PETSCREGRESSORLINEAR "linear"
41: /*E
42: PetscRegressorLinearType - Type of linear regression
44: Values:
45: + `REGRESSOR_LINEAR_OLS` - ordinary least squares
46: . `REGRESSOR_LINEAR_LASSO` - lasso
47: - `REGRESSOR_LINEAR_RIDGE` - ridge
49: Level: advanced
51: .seealso: `PetscRegressor`, `PETSCREGRESSORLINEAR`
52: E*/
54: typedef enum {
55: REGRESSOR_LINEAR_OLS,
56: REGRESSOR_LINEAR_LASSO,
57: REGRESSOR_LINEAR_RIDGE
58: } PetscRegressorLinearType;
59: PETSC_EXTERN const char *const PetscRegressorLinearTypes[];
61: PETSC_EXTERN PetscFunctionList PetscRegressorList;
62: PETSC_EXTERN PetscClassId PETSCREGRESSOR_CLASSID;
64: PETSC_EXTERN PetscErrorCode PetscRegressorInitializePackage(void);
65: PETSC_EXTERN PetscErrorCode PetscRegressorFinalizePackage(void);
66: PETSC_EXTERN PetscErrorCode PetscRegressorRegister(const char[], PetscErrorCode (*)(PetscRegressor));
68: PETSC_EXTERN PetscErrorCode PetscRegressorCreate(MPI_Comm, PetscRegressor *);
69: PETSC_EXTERN PetscErrorCode PetscRegressorReset(PetscRegressor);
70: PETSC_EXTERN PetscErrorCode PetscRegressorDestroy(PetscRegressor *);
72: PETSC_EXTERN PetscErrorCode PetscRegressorSetOptionsPrefix(PetscRegressor, const char[]);
73: PETSC_EXTERN PetscErrorCode PetscRegressorAppendOptionsPrefix(PetscRegressor, const char[]);
74: PETSC_EXTERN PetscErrorCode PetscRegressorGetOptionsPrefix(PetscRegressor, const char *[]);
76: PETSC_EXTERN PetscErrorCode PetscRegressorSetType(PetscRegressor, PetscRegressorType);
77: PETSC_EXTERN PetscErrorCode PetscRegressorGetType(PetscRegressor, PetscRegressorType *);
78: PETSC_EXTERN PetscErrorCode PetscRegressorSetRegularizerWeight(PetscRegressor, PetscReal);
79: PETSC_EXTERN PetscErrorCode PetscRegressorSetUp(PetscRegressor);
80: PETSC_EXTERN PetscErrorCode PetscRegressorSetFromOptions(PetscRegressor);
82: PETSC_EXTERN PetscErrorCode PetscRegressorView(PetscRegressor, PetscViewer);
83: PETSC_EXTERN PetscErrorCode PetscRegressorViewFromOptions(PetscRegressor, PetscObject, const char[]);
85: PETSC_EXTERN PetscErrorCode PetscRegressorFit(PetscRegressor, Mat, Vec);
86: PETSC_EXTERN PetscErrorCode PetscRegressorPredict(PetscRegressor, Mat, Vec);
87: PETSC_EXTERN PetscErrorCode PetscRegressorGetTao(PetscRegressor, Tao *);
89: PETSC_EXTERN PetscErrorCode PetscRegressorLinearSetFitIntercept(PetscRegressor, PetscBool);
90: PETSC_EXTERN PetscErrorCode PetscRegressorLinearSetUseKSP(PetscRegressor, PetscBool);
91: PETSC_EXTERN PetscErrorCode PetscRegressorLinearGetKSP(PetscRegressor, KSP *);
92: PETSC_EXTERN PetscErrorCode PetscRegressorLinearGetCoefficients(PetscRegressor, Vec *);
93: PETSC_EXTERN PetscErrorCode PetscRegressorLinearGetIntercept(PetscRegressor, PetscScalar *);
94: PETSC_EXTERN PetscErrorCode PetscRegressorLinearSetType(PetscRegressor, PetscRegressorLinearType);
95: PETSC_EXTERN PetscErrorCode PetscRegressorLinearGetType(PetscRegressor, PetscRegressorLinearType *);