linear_model.py 文件源码

python
阅读 29 收藏 0 点赞 0 评论 0

项目:prml 作者: Yevgnen 项目源码 文件源码
def evidence_approximation(self,
                               X,
                               T,
                               alpha=1e-2,
                               beta=1e-2,
                               tol=1e-3,
                               max_iter=int(1e2)):
        n_basis = self.n_basis
        n_sample = X.shape[0]

        Phi = self.nonlinear_transformation(X)
        PhiTPhi = np.outer(Phi, Phi) if Phi.ndim < 2 else Phi.T.dot(Phi)

        lamb = linalg.eigvalsh(PhiTPhi)
        gamma = np.sum(lamb / (lamb + alpha))

        for iteration in range(max_iter):
            post_cov = linalg.inv(alpha * np.eye(n_basis) + beta * PhiTPhi)
            post_mean = beta * post_cov.dot(Phi.T.dot(T))

            alpha = gamma / linalg.norm(post_mean)**2
            beta = (n_sample -
                    gamma) / linalg.norm(T - Phi.dot(post_mean))**2  # FIXME

            gamma_new = np.sum(lamb / (lamb + alpha))

            if (linalg.norm(gamma_new - gamma) / linalg.norm(gamma) < tol):
                break

            gamma = gamma_new

        self.mean = post_mean
        self.prior_precision = alpha
        self.noise_precision = beta

        return self
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号