Wenn wir eine Analyse mit einer kleinen Datenmenge durchgeführt haben, haben wir die LeaveOneOut-Schnittpunktüberprüfung als Modellbewertungsmethode verwendet, damit wir sie gemeinsam nutzen können.
Bei der Kreuzvalidierung von LeaveOneOut werden Schulungen und Tests an den Daten von einer n Stichprobe durchgeführt, wobei eine Stichprobe als Testdaten und die andere als Zugdaten verwendet wird. Während des Austauschs der Testdaten wird dies dann n-mal wiederholt, um die Leistung des Modells zu bewerten. Apropos k-Split-Schnittpunktüberprüfung: k ist der gleiche Wert wie n Stichproben der Datenmenge. Es scheint verwendet zu werden, wenn die Datenmenge gering ist.
Im Folgenden wird die einfache Regression mithilfe der LOO-Methode bewertet.
Es gibt einen bestimmten DataFrame, und die für die einfache Regression verwendete erklärende Variable wird durch "loo_column" angegeben.
Angenommen, der DataFrame mokuteki
enthält eine Zielvariable.
Es trainiert n-mal beim Datenaustausch und berechnet schließlich "RootMeanSquaredError" und gibt es zurück.
Statsmodels
wird für die einfache Regression verwendet.
loo.py
from sklearn.model_selection import LeaveOneOut
from statsmodels import api as sm
loo_column = "setsumei"
def loo_rmse(df,loo_column):
loo_X = df[loo_column]
#Erstellen Sie einen einfachen konstanten Regressionsbegriff.
loo_X = sm.add_constant(loo_X)
loo_y = df_analytics["recognition"]
loo = LeaveOneOut()
loo.get_n_splits(loo_X)
# square_Liste zum Speichern von Fehlern
se_list = list()
#Wiederholen Sie die Daten, während Sie die Indizes der für Zug und Test verwendeten Daten austauschen
for train_index, test_index in loo.split(loo_X):
X_train, X_test = loo_X.iloc[train_index], loo_X.iloc[test_index]
y_train, y_test = loo_y.iloc[train_index], loo_y.iloc[test_index]
#Einfache Regression lernen
model = sm.OLS(y_train,X_train)
result = model.fit()
#Vorhersage für Testdaten basierend auf Lernergebnissen. Erhalten Sie den Fehler.
pred = result.params["const"] + result.params[loo_column] * X_test[loo_column].values[0]
diff = pred - y_test.values[0]
#Quadrieren Sie den Fehler und speichern Sie
se_list.append(diff**2)
#Den quadratischen Fehler mitteln, die Route nehmen und zurückkehren
ar = np.array(se_list)
print("RMSE:",np.sqrt(ar.mean()))
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.LeaveOneOut.html
Vielen Dank.
Recommended Posts