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) {
}
}
}
}