Metadata-Version: 2.1
Name: MVPR
Version: 1.26
Summary: Multi-variable polynomial regression for curve fitting.
Home-page: https://github.com/Joel-H-dot/MVPR
Author: Joel Hampton
Author-email: joelelihampton@outlook.com
License: MIT
Download-URL: https://github.com/Joel-H-dot/MVPR/archive/refs/tags/1.1.tar.gz
Description: # Overview
        
        MVPR is [available on PyPI][pypi], and can be installed via
        ```none
        pip install MVPR
        ```
        This package fits a multi-variable polynomial equation to a set of data using cross validation. The solution is regularised using truncated singular value decomposition of the Moore-Penrose pseudo-inverse, where the truncation point is found using a golden section search. It is suitable for ill-posed problems, and for preventing over-fitting to noise. 
        
        
        [pypi]:  https://pypi.org/project/MVPR/
        
        # Example
        
        consider a 3-D set of data, plotted as follows:
        
        ![image](https://user-images.githubusercontent.com/60707891/115008840-87322380-9ea3-11eb-85b3-778c06a3db9b.png)
        
        and another set:
        
        ![image](https://user-images.githubusercontent.com/60707891/115008872-91ecb880-9ea3-11eb-9ef9-e0dc9d2537b6.png)
        
        We want to find some mapping function for the same input data. Using the MVPR code we can place the vectors into a matrix as (1). This matrix of target data can be split into training, validation or test and passed directly into the MVPR class. Alternatively, they can be passed seperately into the code, such that different polynomial orders can be used. 
        
        ![image](https://user-images.githubusercontent.com/60707891/115009673-70d89780-9ea4-11eb-97f3-a02e29d4fb30.png)
        
        
        First import the data:
        ```
        df= pd.read_excel(r'C:\Users\filepath\data.xlsx')
        data=df.to_numpy()
        df= pd.read_excel(r'C:\Users\filepath\targets.xlsx')
        targets=df.to_numpy()
        ```
        select the proportions of data for cross-validation
        ```
        proportion_training = 0.9
        num_train_samples = round(len(data[:,0])*0.8)
        num_val_samples = round(len(data[:,0]))-num_train_samples
        ```
        standardise:
        ```
        mean_dat = data[:, :].mean(axis=0)
        std_dat = data[:, :].std(axis=0)
        
        data -= mean_dat
        
        if 0 not in std_dat:
            data[:, :] /= std_dat
        
        training_data = data[:num_train_samples, :]
        training_targets = targets[:num_train_samples, :]
        
        validation_data = data[-num_val_samples :, :]
        validation_targets = targets[-num_val_samples :, :]
        ```
        call the following
        ```
        M = MVP.MVPR_forward(training_data, training_targets, validation_data, validation_targets)
        
        optimum_order = M.find_order()
        coefficient_matrix = M.compute_CM(optimum_order)
        
        predicted_validation = M.compute(coefficient_matrix, optimum_order, validation_data)
        
        df = pd.DataFrame(predicted_validation)
        df.to_excel(r'C:\Users\filepath\predicted.xlsx')
        ```
        The fitted curves:
        
        ![image](https://user-images.githubusercontent.com/60707891/115009854-a5e4ea00-9ea4-11eb-8774-6c87cf89c7b5.png)
        
        ![image](https://user-images.githubusercontent.com/60707891/115009871-abdacb00-9ea4-11eb-9d12-b76d45b67835.png)
        
        # Functions and arguments
        ```
        MVPR.find_order()
        ```
        This function finds the optimal order of polynomial in the range 0 to 6, using cross validation. 
        ```
        MVPR.find_order()
        ```
        This function finds the optimal order of polynomial in the range 0 to 6, using cross validation. 
        ```
        MVPR.compute_CM(order)
        ```
        This function computes the coefficient matrix which fits a polynomial to the measured data in a least squares sense. The fit is regularised using truncated singular value decomposition, which eliminates singular values under a certain threshold. Any oder can be passed into this by the user, it does not have to have the range limited inf find_oder(). 
        
        # Theory 
        
         For the theory behind the code see [[1]](#1).
        
        ## References
        <a id="1">[1]</a> 
        Hansen, P. C.  (1997). 
        Rank-deficient and Discrete Ill-posed Problems: Numerical Aspects of Linear Inversion. 
        
Keywords: Machine Learning,Regression,polynomial
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research 
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Description-Content-Type: text/markdown
