生成模型(generative model)与判别模型(discriminate)的联系及区别

  • 生成模型与判别模型的联系及区别
    • 监督学习——学习一个模型
      • 模型的一般形式
        • 决策函数 Y=f(X)
        • 条件概率分布: P(Y|X)
    • 生成方法
      • 由数据学习联合概率分布 P(Y,X) 作为预测的模型,即生成模型 P(Y|X)=P(Y,X)P(X)
      • 模型表示了给定输入 X ,产生输出Y的生成关系
      • examples
        • 朴素贝叶斯、隐马尔科夫模型
    • 判别方法
      • 由数据直接学习决策函数 f(X) 或者条件概率分布 P(Y|X) 作为预测模型
      • 比较关心:给定输入 X ,输出什么样的Y
      • examples
        • 感知机、决策树、logistic regression,最大熵,SVM,Adaboost,条件随机场
    • 联系与区别
      • 生成学习法
        • 还原出联合概率分布 P(Y,X)
        • 学习收敛速度快
        • 样本容量增加时,模型快速收敛于真实的model
      • 判别方法
        • 直接学习的是 Y=f(X) P(Y|X)
        • 可以对数据进行各种程度上的抽象
        • 定义特征并使用特征可以简化学习问题
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成实现generative model的代码用于二分类有很多种方法,以下是其中一种基于朴素贝叶斯的实现方式: 1. 数据预处理:将原始数据集分成训练集和测试集,对训练集的特征进行标准化处理,使其均值为0,方差为1。 2. 训练模型:基于朴素贝叶斯的方法,需要计算出两个类别P(c=0)和P(c=1)的先验概率,以及每个特征在两个类别下的条件概率P(x|c),其中x表示某个特征的取值。具体计算方法如下: - P(c=0) = count(c=0) / count(all_data) - P(c=1) = count(c=1) / count(all_data) - 对于每个特征i,计算其条件概率P(xi|c),分别在类别c=0和c=1下计算: - 计算c=0情况下的条件概率:P(xi|c=0) = count(xi,c=0) / count(c=0) - 计算c=1情况下的条件概率:P(xi|c=1) = count(xi,c=1) / count(c=1) 3. 预测测试集:将测试集中的每个实例的特征值代入朴素贝叶斯公式计算,得到属于两个类别的概率值,比较两个概率值,将实例分到概率值较大的那个类别中。 4. 计算准确率:将预测结果与测试集中的真实类别进行比较,计算分类准确率。 以下是Python代码实现: ```python import numpy as np class NaiveBayes: def __init__(self): self.prior = None self.cond_prob = None def fit(self, X, y): n_samples, n_features = X.shape self.classes = np.unique(y) n_classes = len(self.classes) # 计算先验概率 P(c) self.prior = np.zeros(n_classes) for i, c in enumerate(self.classes): self.prior[i] = np.sum(y == c) / n_samples # 计算条件概率 P(x|c) self.cond_prob = np.zeros((n_features, n_classes)) for i in range(n_features): for j, c in enumerate(self.classes): # 对于每个特征 i,计算其条件概率 P(xi|c) Xi = X[y == c, i] self.cond_prob[i, j] = (np.mean(Xi), np.std(Xi)) def predict(self, X): n_samples, n_features = X.shape y_pred = np.zeros(n_samples) # 预测每个实例的类别 for i in range(n_samples): posteriors = [] for j, c in enumerate(self.classes): prior = np.log(self.prior[j]) cond_prob = np.sum(np.log(self.gaussian_prob(X[i], self.cond_prob[:, j]))) posterior = prior + cond_prob posteriors.append(posterior) y_pred[i] = self.classes[np.argmax(posteriors)] return y_pred def gaussian_prob(self, x, params): mean, std = params exponent = np.exp(-((x - mean) ** 2) / (2 * std ** 2)) return (1 / (np.sqrt(2 * np.pi) * std)) * exponent ``` 其中,fit方法用于训练模型,predict方法用于预测测试集,gaussian_prob方法用于计算高斯分布的概率密度函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值