Параметр "стратифицировать" из метода "train test split" (scikit Learn)

Я пытаюсь использовать train_test_split из пакета scikit узнать, но у меня возникли проблемы с параметром 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])}

есть ли у кого-нибудь идея, что происходит? Ниже приведена документация по функциям.

[...]

стратифицировать : array-like или None (по умолчанию None)

если нет, данные разделяются на стратифицированная мода, используя это как массив labels.

новое в версии 0.17: stratify разделение

[...]

5 ответов


Scikit-Learn просто говорит вам, что он не распознает аргумент "stratify", а не то, что вы используете его неправильно. Это связано с тем, что параметр был добавлен в версии 0.17, как указано в приведенной вами документации.

поэтому вам просто нужно обновить Scikit-Learn.


этой stratify параметр делает разделение так, что доля значений в произведенном образце будет такой же, как доля значений, предоставленных параметру stratify.

например, если переменная y - двоичная переменная со значениями 0 и 1 и есть 25% нулей и 75% единиц,stratify=y убедитесь, что ваш случайный сплит имеет 25% от 0и 75%1s.


для моего будущего себя, кто приходит сюда через 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 желательно для воспроизводимости.


попробуйте запустить этот код, он "просто работает":

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])

в этом контексте стратификация означает, что метод train_test_split возвращает подмножества обучения и тестирования, которые имеют те же пропорции меток классов, что и входной набор данных.