119 lines
3.4 KiB
C++
119 lines
3.4 KiB
C++
|
/*
|
||
|
LA: linear algebra C++ interface library
|
||
|
Kernel ridge regression module Copyright (C) 2024
|
||
|
Pavel Florian <florian43@seznam.cz> and Jiri Pittner <jiri.pittner@jh-inst.cas.cz> or <jiri@pittnerovi.com>
|
||
|
|
||
|
This program is free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation, either version 3 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include "regsurf.h"
|
||
|
|
||
|
using namespace std;
|
||
|
using namespace LA;
|
||
|
|
||
|
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
unsigned int i, j;
|
||
|
unsigned int count_levels;
|
||
|
unsigned int count_kernels;
|
||
|
double x;
|
||
|
double y;
|
||
|
double RMSE;
|
||
|
double Loss;
|
||
|
bool end = false;
|
||
|
string user_input;
|
||
|
string model_geoms = "xyz.dat";
|
||
|
string model_y_values = "E_sum.dat";
|
||
|
string model_params = "conf_surf.dat";
|
||
|
string model_Z_file = "Z.dat";
|
||
|
string model_test_geom = "nea_geoms.xyz";
|
||
|
/*
|
||
|
double* weight_coeff;
|
||
|
double* params;
|
||
|
string model_weight_file;
|
||
|
string* descriptor;
|
||
|
string* kernel;
|
||
|
*/
|
||
|
count_levels = 10;
|
||
|
count_kernels = 12;/*
|
||
|
descriptor = new string[1];
|
||
|
kernel = new string[1];
|
||
|
|
||
|
weight_coeff = new double[count_kernels * count_levels];
|
||
|
params = new double[22];
|
||
|
model_weight_file = "weights.dat";
|
||
|
*/
|
||
|
REGSURF<double> regsurf(model_geoms, model_y_values, model_params, model_Z_file);
|
||
|
// creating model
|
||
|
// fitting model
|
||
|
regsurf.s_Fit(0.0, 100, 0.5);
|
||
|
//reg.REG_Fit_grad(0.1, 50, 0.2);
|
||
|
|
||
|
// get predictions
|
||
|
|
||
|
cout << "Program for testing regression model \n" << endl;
|
||
|
cout << "The root mean square errors: " << endl;
|
||
|
for (i = 0; i < count_levels; i++)
|
||
|
{
|
||
|
RMSE = regsurf.s_RMSE(i);
|
||
|
cout << RMSE << endl;
|
||
|
}
|
||
|
cout << "The values of Loss_function: " << endl;
|
||
|
for (i = 0; i < count_levels; i++)
|
||
|
{
|
||
|
Loss = regsurf.Loss_Function(i);
|
||
|
cout << Loss << endl;
|
||
|
}
|
||
|
/*
|
||
|
cout << "The weights of kernels: " << endl;
|
||
|
for (i = 0; i < count_levels; i++)
|
||
|
{
|
||
|
cout << "Level " << i << ": ";
|
||
|
regsurf.s_Get_weight_coeff(i, weight_coeff + (i * count_kernels));
|
||
|
for (j = 0; j < count_kernels; j++)
|
||
|
cout << weight_coeff[(i * count_kernels) + j] << endl;
|
||
|
}
|
||
|
|
||
|
regsurf.s_Save_fitted(model_weight_file);
|
||
|
regsurf.s_Load_fitted(model_weight_file);
|
||
|
regsurf.s_Get_params(descriptor, kernel, params);
|
||
|
|
||
|
cout << "The descriptor is: " << descriptor[0] << endl;
|
||
|
cout << "The kernel is: " << kernel[0] << endl;
|
||
|
cout << "The parameters of model are: ";
|
||
|
for (i = 0; i < (2 * count_levels) + 1; i++)
|
||
|
cout << params[i] << endl;
|
||
|
|
||
|
descriptor[0] = "Inverse_pairs";
|
||
|
kernel[0] = "Laplacian";
|
||
|
params[1] = 0.2;
|
||
|
regsurf.s_Set_params(descriptor[0], kernel[0], params);
|
||
|
|
||
|
regsurf.s_Get_params(descriptor, kernel, params);
|
||
|
cout << "The new descriptor is: " << descriptor[0] << endl;
|
||
|
cout << "The new kernel is: " << kernel[0] << endl;
|
||
|
cout << "The new parameters of model are: ";
|
||
|
for (i = 0; i < (2 * count_levels) + 1; i++)
|
||
|
cout << params[i] << endl;
|
||
|
*/
|
||
|
regsurf.s_Load_ML_NEA_geometries(50000, "nea_geoms.xyz");
|
||
|
regsurf.s_Predict_ML_NEA_geometries();
|
||
|
regsurf.s_Compute_ML_NEA_spectra(0.00, 0.0025, 4000, 0.2);
|
||
|
regsurf.s_Save_ML_NEA_spectra("spectra.dat");
|
||
|
return(0);
|
||
|
};
|