从数组中随机选择正样本和负样本

我编写了以下函数:

def searchPosotive (X,y, num):    pos = sample(list(compress(X, y)), num)    return (pos)

这个函数接受两个numpy矩阵,Xy。这两个数组是相关的,即X[i]y[i]的标签。标签要么是1,要么是0。

这个函数会从X中随机选择num个值,这些值对应的y值等于1,并返回一个(num, n)的数组,其中n是X的列数。

我需要得到包含这些值的索引列表。例如,如果pos[a] == X[a],那么a需要在这个列表中。我该如何做到这一点?

我还需要对寻找负样本时进行同样的操作。我当前使用的函数是:

def searchNegative (X,y, num):    mat=X[y==0]    rows = np.random.choice(len(mat), size=num,replace=False)    mat=mat[rows,:]    return (mat)

回答:

你可以使用np.where来获取你的正(或负)Y的索引。然后,从这些索引中进行抽样。这里是一个用于正样本的函数,你可以修改它来选择正样本或负样本,或者为负样本编写另一个函数:首先,假设:

>>> yarray([1, 0, 1, 1, 1, 0, 0, 1, 0, 1])>>> Xarray([[-25,  62,  94,  70,  96,  70,  38, -18, -57,   1],       [ 40,  86, -98, -48,  40,  29,   4, -83,  44, -12],       [ 57,  23, -96,  97, -24, -93, -33, -64,  61,  15],       [ 44,  29,  31, -38,  11,  85,  37, -96, -37, -70],       [-10, -37, -24, -66,  27, -44, -16, -50,   3, -91],       [-97,  81,  52,  41,  39, -14,  95,  76,  28, -32],       [-74,  49, -91, -65, -96,  86, -13,  43,  22,  80],       [  5,  20, -77,  74, -89,  46, -90,  95,  30,  13],       [ 36,   6,  55, -74, -49, -66,  38,  37, -84,  28],       [-23, -28, -32, -30,  -4, -52,  -4,  99, -67, -98]])

因此…

>>> def sample_positive(X, y, num):...     pos_index = np.where(y == 1)[0]...     rows = np.random.choice(pos_index, size=num, replace=False)...     mat = X[rows,:]...     return (mat, rows)...>>> X_sample, idx = sample_positive(X, y, 2)>>> X_samplearray([[-23, -28, -32, -30,  -4, -52,  -4,  99, -67, -98],       [-10, -37, -24, -66,  27, -44, -16, -50,   3, -91]])>>> idxarray([9, 4])>>> Xarray([[-25,  62,  94,  70,  96,  70,  38, -18, -57,   1],       [ 40,  86, -98, -48,  40,  29,   4, -83,  44, -12],       [ 57,  23, -96,  97, -24, -93, -33, -64,  61,  15],       [ 44,  29,  31, -38,  11,  85,  37, -96, -37, -70],       [-10, -37, -24, -66,  27, -44, -16, -50,   3, -91],       [-97,  81,  52,  41,  39, -14,  95,  76,  28, -32],       [-74,  49, -91, -65, -96,  86, -13,  43,  22,  80],       [  5,  20, -77,  74, -89,  46, -90,  95,  30,  13],       [ 36,   6,  55, -74, -49, -66,  38,  37, -84,  28],       [-23, -28, -32, -30,  -4, -52,  -4,  99, -67, -98]])>>> yarray([1, 0, 1, 1, 1, 0, 0, 1, 0, 1])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注