Параметр "stratify" из метода "train_test_split" (scikit Learn)
Я пытаюсь использовать train_test_split
из пакета scikit Learn, но у меня проблемы с параметром stratify
. Здесь и далее код:
from sklearn import cross_validation, datasets
X = iris.data[:,:2]
y = iris.target
cross_validation.train_test_split(X,y,stratify=y)
Тем не менее, я продолжаю получать следующую проблему:
raise TypeError("Invalid parameters passed: %s" % str(options))
TypeError: Invalid parameters passed: {'stratify': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])}
У кого-то есть идея, что происходит? Ниже приведена документация по функциям.
[...]
стратификация: массив или нет (по умолчанию нет)
Если не None, данные разделяются стратифицированно, используя это как массив меток.
Новое в версии 0.17: расслоение
[...]
Ответы
Ответ 1
Scikit-Learn просто говорит вам, что не признает аргумент "стратифицировать", а не то, что вы используете его неправильно. Это связано с тем, что параметр был добавлен в версии 0.17, как указано в цитируемой вами документации.
Поэтому вам просто нужно обновить Scikit-Learn.
Ответ 2
Этот stratify
параметр делает раскол так, что доля значений в образце, полученном будет таким же, как соотношение значений параметра, предоставленных stratify
.
Например, если переменная y
представляет собой двоичную категориальную переменную со значениями 0
и 1
и 25% нулей и 75% единиц, stratify=y
будет убедиться, что ваш случайный раскол имеет 25% от 0
и 75% от 1
' s.
Ответ 3
Для моего будущего, который приходит сюда через Google:
train_test_split
теперь находится в model_selection
, следовательно:
from sklearn.model_selection import train_test_split
# given:
# features: xs
# ground truth: ys
x_train, x_test, y_train, y_test = train_test_split(xs, ys,
test_size=0.33,
random_state=0,
stratify=ys)
это способ его использования. Желательно, чтобы значение random_state
воспроизводимым.
Ответ 4
В этом контексте стратификация означает, что метод train_test_split возвращает учебные и тестовые подмножества, которые имеют одинаковые пропорции меток классов в качестве входного набора данных.
Ответ 5
Попробуйте запустить этот код, он "просто работает":
from sklearn import cross_validation, datasets
iris = datasets.load_iris()
X = iris.data[:,:2]
y = iris.target
x_train, x_test, y_train, y_test = cross_validation.train_test_split(X,y,train_size=.8, stratify=y)
y_test
array([0, 0, 0, 0, 2, 2, 1, 0, 1, 2, 2, 0, 0, 1, 0, 1, 1, 2, 1, 2, 0, 2, 2,
1, 2, 1, 1, 0, 2, 1])