我有一个TfidfVectorizer矢量化文章集合,然后是特征选择.
vectroizer = TfidfVectorizer()
X_train = vectroizer.fit_transform(corpus)
selector = SelectKBest(chi2, k = 5000 )
X_train_sel = selector.fit_transform(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
现在,我想存储它并在其他程序中使用它.我不想TfidfVectorizer()在训练数据集上重新运行和选择特征选择器.我怎么做?我知道如何使模型持久使用,joblib但我想知道这是否与使模型持久化相同.
使用scikit-learn的评估指标评估二进制分类器的正确方法是什么?
给定y_test和y_pred作为黄金和预测标签,classification_report输出中的F1分数不应该与f1_score产生的分数相同吗?
这是我的方法:
print(classification_reprot(y_test, y_pred)
Run Code Online (Sandbox Code Playgroud)
给出下表:
precision recall f1-score support
0 0.49 0.18 0.26 204
1 0.83 0.96 0.89 877
avg / total 0.77 0.81 0.77 1081
Run Code Online (Sandbox Code Playgroud)
然而,
print(f1_score(y_test, y_pred)
Run Code Online (Sandbox Code Playgroud)
得出F1分数= 0.89
现在,根据上述输出,该模型F1的性能得分= 0.89还是0.77?
我正在使用libsvm进行分类任务.我有10倍交叉验证,其中F1得分为0.80.但是,当我将训练数据集分成两部分时(一部分用于训练,另一部分用于测试,我将其称为保持测试集),F1分数降至0.65.分割比例为.8至.2.
那么,我的问题是,在进行k折交叉验证与保持测试之间是否有任何显着差异?这两种技术中的哪一种会产生一种概括良好的模型?在这两种情况下,我的数据集都会缩放.