• Регистрация
Yurik_net_23mail.ru
Yurik_net_23mail.ru0.00
н/д
  • Написать
  • Подписаться

Пытаюсь нормализовать массив из 1600 наблюдений по 16 признакам Матлаб выдает ошибку

Здравствуйте, пытаюсь нормализовать массив из 16 признаков

Размерность XmTrain-1х16

Размерность Xtrain-1600х16

XmTrain = mean(Xtrain); % Среднее значение признака
XsTrain = std(Xtrain); % Среднеквадратичное отклонение
Xtrain1 = (Xtrain - XmTrain)./XsTrain; % Нормализация Train
Xtest1 = (Xtest - XmTrain)./XsTrain; % Нормализация Test

выдает ошибку

Error using ==> minus
Matrix dimensions must agree.

==>Xtrain1 = (Xtrain(:) - XmTrain)./XsTrain; % Нормализация Train

 

Помогите, пожалуйста разобраться

Теги

    01.12.2020

    Ответы

    • aBoomest
      aBoomest+436.31
      1.12.2020 22:11

      Епстественно. Сами написали Xtrain: 1600х16,  XmTrain: 1х16
      Как же вы делаете Xtrain - XmTrain ?
      В каком учебнике по математике написано что так можно?
      Разность матриц подразумевает одинаковую размерность.

      Це из википедии:

      Сложение матриц
      Складывать можно только матрицы одинакового размера.

      Сложение матриц A + B есть операция нахождения матрицы C, все элементы которой равны попарной сумме всех соответствующих элементов матриц A и B, то есть каждый элемент матрицы C равен  cij = aij+bij
      Свойства сложения матриц:

      коммутативность: A+B = B+A;
      ассоциативность: (A+B)+C =A+(B+C);
      сложение с нулевой матрицей: A + Θ = A;
      существование противоположной матрицы: A + (-A) = Θ;

      • Yurik_net_23mail.ru
        Yurik_net_23mail.ru0.00
        1.12.2020 22:14

        а как можно совершить данную процедуру?

      • aBoomest
        aBoomest+436.31
        1.12.2020 22:28

        Именно эту - никак. Теория матриц разработанная еще в 17-18 веках этого не подразумевает.

        • Yurik_net_23mail.ru
          Yurik_net_23mail.ru0.00
          1.12.2020 22:34

          я про нормализацию) В чем ошибка?

        • aBoomest
          aBoomest+436.31
          1.12.2020 22:44
          Xtrain = Xtrain';
          XmTrain = mean(Xtrain); % Среднее значение признака
          XsTrain = std(Xtrain); % Среднеквадратичное отклонение
          for ii=1:16
              Xtrain1(:,ii) = (Xtrain(:,ii) - XmTrain(ii))./XsTrain(ii); % Нормализация Train
          end;
          
          может вы это хотели сделать?
          • Yurik_net_23mail.ru
            Yurik_net_23mail.ru0.00
            2.12.2020 12:12

            спасибо)

            • Centurio
              Centurio+34.00
              3.12.2020 08:32

              Вы уверены, что правильно сделали? Вы транспонировали матрицу Xtrain, в результате получилась матрица размером 16х1600, а затем в икле считаете только для 16 столбцов из 1600.

            • Yurik_net_23mail.ru
              Yurik_net_23mail.ru0.00
              2.12.2020 12:12

              спасибо)

              • Centurio
                Centurio+34.00
                3.12.2020 08:36

                Матлабе можно и без цикла обойтись:

                XmTrain = mean(Xtrain); % Среднее значение признака

                XsTrain = std(Xtrain); % Среднеквадратичное отклонение

                m=size(Xtrain,1);

                Xtrain1=(Xtrain-repmat(XmTrain,m,1))./repmat(XsTrain,m,1)

                • aBoomest
                  aBoomest+436.31
                  3.12.2020 11:27

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

                  • Centurio
                    Centurio+34.00
                    3.12.2020 20:51

                    Моё мнение: в Матлабе нужно сразу учиться избавляться от циклов; привычка пользоваться ими потом будет только мешать.