__init__() takes from 1 to 2 positional arguments but 3 were given (1C: Искусственный интеллект)
Пару дней назад установил ИИ на 1С с определенными библиотеками, всё работал без проблем. Решил обновить пакеты библиотек и начало выдавать такую ошибку. Похожие вопросы находил, но не принесли никакой пользы. Прошу помощи!
Вот все связанные системы:
C:\ITILServer\ITILServer.py
print('Задача Поиск по базе знаний')
print(' ../ai/itil/knowledge/search')
print(' ../ai/itil/knowledge/articles')
print()
ITILSearchModel = SearchModel(dataset_max_rows=args.max_row_dataset,
max_word_in_bag=args.max_word_in_bag,
feature_on_class=args.feature_on_class)
ITILArticlesModel = ArticlesModel(dataset_max_rows=args.max_row_dataset,
max_word_in_bag=args.max_word_in_bag,
feature_on_class=args.feature_on_class)
print()
from text_predict import (DatasetManagement,
PredictModelProba as PredictModel)
C:\ITILServer\Knowledge\Search.py
class PresetModel:
def __init__(self, min_proba=0.25, dataset_max_rows=0,
max_word_in_bag=10000, feature_on_class=3):
"""Классификация базы знаний.
- min_proba=0.25: Порог уверенности в ответах
- dataset_max_rows=0: Ограничение максимального количества строк в обучающей выборке
- max_word_in_bag=1000: Ограничение максимального количества слов в мешке слов
- feature_on_class=3: Количество нейронов на один класс в скрытом слое НС
(если 0 - используется линейная модель LogisticRegression)
"""
DatasetMng = DatasetManagement()
df_raw = DatasetMng.get_rawdata('Knowledge/data/knowledgebase.csv')
df = df_raw.drop_duplicates(keep='last')
df = DatasetMng.dataset_balance(df, 'Описание',
clf_min_size=0, clf_use_resample=False,
dataset_max_rows=dataset_max_rows)
X, X_test, y, y_test = \
DatasetMng.get_test_train_data(df['ОписаниеПроблемы'].astype('U').values,
df['Описание'].astype('U').values,
test_size=.01, min_size_to_split=10)
clf = PredictModel('Классификация базы знаний', X, y, min_proba=min_proba,
max_word_in_bag=max_word_in_bag, feature_on_class=feature_on_class)
clf.score(X_test, y_test)
self.clf = clf
print()
C:\ITILServer\text_predict.py (def init)
class PredictModelProba:
"""Модель классификации текстовых данных
в концепции Мешок слов (BagOfWords)
"""
def __init__(self, name, X, y, min_proba=0, max_word_in_bag=10000, feature_on_class=3):
self.name = name
self.min_proba = min_proba
print('Инициализация модели ', self.name, ':')
print(' - обучающих примеров: ', len(y))
self.vectorizer, X_v = get_vectorizer(X, y)
print(' - размер словаря: ', X_v.shape[1])
self.select_feature, X_f = get_select_feature(X_v, y, max_word_in_bag)
print(' - количество признаков: ', X_f.shape[1])
self.feature_names = np.array(self.vectorizer.get_feature_names())[self.select_feature.get_support()]
self.estimator = get_estimator(X_f, y, feature_on_class)
C:\ITILServer\text_predict.py (def get_select_feature)
def get_select_feature(X_v, y, max_feature=10000):
if X_v.shape[1] < max_feature:
k = 'all'
else:
k = min(X_v.shape[1]//3, max_feature)
ch2 = SelectKBest(chi2, k)
X_f = ch2.fit_transform(X_v, y)
return ch2, X_f.toarray()
Буду очень благодарен!
Ответы (1 шт):
Строка, в которой выходит ошибка:
ch2 = SelectKBest(chi2, k)
Проблема в том, что у функции SelectKBest может быть только один позиционный параметр score_func, см. её описание:
class sklearn.feature_selection.SelectKBest(score_func=<function f_classif>, *, k=10)
Параметр k у этой функции не позиционный, а именованный. Его имя нужно указывать в явном виде при вызове функции, как это ни странно выглядит:
ch2 = SelectKBest(chi2, k=k)
^^^
