как подобрать процент данных в матлабе

Привет, у меня есть набор данных, назовем его dataset A, и этот набор данных состоит из выборок 500x10. У меня есть еще один dataset B, который является меткой класса для каждой из этих строк.

Dataset A   | Dataset B 
1 0.2 | 0.3 = Green 
2 0.1 | 0.1 = Red 
3 0.2 | 0.4 = Blue

и так далее...

Я хочу выбрать процент синего и красного из набора данных A, назовем его процентом A и иметь другой набор данных, который соответствует набору данных B, назовем его ResultOfA, который просто сопоставляет цвета с процентом цветов, выбранных из A.

Таким образом, новый набор данных percentOfA будет выглядеть так:

1 0.2 | 0.4 
2 0.2 | 0.4 
3 0.2 | 0.4 
4 0.1 | 0.1 

75% синего и 25% красного, то новый resultOfA будет выглядеть так:

1 Blue.
2 Blue.
3 Blue.
4 Red. 

Как это достигается в матлабе?

Извините, я бы попробовал показать код, но я не могу найти ничего для этого в документации.

НОВАЯ РЕДАКЦИЯ:

Так что я немного потерялся в том, как объяснить это лучше. Набор данных B содержит 500x1 цветов: синий, зеленый, красный и т. д.

Этот набор данных B соответствует набору данных A, но набор данных A содержит числовые значения того, что составляет эти цвета.

Все, что я хочу сделать, это использовать набор данных B, чтобы выбрать 75% синего цвета, а те, которые он выбрал, отслеживает номер строки, а затем использует эти номера строк, чтобы взять данные из набора данных A и поместить их в новый набор данных. .

Таким образом, мой «новый набор данных» будет состоять только из 75% синего цвета и 25% красного из набора данных A (числовые значения).


person Kirsty White    schedule 19.07.2012    source источник
comment
Как выбрать? Случайным образом? Кроме того, 75% всех синих меток или только 75% строк, которые вы хотите выбрать? И сколько строк вы хотите выбрать?   -  person chaohuang    schedule 19.07.2012
comment
@chaohuang yes случайным образом выберите 75% только синей метки и соответствующих строк в наборе данных A и случайным образом выберите 25% только красного цвета и т. д.   -  person Kirsty White    schedule 19.07.2012


Ответы (2)


Изучите функцию crossvalind в наборе инструментов биоинформатики, особенно с параметр Group. Это сделает вашу жизнь намного проще, так как вам не нужно будет кодировать эту функциональность самостоятельно.

В вашем случае вы просто сделаете что-то вроде:

percentage = 75;
[train, test] = crossvalind('HoldOut', B, size(A, 1), percentage/100);
percentOfA = A(train, :);
resultOfA = B(train, :);
person Ansari    schedule 19.07.2012
comment
Как в этом примере узнать, что такое 25% и 75%? - person Kirsty White; 19.07.2012
comment
Если вы уже знаете, что они из себя представляют, то вам все это не нужно. Вы можете просто создать вектор с индексами, а затем выбрать подмножество матриц A и B. - person Ansari; 19.07.2012
comment
Да, набор данных B является индексом для набора данных A, но я хочу создать новый набор данных, в котором есть определенный процент того, что я хочу выбрать. - person Kirsty White; 19.07.2012
comment
Я думал, у Б есть ярлыки? Приведенный выше код позволит вам определить процент, а затем случайным образом выбрать его из A. - person Ansari; 19.07.2012
comment
Извините, да, в наборе данных B метки игнорируют то, что я сказал. Например, я ищу здесь совпадение слов: выберите 75% строк, содержащих синий цвет, из набора данных B, получите индекс, предшествующий набору данных A этих строк, и выведите фактические значения из набора данных A, которые являются синими, в новый набор данных. Имеет ли это смысл? - person Kirsty White; 19.07.2012

Сначала используйте find для определения blue строк: idx=find(B==0.4);

Затем случайным образом выберите 75% этих blue строк:

n = numel(idx);
n75 = round(n*0.75);
r = randperm(n);
idx_blue = idx(r(1:n75));

Соответствующие blue строки A: A_blue = A(idx_blue);

Повторите шаги, чтобы выбрать red строк.

ХТН.

person chaohuang    schedule 19.07.2012
comment
Нет, это не то, что я ищу B == 0,4, синий может быть переменной, я просто использовал 0,4 в качестве примера. Набор данных B находится в том же порядке, что и набор данных A. Мне нужен другой метод. - person Kirsty White; 20.07.2012
comment
@KirstyWhite, если синий является переменной, то как определить, какие строки синие. - person chaohuang; 20.07.2012
comment
по его индексу. Когда я создаю образец из другого набора данных, я создаю индекс меток для числового набора данных, вы можете сделать то же самое здесь. - person Kirsty White; 21.07.2012
comment
@KirstyWhite вам не нужно использовать функцию find для определения «синих» строк, просто используйте созданный вами индекс, чтобы найти их, тогда остальные шаги будут такими же. - person chaohuang; 21.07.2012