背景:我在数据上使用了两种不同的ML分类器,得到了三种不同的分类(2,1和0)。这里与类本身的性质无关。我想比较每个分类器的结果,并基于匹配在进一步的数据框架中分离数据。下面是我从另一个数据框创建一个数据框来根据分类器结果进行分析的地方:
步骤1:
analyze['noclean_match'] = analyze['vader_class_form']==analyze['roberta_class_formatted']
analyze['clean_match'] = analyze['vader_class_no_SW'] == analyze['roberta_class_nosw']
正如您所看到的,我正在尝试基于现有列下数据框的每一行上的整数值(2、1或0)的等效性来创建新的数据框列。
步骤2:现在我创建一个数据框架,用于对结果类进行视觉检查,并重置索引:
manual_exam = analyze[analyze['clean_match'] == True].sample(n=50)
manual_exam.reset_index(drop=True, inplace = True)
我所期望的是,在50个样本的所有情况下,我的每一行对于每个模型都应该具有相同的结果(2,1或0)。然而,在检查数据时,情况并非如此。例如:
print(manual_exam['vader_class_form'].iloc[1])
print(manual_exam['roberta_class_formatted'].iloc[1])
收益率:
2
1
不是2
2
所以我知道我正在做一些不正确的事情,但我不确定是否在步骤1中的条件逻辑创建基于行等效性的列,或者如果它是步骤2,我在选择列后根据布尔逻辑创建一个新的数据框。
有什么想法我可以补救这个吗?这是我的数据框架信息:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1405 entries, 0 to 33
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 job_id 1405 non-null object
1 formatted 1405 non-null object
2 vader_class_form 1405 non-null int64
3 roberta_class_formatted 1405 non-null int64
4 vader_class_no_SW 1405 non-null int64
5 roberta_class_nosw 1405 non-null int64
6 noclean_match 1405 non-null bool
7 clean_match 1405 non-null bool
我可以用另一种方法解决我的问题,但我不确定这是最有效/最优雅的方法:
manual_exam = analyze[analyze['vader_class_form']== analyze['roberta_class_formatted']].sample(n=50)