【问题标题】:Train/Test split object detection训练/测试分割对象检测
【发布时间】:2020-06-18 08:39:46
【问题描述】:

是否有任何脚本/函数来拆分数据,计算每个图像中的类出现次数并平衡它们? 我以这种方式尝试过 sklearn train_test_split:

data = pd.read_csv('train_labels.csv')
data.head()

类是我想要预测的,在一张图像上我可以有 0..n 个矩形,每个矩形都有一个类。

data = data.drop_duplicates(subset="filename")
y = data['class']
X = data.drop('class',axis = 1)
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2)

但是,当我删除文件名中的重复项时,我会丢失信息,也许我会将文件发送到与许多其他类一起训练或测试,但如果我不删除它们,我可以在训练和测试中拥有一个文件。

感谢您的帮助。

【问题讨论】:

标签: machine-learning scikit-learn computer-vision object-detection train-test-split


【解决方案1】:

他们是一个库 scikit-multilearn,有助于拆分多标签数据。

安装:pip install scikit-multilearn

文档:http://scikit.ml/stratification.html

实施:

假设在数据框中dfX1, X2 是特征列,y 是目标列。

我们的数据可以分为以下几类class1、class2、class3

df = pd.DataFrame({
"X1": [1,2,3,4,5,6,7,8],
"X2": [6,7,8,9,10,11,12,13],
"y": ["class1", "class1", "class2", "class2", "class3", "class3", "class1", "class2"]})

运行上面的代码后,我们有了数据框:

    X1  X2  y
0   1   6   class1
1   2   7   class1
2   3   8   class2
3   4   9   class2
4   5   10  class3
5   6   11  class3
6   7   12  class1
7   8   13  class2

但 scikit multilearn 适用于一个热门目标列。所以我们必须转换我们的目标列。

one_hot_classes = pd.get_dummies(df["y"])

将输出:

  class1 class2 class3
0   1      0      0
1   1      0      0
2   0      1      0
3   0      1      0
4   0      0      1
5   0      0      1
6   1      0      0
7   0      1      0

我们将删除 y 列并连接 one_hot_classes

df.drop("y", axis = 1, inplace=True)
df = pd.concat([df, one_hot_classes], axis=1)

上面的代码运行后:

    X1  X2   class1 class2 class3
0   1   6       1      0      0
1   2   7       1      0      0
2   3   8       0      1      0
3   4   9       0      1      0
4   5   10      0      0      1
5   6   11      0      0      1
6   7   12      1      0      0
7   8   13      0      1      0

现在我们在 X 和 y 变量中有特征和目标列

X = df[["X1", "X2"]]
y = df[["class1", "class2", "class3"]]

现在我们将得到拆分:

from skmultilearn.model_selection import iterative_train_test_split
X_train, y_train, X_test, y_test = iterative_train_test_split(X.values, y.values, test_size = 0.5)

【讨论】:

  • 我知道这是个老问题,但我坚持如何将这个库应用于我的工作,所以我必须问这个问题。你能以iterative_train_test_split(X, y, test_size = 0.5) 提供Xy 格式吗?因为我无法通过阅读作者的文档找到答案
  • @nOpe 我已经在更详细的实现中编辑了答案
猜你喜欢
  • 1970-01-01
  • 2020-01-30
  • 2019-08-12
  • 2021-07-10
  • 1970-01-01
  • 2019-03-12
  • 2018-12-07
  • 2021-09-07
  • 1970-01-01
相关资源
最近更新 更多