Я пытаюсь использовать 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])}
Есть ли у кого-нибудь представление о том, что происходит? Ниже представлена документация по функциям.
[...]
stratify : array-like или None (по умолчанию None)
Если не None, данные разделяются стратифицированным образом, используя это как массив меток.
Новое в версии 0.17: расслоение разбиения
[...]
split
scikit-learn
training-data
test-data
Дэниел Оливо
источник
источник
Ответы:
Scikit-Learn просто говорит вам, что не распознает аргумент «расслоение», а не то, что вы его неправильно используете. Это связано с тем, что параметр был добавлен в версии 0.17, как указано в процитированной вами документации.
Так что вам просто нужно обновить Scikit-Learn.
источник
scikit-learn 0.21.2 py37h2a6a0b8_0 conda-forge
Этот
stratify
параметр выполняет разделение, так что пропорция значений в произведенной выборке будет такой же, как пропорция значений, предоставленных параметруstratify
.Например, если переменная
y
является бинарной категориальная переменная со значениями0
и1
и есть 25% нулей и 75% из них,stratify=y
убедитесь , что ваш случайный раскол имеет 25%0
«s и 75%1
» с.источник
stratify
. Затем, во-вторых, для исправления дисбаланса вам в конечном итоге потребуется выполнить передискретизацию или недостаточную выборку на обучающем наборе. Многие классификаторы Sklearn имеют параметр, называемый весовым коэффициентом, который вы можете установить как сбалансированный. Наконец, для несбалансированного набора данных вы также можете выбрать более подходящий показатель, чем точность. Попробуйте, F1 или область под ROC.Для моего будущего себя, пришедшего сюда через Google:
train_test_split
сейчас вmodel_selection
игре, следовательно:это способ его использовать. Установка
random_state
желательна для воспроизводимости.источник
В этом контексте стратификация означает, что метод train_test_split возвращает обучающие и тестовые подмножества, которые имеют те же пропорции меток классов, что и входной набор данных.
источник
Попробуйте запустить этот код, он «просто работает»:
источник
sklearn
версией '0.17', дистрибутив Anaconda для Python 3,5. Я могу только предложить проверить еще раз, если вы правильно ввели код и обновили программное обеспечение.sklearn
...