0

Итак, я пытаюсь классифицировать определенные текстовые документы на три класса.Случайный лес в искры

Я написал следующий код для кросс проверки в искре

from pyspark.ml.tuning import CrossValidator, ParamGridBuilder 
from pyspark.ml.evaluation import MulticlassClassificationEvaluator 
# Define a grid of hyperparameters to test: 
# - maxDepth: max depth of each decision tree in the GBT ensemble 
# - maxIter: iterations, i.e., number of trees in each GBT ensemble 
# In this example notebook, we keep these values small. In practice, to get the highest accuracy, you would likely want to try deeper trees (10 or higher) and more trees in the ensemble (>100). 

paramGrid = ParamGridBuilder()\ 
    .addGrid(jpsa.rf.maxDepth, [2,4,10])\ 
    .addGrid(jpsa.rf.numTrees, [100, 250, 600,800,1000])\ 
    .build() 

# We define an evaluation metric. This tells CrossValidator how well we are doing by comparing the true labels with predictions. 
evaluator = MulticlassClassificationEvaluator(metricName="f1", labelCol=jpsa.rf.getLabelCol(), predictionCol=jpsa.rf.getPredictionCol()) 
# Declare the CrossValidator, which runs model tuning for us. 
cv = CrossValidator(estimator=pipeline, evaluator=evaluator, estimatorParamMaps=paramGrid,numFolds=5) 

cvModel=cv.fit(jpsa.jpsa_train) 

evaluator.evaluate(cvModel.transform(jpsa.jpsa_train)) 

Я не так много данных. 115 общее наблюдение (документы с надписями). Я разбиваю их на тренировки и испытания 80:35. На тренировке я использую 5-кратное перекрестное подтверждение с использованием вышеуказанного кода.

Оценщик выше дал мне следующие данные о цели обучения.

evaluator.evaluate(cvModel.transform(jpsa.jpsa_train)) 
0.9021290600237969 

Я использую f1 здесь, так как я не могу найти aucROC для MulticlassEvaluator в Спарк в качестве опции для оценщиком. У этого есть это для Двоичного. Я знаю, что AUC для двоичного класса, но тогда мы можем получить комбинированную или среднюю AUC для мультикласса, построив различные двоичные классы и получив их AUC. Изучение Sri-kit делает то же самое для AUC класса Multi.

Однако, когда я использую оценщика на тестовых данных, мой показатель f1 является жалким.

Это указывает на то, что он перерабатывает. Также, если я не использую 1000 и 800 деревьев в пространстве поиска hyparameter и просто держу его до 600 и 800, моя точность теста составляет 69%. Значит, это означает, что больше деревьев ведет к переобучению? Что странно, поскольку это противоречит тому, что и как работают Random Forests. Больше tress уменьшает дисперсию и приводит к меньшему переобучению (на самом деле ppl даже предлагает иногда случайные леса не перерабатывать, хотя я не согласен с тем, что с очень небольшим количеством данных и сложным лесом он может).

Это то, что здесь происходит? Меньше данных и больше нет. деревьев, ведущих к переобучению?

Также как получить меру точности проверки перекрестных ссылок? В настоящее время оценщик находится на учебных данных. Я не хочу, чтобы это было мерой выбора алго. Я хочу данные проверки. Можно ли получить эту оценку OOB внутри этой оценки CV?

ответ

0

Выбор параметров является важным аспектом при разработке моделей машинного обучения. Для этого существует несколько способов. Один из них был бы таким. Используйте 50% данных (стратифицированных) для выбора параметров. Разделите эти данные на 10 раз. Теперь выполните 10-кратное перекрестное подтверждение наряду с поиском сетки с параметрами настройки. Обычно параметры для настройки в случайном лесу - это количество деревьев и глубина каждого дерева (есть и другие параметры, такие как количество функций, которые нужно выбрать для каждого разделения, но обычно параметр по умолчанию работает хорошо).

Также верно, что большее количество деревьев может уменьшить дисперсию, но слишком велико, что может увеличить смещение. Есть компромисс. Создайте сетку с числом деревьев от 10 до 100 с шагом 10, 50 или 100.

+0

Надеюсь, вы проверили мой код, прежде чем отвечать на это ?. Я сделал все это, и мой вопрос: почему это происходит? – Baktaawar

+0

@Baktaawar. Если вы пройдете ответ, я упомянул, что по мере увеличения количества деревьев разница может уменьшаться, но смещение будет увеличиваться. В вашем случае это то, что происходит. – prashanth

+0

Если нет. деревьев увеличивается, и по мере того, как вы увеличиваете смещение, это приведет к недоустройству и не переусердству. Больше смещения приводит к недоустройству. Высокая дисперсия приводит к переобучению. В моем случае кажется, что я вижу переобучение, а не подкрепление, поэтому ваш ответ, к сожалению, говорит наоборот, что неверно, на мой взгляд. – Baktaawar

Смежные вопросы