Как sklearn LassoCV выполняет перекрестную проверку?

Я хотел бы знать, как sklearn.LassoCV выполняет перекрестную проверку. В частности, хотелось бы узнать, как образцы разбиты по складкам. Это случайный или детерминированный процесс?

Например, предположим, что у меня есть 100 образцов, и я использую перекрестную проверку с 10 сгибами и рассматриваю F как функцию, которая отправляет каждый образец в его сгиб.

F (1:10) = 1, F (11:20) = 2, ... или это случайный процесс (например, F (1) = 8, F (2) = 7 ...)

Дайте мне знать, если вопрос не ясен.

Спасибо :)

Хорошо, это решение:

from sklearn.linear_model import LassoCV
from sklearn.cross_validation import KFold

kf=KFold(len(y),n_folds=10,shuffle=True)
cv=LassoCV(cv=kf).fit(x,y)

person Donbeo    schedule 27.11.2013    source источник


Ответы (1)


Я предполагаю, что вы передаете ключевое слово arg cv=10 конструктору LassoCV?

В этом случае будет создан объект KFold с 10 сгибами: посмотрите, где check_cv вызывается в LinearModelCV (родитель LassoCV).

KFold принимает аргумент ключевого слова random_state (значение по умолчанию None - поэтому numpy.random попытается заполнить /dev/urandom или что-то подобное), но если shuffle равно False (что по умолчанию), то random_state фактически ничего не делает. Складки выбираются из соседних элементов в наборе данных.

Если вы хотите рандомизировать складки, вы должны создать объект KFold с shuffle=True и использовать этот объект в качестве аргумента ключевого слова cv вместо 10.

Источники:

  1. https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/coordinate_descent.py
  2. https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/cross_validation.py
person Sam Whitehall    schedule 27.11.2013