GDA和Logistic方法的区别及相应的matlab代码

本文探讨了GDA(高斯判别分析)与Logistic方法在假设、适用范围上的差异。GDA假设输入特征服从多元高斯分布,适合连续特征,而Logistic方法更为灵活,适用于更多分布类型。当特征符合高斯分布时,GDA可能提供更准确结果,但Logistic因鲁棒性更强而应用更广泛。文章还提及了两种方法的分类原理,并通过MATLAB实现进行实战学习。
摘要由CSDN通过智能技术生成

由Ng的视频和讲义中可以总结出GDA方法的优劣和适用范围,然后再利用matlab进行编程,进行实战学习

GDA方法与Logistic方法的主要区别在于这两个模型的假设不同:

GDA方法假设很强:p(x|y)服从多元高斯分布,并且输入特征是连续的;

Logistic方法并没有GDA那么强的假设:它既没有要求p(x|y)服从多元高斯分布,也没有要求

GDA算法即为高斯判别分析算法,是一种机器学习方法,旨在通过对样本数据的高斯分布进行分析,对数据进行分类。在代码实现方面,可以使用Python的numpy库来进行复现。 首先,我们需要构建一个符合高斯分布的数据集。假设我们要生成两个类别的数据,每个类别包含100个样本,每个样本有两个特征,可以使用如下代码: import numpy as np mean1 = np.array([0, 0]) mean2 = np.array([1.5, 1.5]) cov = np.array([[1, 0.5], [0.5, 1]]) data1 = np.random.multivariate_normal(mean1, cov, 100) data2 = np.random.multivariate_normal(mean2, cov, 100) 将数据集分为训练集和测试集,并计算每个类别的先验概率、均值和协方差矩阵: train_X = np.vstack((data1[:70], data2[:70])) train_y = np.vstack((np.zeros((70, 1)), np.ones((70, 1)))) test_X = np.vstack((data1[70:], data2[70:])) test_y = np.vstack((np.zeros((30, 1)), np.ones((30, 1)))) p1 = len(train_X[train_y == 0]) / len(train_X) p2 = len(train_X[train_y == 1]) / len(train_X) mean1 = np.mean(train_X[train_y == 0], axis=0) mean2 = np.mean(train_X[train_y == 1], axis=0) cov1 = np.cov(train_X[train_y == 0].T) cov2 = np.cov(train_X[train_y == 1].T) 计算协方差矩阵在GDA算法中很重要,需要注意对每个类别单独计算。接下来,定义GDA分类器: def gaussian(x, mean, cov): d = len(mean) dev = x - mean return (1.0 / (np.sqrt((2 * np.pi) ** d * np.linalg.det(cov)))) * np.exp(-0.5 * np.dot(np.dot(dev.T, np.linalg.inv(cov)), dev)) def predict(x): g1 = np.log(p1) + np.log(gaussian(x, mean1, cov1)) g2 = np.log(p2) + np.log(gaussian(x, mean2, cov2)) return int(g1 < g2) 对于一个测试集中的样本,输入到predict函数中即可以得到预测的类别。在测试集上计算分类正确率: correct = 0 for i in range(test_X.shape[0]): if predict(test_X[i]) == test_y[i]: correct += 1 accuracy = correct / test_X.shape[0] print('Test Accuracy:', accuracy) GDA算法的代码实现也可以通过sklearn库中的GaussianNB类来实现,但通过自己的代码实现可以清晰地了解算法原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值