当条件保持在Python中时,从numpy数组中的列表和行中删除元素

时间:2018-10-30 22:09:57

标签: python numpy nlp delete-row del

我正在编写一种算法,以便将数据集中的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的值我仍然有一些(应该是一开始的)一些(不是,不是全部)元素。

我对此很陌生,不知道我的错误在哪里。

3 个答案:

答案 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_testx_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]