【发布时间】:2022-01-15 11:06:36
【问题描述】:
我对数据挖掘,尤其是文本分析有点陌生。我正在我的数据集上训练一个逻辑回归模型,并且我试图获得尽可能好的准确度,至少在 0.6 左右。但我似乎不能超过 0,5。 这是我的数据集:
df = pd.read_csv('https://raw.githubusercontent.com/cpedroni/DMML2021_Microsoft/main/data/training_data.csv')
df_pred = pd.read_csv('https://raw.githubusercontent.com/cpedroni/DMML2021_Microsoft/main/data/unlabelled_test_data.csv')
我使用带有 tfidf 的管道训练了我的模型:
tfidf_params = dict(sublinear_tf= True,
min_df = 4,
norm= 'l2',
ngram_range= (1,4),
tokenizer= word_tokenize)
clf = Pipeline(steps=[
('features', TfidfVectorizer(**tfidf_params)),
('model', LogisticRegression(random_state=0, solver='lbfgs', max_iter=300))
])
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
def metrics(y_test, y_pred):
precision = precision_score(y_test, y_pred, average=None)
recall = recall_score(y_test, y_pred, average=None)
f1 = f1_score(y_test, y_pred, average=None)
print("Precision: " + str(precision_score(y_test, y_pred, average='micro')))
print("Recall: " + str(recall_score(y_test, y_pred, average='micro')))
print("F1: " + str(2 * (precision * recall) / (precision + recall)))
print("Accuracy: " + str(accuracy_score(y_test, y_pred)))
metrics(y_test, y_pred)
我得到了0.471875的准确度分数,但我想让它更高,所以尝试像这样进行网格搜索:
from sklearn.model_selection import GridSearchCV
param_grid_lr = {
'max_iter': [20, 50, 100, 200, 500, 1000],
'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],
'class_weight': ['balanced']
}
logModel_grid = GridSearchCV(estimator=LogisticRegression(random_state=1234), param_grid=param_grid_lr, verbose=1, cv=10, n_jobs=-1)
logModel_grid.fit(X_train, y_train)
print(logModel_grid.best_estimator_)
但是我得到了这个我不明白的错误:ValueError: could not convert string to float。我收到此行logModel_grid.fit(X_train, y_train) 的此错误,但在进行网格搜索之前我没有收到日志模型的此错误。你知道为什么GridSearchCV 会带来这个错误吗?
【问题讨论】:
标签: python logistic-regression data-mining hyperparameters tfidfvectorizer