Регистрация

Уже есть аккаунт? Вход

Уже есть аккаунт? Sign In Now

Вход

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Зарегистрироваться

Забыли пароль?

Вы не вошли, Зарегистрироваться

Forgot Password

Уже есть аккаунт? Sign In Now

Вы должны войти, чтобы задать вопрос.

Забыли пароль?

Необходима учетная запись, Зарегистрироваться
ВходНовый

Вопросы — CODERIDE.RU

Вопросы — CODERIDE.RU Logo Вопросы — CODERIDE.RU Logo

Вопросы — CODERIDE.RU Navigation

  • Главная
  • О нас
  • Контакты
Поиск
Задать вопрос

Mobile menu

Close
Задать вопрос
  • Главная
  • О нас
  • Контакты
  • Вопросы
    • Новые
    • Рейтинговые
    • Просматриваемые
  • Теги
Главная/ Вопросы/Q 342
In Process
  • 0

Стратифицированная перекрестная проверка или выборка для разделения тестов на основе нескольких функций в python

  • 0

train_test_split , StratifiedShuffleSplit и StratifiedKFold от sklearn все стратифицируются на основе меток классов (y-переменная или столбец target_column). Что делать, если мы хотим выполнить выборку на основе столбцов функций (x-переменных), а не на целевом столбце. Если бы это был только один признак, было бы легко стратифицировать на основе этого одного столбца, но что, если столбцов признаков много и мы хотим сохранить пропорции популяции в выбранной выборке?

Ниже я создал df, который изменил население с большим количеством людей с низким доходом, большим количеством женщин, наименьшим количеством людей из Калифорнии и большинством людей из штата Массачусетс. Я хочу, чтобы выбранная выборка имела эти характеристики, т. е. больше людей с низким доходом, больше женщин, меньше всего людей из Калифорнии и большинство людей из Массачусетса

import random
import string
N = 20000 # Total rows in data
names    = [''.join(random.choices(string.ascii_uppercase, k = 5)) for _ in range(N)]
incomes  = [random.choices(['High','Low'], weights=(30, 70))[0] for _ in range(N)]
genders  = [random.choices(['M','F'], weights=(40, 60))[0] for _ in range(N)]
states   = [random.choices(['CA','IL','FL','MA'], weights=(10,20,30,40))[0] for _ in range(N)]
targets_y= [random.choice([0,1]) for _ in range(N)]

df = pd.DataFrame(dict(
        name     = names,
        income   = incomes,
        gender   = genders,
        state    = states,
        target_y = targets_y
    ))

Еще одна сложность возникает, когда для некоторых характеристик у нас очень мало примеров, и мы хотим включить по крайней мере примеры n в выбранный образец. Рассмотрим этот пример:

single_row = {'name' : 'ABC',
'income' : 'High',
'gender' : 'F',
'state' : 'NY',
'target_y' : 1}

df = df.append(single_row, ignore_index=True)

df

enter image description here

.

Я хочу, чтобы эта единственная добавленная строка всегда включалась в раздел теста (n=1 здесь).

cross-validationpandaspythonscikit-learntrain-test-split
  • Поделиться
Abhi25t 27.06.2021 18:56
  • 1 1 Ответ
  • 8 Просмотров
Ответ

    Похожие вопросы

    • Python и GmailAPI: Как отслеживать входящие сообщения Gmail для получения новых писем?
    • Получить идентификатор пользователя из представления на основе классов
    • как сделать многопользовательскую игру в кости Клинта [дубликат]
    • Правильное преобразование байтов base64 в строку и отображение в cv2.imshow
    • Просмотр списка в Django
    • Изображения Django не отображаются, когда DEBUG=False на Heroku
    • Пожалуйста, помогите мне понять, почему модель классификации изображений Tensorflow слишком подходит
    • Ошибка значения(“Можно сравнивать только объекты серии с одинаковыми метками”) - набор данных boston.csv
    • Экспорт нескольких моделей Django в один файл
    • Что означает “типизировано=Ложно”?

    1 Ответ

    • Популярные
    • Старые
    • Новые
    1. Это может быть достигнуто с помощью кода pandas groupby:

      Давайте сначала проверим характеристики населения:

      grps = df.groupby(['state','income','gender'], group_keys=False)
      grps.count()
      

      enter image description here

      Далее давайте создадим тестовый набор с 20% исходных данных

      test_proportion = 0.2
      at_least = 1
      test = grps.apply(lambda x: x.sample(max(round(len(x)*test_proportion), at_least)))
      test
      

      enter image description here

      характеристики тестового набора:

      test.groupby(['state','income','gender']).count()
      

      enter image description here

      Затем мы создаем набор поездов как разницу между исходным df и тестовым набором

      print('No. of samples in test  =', len(test))
      train = set(df.name) - set(test.name)
      print('No. of samples in train =', len(train))
      

      Количество образцов в тесте = 4000

      Количество образцов в поезде = 16001

      • Поделиться
      Abhi25t 27.06.2021 18:56
      • 0
      • Ответить

    Ответить
    Отменить ответ

    Вы должны авторизоваться, чтобы добавить ответ.

    Забыли пароль?

    Необходима учетная запись, Зарегистрироваться

    Explore

    • Главная
    • Вопросы
      • Новые
      • Просматриваемые
      • Рейтинговые
    • Теги
    • .net
    • android
    • arrays
    • asp-net
    • c
    • c#
    • c++
    • css
    • html
    • ios
    • java
    • javascript
    • jquery
    • mysql
    • node-js
    • php
    • r
    • ruby-on-rails
    • sql

    2021 CODERIDE.RU

    Вставить/изменить ссылку

    Введите адрес назначения (URL)

    Или сделайте ссылку на существующий материал

      Поисковый запрос не задан. Показаны недавние элементы. Воспользуйтесь поиском или клавишами вверх/вниз, чтобы выбрать элемент.