Посмотрите счет каждого сгиба при перекрестной проверке модели с использованием цикла for - PullRequest
1 голос
/ 29 марта 2019

Я хочу видеть индивидуальный счет каждой подобранной модели, чтобы визуализировать силу перекрестной проверки (я делаю это, чтобы показать моим коллегам, почему перекрестная проверка важна).

У меня есть файл .csv с 500 строками, 200 независимыми переменными и 1 двоичной целью. Я определил skf, чтобы сложить данные 5 раз, используя StratifiedKFold.

Мой код выглядит так:

X = data.iloc[0:500, 2:202]
y = data["target"]
skf = StratifiedKFold(n_splits = 5, random_state = 0)
clf = svm.SVC(kernel = "linear")
Scores = [0] * 5
for i, j in skf.split(X, y):
    X_train, y_train = X.iloc[i], y.iloc[i]
    X_test, y_test = X.iloc[j], y.iloc[j]
    clf.fit(X_train, y_train)
    clf.score(X_test, y_test)

Как видите, я присвоил список из 5 нулей Scores. Я хотел бы назначить clf.score(X_test, y_test) каждого из 5 предсказаний в список. Однако индексы i и j не являются {1, 2, 3, 4, 5}. Скорее, это номера строк, используемые для складывания фреймов данных X и y.

Как я могу назначить результаты тестов каждой из k встроенных моделей в Scores в этом цикле? Нужен ли для этого отдельный индекс?

Я знаю, что использование cross_val_score буквально делает все это и дает вам среднее геометрическое из k баллов. Однако я хочу показать своим коллегам, что происходит за функциями перекрестной проверки, которые есть в библиотеке sklearn.

Заранее спасибо!

1 Ответ

1 голос
/ 29 марта 2019

Если я понял вопрос, и вам не нужно какое-либо конкретное индексирование для результатов:

from sklearn.model_selection import StratifiedKFold
from sklearn.svm import SVC

X = np.random.normal(size = (500, 200))
y = np.random.randint(low = 0, high=2, size=500)
skf = StratifiedKFold(n_splits = 5, random_state = 0)
clf = SVC(kernel = "linear")
Scores = []
for i, j in skf.split(X, y):
    X_train, y_train = X[i], y[i]
    X_test, y_test = X[j], y[j]
    clf.fit(X_train, y_train)
    Scores.append(clf.score(X_test, y_test))

Результат:

>>>Scores
[0.5247524752475248, 0.53, 0.5, 0.51, 0.4444444444444444]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...