Source code for mechanoChemML.src.LeastR

"""
Zhenlin Wang 2019
"""


from sklearn import linear_model
from sklearn.linear_model import RidgeCV
import numpy as np

[docs]def fit(theta_matrix,X_matrix, n_jobs=1): reg = linear_model.LinearRegression(fit_intercept=False,n_jobs=n_jobs) reg.fit(theta_matrix,X_matrix) gamma_vector=reg.coef_ loss=np.mean(np.square(reg.predict(theta_matrix)-X_matrix)) return gamma_vector, loss
[docs]def fit_lasso(theta_matrix,X_matrix,alpha=0): reg =linear_model.Lasso(alpha=alpha, fit_intercept=False) reg.fit(theta_matrix,X_matrix) gamma_vector=reg.coef_ loss=np.mean(np.square(reg.predict(theta_matrix)-X_matrix)) return gamma_vector, loss
[docs]def fit_ridge(theta_matrix,X_matrix,alpha=0): reg =linear_model.Ridge(alpha=alpha, fit_intercept=False) reg.fit(theta_matrix,X_matrix) gamma_vector=reg.coef_ loss=np.mean(np.square(reg.predict(theta_matrix)-X_matrix)) score=reg.score(theta_matrix,X_matrix) return gamma_vector, loss, score
[docs]def fit_ridge_cv(theta_matrix,X_matrix,alpha=[0]): reg =RidgeCV(alphas=alpha, fit_intercept=False) reg.fit(theta_matrix,X_matrix) gamma_vector=reg.coef_ loss=np.mean(np.square(reg.predict(theta_matrix)-X_matrix)) score=reg.score(theta_matrix,X_matrix) return gamma_vector, loss, score, reg.alpha_
[docs]def multiple_fit_ridge(theta_matrix_list,X_matrix_list,map_index_list,x0,alpha=0,method='powell', options={}): num_eq=len(map_index_list) def loss_(x): fun=0 for i in range(num_eq): fun+=np.mean((np.matmul(theta_matrix_list[i],x[map_index_list[i]])-X_matrix_list[i])**2) fun+=alpha*np.mean(x**2) return fun res = minimize(loss_, x0, method='powell',options={'xtol': 1e-8, 'disp': True}) gamma_vector=res.x loss=res.fun return gamma_vector, loss