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