Как рассчитать коэффициент q2 для проверки методом линейного регрессии по принципу «оставь один раз»? - PullRequest
0 голосов
/ 24 марта 2020

Вот мой код:

import pandas as pd 
import numpy as np
import seaborn as sns
%matplotlib inline
import matplotlib.pyplot as plt
Porphs_data = pd.read_excel('I:\\Porphyrins\\26_4-Descs_varI_22-3-20.xlsx', index_col=0)
y = Porphs_data.LogFi
X = Porphs_data.drop(['LogFi'], axis=1)
# Select upper triangle of correlation matrix
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))
# Find index of feature columns with correlation greater than 0.95
to_drop = [column for column in upper.columns if any(upper[column] > 0.95)]
# Drop features 
X = X.drop(Porphs_data[to_drop], axis=1)
X_train = X.drop(["(p-Br)4-TPP", "5,10-NO2-etioporphyrin I", "Deuteroporphyrin-IX-DME", 
                  "N-CH3-Octaethylporphyrin", "Porphine"], axis=0)
y_train = y.drop(["(p-Br)4-TPP", "5,10-NO2-etioporphyrin I", "Deuteroporphyrin-IX-DME", 
                  "N-CH3-Octaethylporphyrin", "Porphine"], axis=0)
X_test = X.loc[["(p-Br)4-TPP", "5,15-NO2-etioporphyrin I", "Deuteroporphyrin-IX-DME", 
                  "N-CH3-Octaethylporphyrin", "Porphine"]]
y_test = y.loc[["(p-Br)4-TPP", "5,10-NO2-etioporphyrin I", "Deuteroporphyrin-IX-DME", 
                  "N-CH3-Octaethylporphyrin", "Porphine"]]
from sklearn import linear_model
lm = linear_model.LinearRegression()
lm.fit(X_train, y_train)

Получаем коэффициент детерминации:

from sklearn.metrics import r2_score
y_pred = lm.predict(X_train)
r2_score(y_train, y_pred)

Теперь я пытаюсь получить q2 для перекрестной проверки с пропуском один раз:

from sklearn.model_selection import LeaveOneOut
from sklearn.linear_model import LinearRegression
loo_lm = LinearRegression(lm, LeaveOneOut())
loo_lm.fit(X_train, y_train)
loo_lm.score(X_train, y_train)      

Но значение q2, которое я получаю, имеет то же значение, что и коэффициент определения обучающего набора.

Вот еще одна попытка получить q2:

from sklearn.model_selection import cross_val_score
cvs=cross_val_score(lm, X_train, y_train, cv=21)
cvs
mean_cross_val_score = cvs.mean()
mean_cross_val_score

но выдает ошибку: UndefinedMetricWarning: оценка R ^ 2 не точно определена с менее чем двумя выборками.

Помогите, пожалуйста, подсчитать значение q2 для перекрестной проверки с пропуском одного!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...