报错分析:Precision and F-score are ill-defined for being 0.0 in labels with no predicted samples

NLP情感分析任务报错如下

UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior.
如报错所说“ 你的模型的分类结果中有一类是没有被预测的 ”
同时:预测结果中,两个标签的预测结果精度为0

检查了一下我的数据集:训练集、测试集、验证集都包含情感标签0、1、2
训练集、测试机、验证集的数据比例为 6:2:2
按理来说不可能没有预测到

错误原因

------ 数据集没有打乱

打开数据集,发现我的数据标签分布基本上是:一大部分0,下面一大部分1,再往下一大部分2
就是因为这个引起问题
数据集需要随机分布,这样规规矩矩的便会出错

解决方法

方法1:python代码前加Random,将数据集打乱一下
方法2:本人JAVA用着相对熟练,因此使用JAVA将数据集一行行随机打乱,再将数据集放到Pycharm运行
JAVA代码如下:

public class randomLine {

    public static void main(String[] args){
        //获取要读取的文件
        File readFile=new File("D:/Progarmfile/IdeaProgarmfile/Utils/src/main/java/com/dwc/randomLine/input/FinNRES3/dev.txt");
        //获取要写入到的文件
        File outFile=new File("D:/Progarmfile/IdeaProgarmfile/Utils/src/main/java/com/dwc/randomLine/output/output.txt");
        //输入IO流声明
        InputStream in=null;
        InputStreamReader ir=null;
        BufferedReader br=null;

        //输出IO流说明
        OutputStream os=null;
        OutputStreamWriter osw =null;
        BufferedWriter bw=null;

        try {
            //用流读取文件
            in=new BufferedInputStream(new FileInputStream(readFile));
            os=new BufferedOutputStream(new FileOutputStream(outFile));
            //如果你文件已utf-8编码的就按这个编码来读取,不然又中文会读取到乱码
            ir=new InputStreamReader(in,"utf-8");
            osw=new OutputStreamWriter(os,"utf-8");
            //字符输入流中读取文本,这样可以一行一行读取
            br= new BufferedReader(ir);
            bw=new BufferedWriter(osw);

            String line="";
            ArrayList<String> arrayList=new ArrayList<>();

            //一行一行读取
            while((line=br.readLine())!=null){
                System.out.println(line);
                //存入到集合中,一行为一个元素
                arrayList.add(line);
            }
            System.out.println("=======================");
            //打乱集合的元素
            Collections.shuffle(arrayList);
            //遍历集合,并输出一下,跟一行一行的写入到b.txt文件中
            for (String s : arrayList) {
                System.out.println(s);
                bw.write(s);
                bw.newLine();
            }

        } catch (Exception e) {

            e.printStackTrace();
        }finally{
            //一定要关闭流,倒序关闭
            try {

                if(br!=null){
                    br.close();
                }
                if(ir!=null){
                    ir.close();
                }
                if(in!=null){
                    in.close();
                }
                if(bw!=null){
                    bw.close();
                }
                if(osw!=null){
                    osw.close();
                }
                if(os!=null){
                    os.close();
                }
            } catch (Exception e2) {

            }

        }

    }


}

你可能感兴趣的:(NLP,python,开发语言)