Если, IIf () и если ()

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

import pickle
with open('model.pkl', 'wb') as fout:
  pickle.dump((vectorizer, clf), fout)

будущий вариант использования:

with open('model.pkl', 'rb') as fin:
  vectorizer, clf = pickle.load(fin)

X_new = vectorizer.transform(new_samples)
X_new_preds = clf.predict(X_new)

Перед тем, как сбросить векторизатор, можно удалить свойство stop_words_ векторика:

vectorizer.stop_words_ = None

, чтобы сделать демпинг более эффективным. Также, если параметры вашего классификатора разрежены (как в большинстве примеров классификации текста), вы можете преобразовать параметры от плотного к разреженному, что будет иметь огромное значение с точки зрения потребления памяти, загрузки и сброса. Сдвиньте модель:

clf.sparsify()

, которая будет автоматически работать для SGDClassifier , но в случае, если вы знаете, что ваша модель разрежена (много нулей в clf .coef_), тогда вы можете вручную преобразовать clf.coef_ в csr scipy разреженную матрицу с помощью:

clf.coef_ = scipy.sparse.csr_matrix(clf.coef_)

, а затем вы можете сохранить ее более эффективно.

10
задан Community 23 May 2017 в 11:52
поделиться

1 ответ

Чертовски, я действительно думал, что Вы говорили об операторе все время.;-) Так или иначе …

Это, Если функция работают лучше, чем функция IIf?

Определенно. Помните, это встроено в язык. Только один из двух условных аргументов должен быть оценен, потенциально сохранив дорогостоящую операцию.

Если козырь оператора, Если и IIf функционирует?

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

Dim result = If(a > 0, Math.Sqrt(a), -1.0)

' versus

Dim result As Double ' Redundant default initialization!
If a > 0 Then
    result = Math.Sqrt(a)
Else
    result = -1
End If
14
ответ дан 3 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

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