コード例 #1
0
ファイル: linear.py プロジェクト: taowu750/wtml
    def cost(self, x_mat: ndarray, y_row: ndarray) -> float:
        """
        计算在 x_mat 和 y_row 上的代价。

        :param x_mat: 特征向量组,行数 m 表示样本数,列数 n 表示特征数
        :param y_row: 输出行向量,每一个值代表 x_mat 中对应行的输出
        :return: 代价值。
        """

        if self._theta is None:
            raise StateError('not trained yet')

        self._theta, x_mat = _t.match_theta_x(self._theta, x_mat)
        x_mat, y_row = _t.match_x_y(x_mat, y_row)

        if len(self.labels) == 2:
            return self.__cost(self._theta, x_mat, y_row)
        else:
            m = x_mat.shape[0]
            cost_sum = 0
            for i, label in enumerate(self.labels):
                y = y_row == label
                cost_sum = cost_sum + np.sum(y) * self.__cost(
                    self._theta[:, i], x_mat, y) / m

            return cost_sum
コード例 #2
0
ファイル: linear.py プロジェクト: taowu750/wtml
    def probability(self, x_mat: ndarray) -> Union[ndarray, float]:
        """
        返回对应于 x_mat 的预测概率。如果是二分类问题,那么返回一个行向量;如果是多分类问题,返回一个
        m*num_labels 的矩阵,其中每一行表示样本在每个类上的概率。

        :param x_mat: 特征向量组,行数 m 表示样本数,列数 n 表示特征数
        :return: 预测概率。
        """

        if self._theta is None:
            raise StateError('not trained yet')

        self._theta, x_mat = _t.match_theta_x(self._theta, x_mat)

        return _mf.sigmoid(x_mat @ self._theta)
コード例 #3
0
ファイル: linear.py プロジェクト: taowu750/wtml
    def cost(self, x_mat: ndarray, y_row: ndarray):
        """
        计算在 x_mat 和 y_row 上的代价。

        :param x_mat: 特征向量组,行数 m 表示样本数,列数 n 表示特征数
        :param y_row: 输出行向量,每一个值代表 x_mat 中对应行的输出
        :return: 代价值
        """

        if self._theta_row is None:
            raise StateError('not trained yet')

        self._theta_row, x_mat = _t.match_theta_x(self._theta_row, x_mat)
        x_mat, y_row = _t.match_x_y(x_mat, y_row)

        return self.__cost(self._theta_row, x_mat, y_row)
コード例 #4
0
ファイル: linear.py プロジェクト: taowu750/wtml
    def predict(self, x_mat: ndarray):
        """
        使用训练好的参数进行预测。如果提供了特征缩放时的平均值、标准差向量,那么会先将特征值规范化。

        :param x_mat: 特征向量组,行数 m 表示样本数,列数 n 表示特征数
        :return: 预测结果
        """

        if self._theta_row is None:
            raise StateError('not trained yet')

        self._theta_row, x_mat = _t.match_theta_x(self._theta_row, x_mat)
        # 正规方程法不需要规范化数据
        if self.method == 'gradient' and self.mean_row is not None and self.std_row is not None:
            x_mat = _dp.feature_normalize(x_mat,
                                          mean_row=self.mean_row,
                                          std_row=self.std_row)[0]

        return _t.ret(x_mat @ self._theta_row)
コード例 #5
0
ファイル: linear.py プロジェクト: taowu750/wtml
    def predict(self, x_mat: ndarray) -> Union[ndarray, int]:
        """
        返回预测值,是对应于 x_mat 的标记。

        :param x_mat: 特征向量组,行数 m 表示样本数,列数 n 表示特征数
        :return: 预测标记
        """

        if self._theta is None:
            raise StateError('not trained yet')

        self._theta, x_mat = _t.match_theta_x(self._theta, x_mat)
        prob = x_mat @ self._theta

        if len(self.labels) == 2:
            return _t.ret(
                _t.convert_y(self.labels,
                             _mf.sigmoid(prob) >= self.threshold,
                             to=False))
        else:
            return _t.ret(self.labels[np.argmax(prob, axis=1)])