У меня есть два pd.Dataframe
. Один огромный, другой маленький.
Оба фрейма данных имеют два столбца, один из которых содержит текст, а другой - метку 0
или 1
. Имена столбцов:
X,Y
для огромного фрейма данных
и text, label
для маленького.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn import metrics
from sklearn.pipeline import Pipeline
pipeline = Pipeline([
('vect', TfidfVectorizer(max_features = 10000, min_df = 25)),
('clf', RandomForestClassifier(n_estimators = 2000, random_state=0, verbose = True, n_jobs=-1))
])
parameters = {'clf__max_depth': [200, None], 'vect__max_df': [500, 5000]}
clf = GridSearchCV(pipeline, parameters, scoring='average_precision').fit(X, Y)
predicted_label = clf.predict(text)
Результат для
metrics.classification_report(label, predicted_label, target_names=["0","1"])
выглядит так:
Metrics: precision recall f1-score support
0 0.86 1.00 0.92 3000
1 0.00 0.00 0.00 500
accuracy 0.86 3500
macro avg 0.43 0.50 0.46 3500
weighted avg 0.74 0.86 0.79 3500
Мои вопросы:
Какие изменения я могу внести, чтобы в подходе передачи-обучения он не предсказывал каждый текст должен быть 0?
Каковы возможные причины, по которым предполагается, что все тексты равны 0?
Почему GridsearchCV (scoring = '') Параметр, кажется, не влияет на обучение передачи?
Я хотел бы продолжать использовать RandomForestClassifier, если это возможно.