Ejemplo n.º 1
0
    def train(self, x):
        """
        xは0, 1, ..., 9の順で同じ数並んでいるとする
        """

        # 1クラスの数
        num = len(x) // self.class_num

        for j, label in enumerate(tqdm(range(self.class_num))):

            # labelとotherを結合
            # otherは1クラスの数分をランダムで取ってくる
            label_x = x[label * num:(label + 1) * num]
            other_x = np.delete(
                x, [i for i in range(label * num, (label + 1) * num)], axis=0)
            other_x = other_x[np.random.choice(len(x) - num, num), :]
            vs_x = np.concatenate([label_x, other_x])

            # ラベルがlabelのとき1, それ以外を-1にする
            vs_y = np.array([1 if i < num else -1 for i in range(num * 2)])

            # 学習
            # self.model_list[j].train(vs_x, vs_y)
            # copy_model = copy(self.model).train(vs_x, vs_y)
            # self.model_list.append(copy_model)

            ImageSize = 28
            binary_SVM = SVM(ImageSize**2)
            adaboost = AdaBoost(binary_SVM, 10)
            adaboost.train(vs_x, vs_y)
            self.model_list.append(adaboost)
Ejemplo n.º 2
0
    def train(self, x):
        """
        xは0, 1, ..., 9の順で同じ数並んでいるとする

        """

        # 1クラスの数
        num = len(x) // self.class_num

        for j, combi in enumerate(tqdm(self.combinations)):

            # combi[0]とcombi[1]のデータを結合
            vs_x = np.concatenate([
                x[num * combi[0]:num * (combi[0] + 1)], x[num * combi[1]:num *
                                                          (combi[1] + 1)]
            ],
                                  axis=0)
            # combi[0]が+1, combi[1]が-1
            vs_y = np.array([1 if i < num else -1 for i in range(num * 2)])

            # 学習
            # self.model_list[j].train(vs_x, vs_y)

            ImageSize = 28
            binary_SVM = SVM(ImageSize**2)
            adaboost = AdaBoost(binary_SVM, 10)
            adaboost.train(vs_x, vs_y)
            self.model_list.append(adaboost)