我正在编写一种算法,以便将数据集中的tweet分类为正/负,我想测试其准确性。为了做到这一点并找到最佳的解决方案,我想要一个基准(使用经典的ML算法)。在对推文进行预处理之后,受相关工作的启发,我首先使用了词袋模型进行了探索,并成功地运行了代码并计算了准确性和Fscore。经过一些文本预处理并将数据集分为训练集和测试集:
from sklearn.cross_validation import train_test_split
X_train, X_test1, y_train, y_test1 = train_test_split(X, y, test_size = 0.11, random_state = 0)
我希望能够从测试集中消除所有标记为负面的推文(仅保留正面的推文),并计算算法的精度,召回率和Fscore(然后对标记为推文的推文执行相同的操作正面)。我尝试这样做:
finRow = len(X_test1)
finCol = len(X_test1[0])
for o in range(0, finrow):
if y_test1[o]== 1:
del y_test1[o]
X_test1 = np.delete(X_test1, o, axis=0)
但我收到此错误:
Traceback (most recent call last):
File "<ipython-input-4-5ed18876a8b5>", line 2, in <module>
if y_test1[o]== 1:
IndexError: list index out of range
X_test1 包含推文,大小为1102 x 564, y_test1 包含零和一(推文为正或负),大小为1102。当 y_test1 的长度从1102减少到774时,错误会出现在第774次迭代中。
现在,我也尝试这样做:
a = 1
for o in range(0, finrow):
if (y_test1[o] == 1 and o <= finrow - a):
del y_test1[o]
a = a + 1
X_test1 = np.delete(X_test1, o, axis=0)
但是我仍然遇到相同的错误,我不知道这是否是删除矩阵行和列表元素的最佳方法,因为当我检查 y_test1的值我仍然有一些(应该是一开始的)一些(不是,不是全部)元素。
我对此很陌生,不知道我的错误在哪里。
答案 0 :(得分:1)
您可能想看看scikit-learn中的功能for(int i = 1; i < capp_number; i+= 2)
。
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html
这是计算每个类的Precision / Recall和F1的最简单方法。
您只需要传递两个数组,第一个带有真实的预测,第二个带有来自分类器的预测,例如:
classification_report
答案 1 :(得分:0)
y_test == 0
创建一个布尔数组,可用于过滤y_test
和x_test
中的行。
positive_indexes = y_test == 0
y_test_positive = y_test[positive_indexes]
x_test_positive = x_test[positive_indexes]
答案 2 :(得分:0)
In [328]: alist = list(range(10))
In [329]: alist
Out[329]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
从列表中删除项目会更改后续项目的索引。
In [330]: del alist[7] # removes the 7
In [331]: alist
Out[331]: [0, 1, 2, 3, 4, 5, 6, 8, 9]
In [332]: del alist[8] # removes the 9, not the 8
In [333]: alist
Out[333]: [0, 1, 2, 3, 4, 5, 6, 8]
In [334]: del alist[8] # with only 8 items left, error
IndexError: list assignment index out of range
从结尾开始删除项目将保留其余项目的索引:
In [335]: alist = list(range(10))
In [336]: del alist[9]
In [337]: del alist[8]
In [338]: del alist[7]
In [339]: del alist[6]
In [340]: alist
Out[340]: [0, 1, 2, 3, 4, 5]