Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中如何提高不平衡数据集的查准率和查全率_Python_Machine Learning_Scikit Learn_Nlp_Precision Recall - Fatal编程技术网

Python中如何提高不平衡数据集的查准率和查全率

Python中如何提高不平衡数据集的查准率和查全率,python,machine-learning,scikit-learn,nlp,precision-recall,Python,Machine Learning,Scikit Learn,Nlp,Precision Recall,我建立了一个有监督的模型来对医学文本数据进行分类(我的输出预测疾病的积极或消极发生)。数据非常不平衡(130例阳性病例与1600例阴性病例相比,这是可以理解的,因为这种疾病是罕见的)。我首先清理数据(删除不必要的单词、柠檬化等),然后应用POS。然后,我将TfidfVectorizer和TfidfTransformer应用于此清理数据。对于分类,我尝试了SVM和Random Forest,但即使在使用GridSearchCV调整参数后,对阳性数据的准确率和召回率也仅达到56%和58%(我还将cl

我建立了一个有监督的模型来对医学文本数据进行分类(我的输出预测疾病的积极或消极发生)。数据非常不平衡(130例阳性病例与1600例阴性病例相比,这是可以理解的,因为这种疾病是罕见的)。我首先清理数据(删除不必要的单词、柠檬化等),然后应用POS。然后,我将TfidfVectorizer和TfidfTransformer应用于此清理数据。对于分类,我尝试了SVM和Random Forest,但即使在使用GridSearchCV调整参数后,对阳性数据的准确率和召回率也仅达到56%和58%(我还将class_权重设置为“平衡”)。对于如何改善这种低精度和召回率,有人有什么建议吗?多谢各位

这是我当前的管道(显然,我在运行它时只使用其中一个分类器,但我显示这两个分类器只是为了显示它们的参数)


首先,查看分类器看到的数据。测量特征和类之间的相关性(皮尔逊相关性很好),并检查是否有不相关的特征。例如,单词patient通常不被认为是stopword,但在医学数据库中,它很可能是stopword

还考虑使用更复杂的特征,如BigRAM或TrangRAM,或者甚至添加Word嵌入(例如,采用预先训练的模型,例如Word2VEC或手套,然后取平均文本向量)。


注:现在的文本分类主要是通过神经网络和单词嵌入来完成的。这就是说,您的数据集不是很大,因此可能不值得更改方法(或者出于某种原因,您可能不想更改)。

我建议您查看SE,并可能要求那里提供更面向统计数据的答案。
pipeline = Pipeline([ 

('vectors', TfidfVectorizer(ngram_range = (2,3),norm = 'l1', token_pattern = r"\w+\b\|\w+" ,min_df = 2, max_features = 1000).fit(data['final'])),

('classifier', RandomForestClassifier(n_estimators = 51, min_samples_split = 8, min_samples_leaf = 2, max_depth = 14, class_weight= 'balanced')),

('classifier', SVC(C = 1000, gamma = 1, class_weight = 'balanced', kernel='linear')),

])