стандартный скаляр, не масштабируемый с одинаковым коэффициентом масштабирования [дубликат]

В конкретном случае вашего регулярного выражения гораздо проще и читабельнее использовать чередование:

(?:sunday|saturday)

Или вы можете создавать чередование только между двумя позициями, в которых задействовано условное регулярное выражение (это более полезен в случае, когда существует много таких условных выражений, но относится только к соседней группе захвата). Используя пример в качестве примера, мы создадим только чередование для un и atur, поскольку только те, которые вовлечены в условие:

s(?:un|atur)day

Существует 2 общих типа условных регулярное выражение. (Есть более экзотические вещи, поддерживаемые регулярным выражением Perl, но для них требуется поддержка функций, которые не имеют регулярного выражения JavaScript или другого общего механизма regex).

  1. Первый тип - это то, шаблон предоставляется как условие. Этот тип можно передразпировать в JavaScript regex. На языке, поддерживающем условное регулярное выражение, шаблон будет выглядеть следующим образом:
    (?(conditional-pattern)yes-pattern|no-pattern)
    
    В JavaScript вы можете имитировать его с опережением, с (очевидным) предположением, что исходный conditional-pattern является перспективным:
    ((?=conditional-pattern)yes-pattern|(?!conditional-pattern)no-pattern)
    
    необходим негативный внешний вид, чтобы предотвратить случаи, когда входная строка передает conditional-pattern и сбой в yes-pattern, но она может соответствовать no-pattern. Это безопасно, потому что положительный внешний вид и негативный внешний вид логически совпадают друг с другом.
  2. Второй тип - это ссылка на группу захвата (имя или номер) , и условие будет оценено как true, если группа захвата имеет совпадение. В этом случае нет простого решения. Единственный способ, о котором я думаю, - это дублирование, как то, что я сделал с вашим примером в качестве примера. Это, конечно, уменьшает ремонтопригодность. Можно создать регулярное выражение, записав их по частям (в литеральном RegExp), извлеките строку с атрибутом source, затем соедините их вместе; это позволит изменениям распространяться на другие дублированные части, но затрудняет понимание регулярного выражения и / или делает для него существенную модификацию.

Ссылки

2
задан GRS 30 January 2018 в 11:43
поделиться

1 ответ

Нет вашего максимального значения теста (т. е. 10) не будет масштабироваться до 1, а до 0,1 при правильном использовании против вычисленных max и min из данных тренировки.

Это может быть достигнуто путем вызова только min_max_scaler.transform() тестовых данных. fit() или fit_transform() следует использовать только для учебных данных.

Итак, для данных обучения код такой же:

df_train_scaled = min_max_scaler.fit_transform(df_train.values)

Но для тестирования данных он становится:

df_test_scaled = min_max_scaler.transform(df_test.values)

Таким образом, MinMaxScaler будет сохраняйте значения max и min, наблюдаемые во время подгонки () на данных обучения, а затем используйте их на тестовых данных, чтобы правильно масштабировать данные.

1
ответ дан Vivek Kumar 16 August 2018 в 10:46
поделиться
  • 1
    Спасибо за разъяснение, модель и учебная модель не работают на одной машине. Поэтому я дважды звонил min_max_scaler.fit_transform(df_train.values). Вместо этого я сделаю дамп солености min_max_scaler и загружу его в свою тестовую модель. – GRS 30 January 2018 в 12:10
  • 2
    @GRS Да, это правильный путь. :) Кроме того, вы должны использовать joblib для раскроя scikit-объекта, как рекомендуется здесь: - scikit-learn.org/stable/modules/… – Vivek Kumar 30 January 2018 в 12:12
Другие вопросы по тегам:

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