机器学习使用python实现一个二分类问题:逻辑与(AND)的一般问题

该实验报告详细探讨了在不同样本分布下,包括感知机、线性回归、SVM、K-means以及降维方法PCA、LDA和ICA在分类和聚类任务中的表现。通过改变参数如高斯分布的标准差,观察学习算法的收敛性和效果。报告指出,样本分布、模型结构、初始化、学习率等因素显著影响算法性能,且在样本难以区分时,学习效果会下降。此外,实验还展示了不同数据预处理方法和模型选择(如多层神经网络、KNN)对结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1.1 实验内容

构建一个二分类问题:逻辑与(AND)的一般问题。

生成数据:正样本样本服从高斯分布,均值为[1,1],协方差矩阵为单位矩阵;负样本服从三个高斯分布的混合高斯分布,这三个高斯分布的均值分别为[0,0], [0,1], [1,0],每个高斯分布的协方差矩阵均为(sigma*单位矩阵)。

学习:设 sigma=0.01,请依上面的分布生成正负样本各 300 个,运用 perceptron learning algorithm 从数据中学习出一个 perceptron,实现对正负样本的二分类。

实验与讨论:请通过编程实验,讨论如下问题:

  • 学习算法的收敛性与哪些因素存在怎样的关系?

  • 讨论当 sigma 取值不断变大(如取值从 0.01-1)情况下,学习算法的收敛性问题,由此可以得出怎样的结论?

1.1.2 实验步骤

利用 numpy 方法生成二维高斯分布:

构建感知机类:

要点:

  • 使用 bias,否则只有无法得出结果

  • output 使用符号函数

  • 利用损失函数使得训练可以在适当时候停止

构建训练集、测试集并进行训练,并最后评估测试结果:

1.1.3 实验结果

Sigma=0.01 时

样本:

结果:

Sigma=0.1:

Sigma=0.99

结论:

训练结果和权重初始化、bias 初始化、感知机结构、训练次数、训练终止方式、学习率等有关系。

Sigma 变大,算法收敛性减小,说明学习效果与样本分布有很大关系。当样本无法划分时,学习效果很差。

1.1.4 实验感想

学习到了具体的感知器设计,对于包的使用更加熟悉。

1.2 C3-1


1.2.1 实验内容

  • 生成 500 个数据点(x, y), y = x + n, n 为均值为 0 标准差为 delta 的正态分布。请使用线性回归算法从输入 x 估计 y。

  • 对于 x = y + n 进行同上述操作,但是依旧从 x 估计 y。

  • 对于上述题目的回归曲线进行比较。

1.2.2 实验步骤

构建数据:

采用最简单的 1-1 网络:

训练:

结果显示:

1.2.3 实验结果

参数和 MSE:

回归曲线:

第一个:

第二个:

结论:

可能题意理解错误,未看出差别

1.2.4 实验感想

可能本题题意理解有错误,或者使用了 pytorch 结果过好。

1.3 C4-1


1.3.1 实验内容

写一个带有 bias 的基础的 3-3-1 网络反向传播程序,来解决三比特奇偶校验问题。偶数个 1bit 返回 +1,反之返回-1。展示输入-隐层的参数并且分析每个隐层神经元的函数。

1.3.2 实验步骤

自己写的 BP,使用 softmax 分类,也可以使用 sigmoid 求值:

初始化

前向传播:

反向传播:

功能函数:

Pytorch 版本:

定义 MLP,forward 最后不进行 softmax 因为 torch 的交叉熵自带

训练:

二分类:

直接求值:

1.3.3 实验结果

与预估相同

参数如下:

二分类:

Sigmoid:

对于两个输入求异或,之后对于结果和另一个输入求异或

参考:

1.3.4 实验感想

深入学习了 BP 算法。对于奇偶校验有了更多认识。

1.4 C4-2


1.4.1 实验内容

训练神经网络,计算森林火灾面积

1.4.2 实验步骤

数据读取和预处理:

使用了 8 个属性

神经网络构造:

使用了 dropout 防止过拟合

训练与验证结果:

1.4.3 实验结果

没有花费很多时间优化参数,所以结果可能较差。

1.4.4 实验感想

本次没有很多时间优化,因此结果可能较差。感觉数据量过少,线性回归效果可能不好。

1.5 C4-3


1.5.1 实验内容

Mnist

1.5.2 实验步骤

定义模型,未使用 CNN:

预处理:

训练与测试:

1.5.3 实验结果

准确率达 97.21%

1.5.4 实验感想

因为无法使用 GPU 所以未使用 CNN,Mnist 的解决方法已经相当成熟,即使不用 CNN 也能达到很好结果。

1.6 C5-1


1.6.1 实验内容

构建一个类别不平衡的二分类问题。

生成数据:正样本样本服从高斯分布,均值为[2,3],协方差矩阵为单位矩阵;负样本服从高斯分布,均值为[5,6],协方差矩阵为单位矩阵。

学习:请依上面的分布生成正样本 200 个,负样本 800 个,将其划分为包含 60% 样本的训练集、20% 样本的验证集和 20% 样本的测试集,通过分别构建两个不同的 MLP 模型实现对正负样本的二分类。其中第一个 MLP 模型含有一个隐层,第二个 MLP 模型含有两个隐层。

实验与讨论:请通过编程实验,讨论如下问题:a. 若要求 MLP 模型对于正例样本的预测有更高的查准率和查全率,请考虑在模型选择中采用哪种性能衡量指标;b.通过绘制学习曲线,分析模型的偏差与方差;c.通过绘制 ROC 曲线,比较两个 MLP 模型。

1.6.2 实验步骤

MLP_1 一个隐层

MLP_2 两个隐层

初始化:

交叉验证得到学习曲线:

得到性能指标:

1.6.3 实验结果

使用交叉熵作为损失函数

MLP_1 的学习曲线,每次增加 50 个训练样本:

MLP_2 的学习曲线:

可以看到二者的偏差都较小,但是第二个模型的方差更大,说明出现过拟合

MLP_1 训练时的 loss:

MLP_1 验证集/测试集上的性能指标:

MLP_2 的 loss:

MLP_2 验证集/测试集上的性能指标:

要求对于正率更高准确率和查全率,应该考虑正例的 f1 性能指标。

ROC 曲线:

AUC:

可以看到,二者结果十分相似,其中 mlp_2 在正例上可能过拟合更严重一些,但是总的结果更好。

1.6.4 实验感想

实际上使用了交叉验证绘制学习曲线,对于验证集并没有过多使用。

1.7 C6-1


1.7.1 实验内容

  • 对于 Fisheriris 数据集

  • 使用一对多 SVM 针对四个输入数据二分类进行三分类;

  • 使用 KNN 分类;

  • 使用 MLP 二分类并最后组合;

1.7.2 实验过程

数据预处理:

SVM:

将 0, 1, 2 数据作为正例,其他作为反例,其他两个亦同下图

训练三个分类器,并进行组合

评估结果,分别是自己的一对多和 sklearn 的一对多

KNN:

自己完成的 KNN:

Sklearn 的 KNN:

MLP:

实际上过程类似 SVM

网络:

1.7.3 实验结果

SVM 自己完成的一对多

-1 为无法分类的数据,无法很好的处理

Sklearn 的一对多

效果非常好

KNN:

分别是自己完成的 knn 和 sklearn 的 knn

MLP 结果:

效果很好

1.7.4 实验感想

使用了多个分类方式,对于分类器有了更多理解。

1.8 C6-2


1.8.1 实验内容

在西瓜数据集 3.0α上分别用线性核和高斯核训练 SVM,并比较其支持向量的差别。

1.8.2 实验步骤

数据预处理,不使用 test,因为数据量过少:

线性核和高斯核:

1.8.3 实验结果

可见,高斯核好于线性核

支持向量均为 17x2 向量

线性核支持向量:

高斯核支持向量:

1.8.4 实验感想

对于 SVM 还是不够了解,第一个实际使用了 LinearSVM,和 SVM 有一些不同。

1.9 C7-1


1.9.1 实验内容

试编程实现 K-means 算法,设置三组不同的 k 值、三组不同的初始中心点,在西瓜数据集 4.0 上进行实验比较,并讨论什么样的初始中心有利于取得好结果。

1.9.2 实验步骤

构建自己的 KMeans 类:

初始化:

利用参数选择质心初始化方式

聚类的过程:

判断聚类结果是否已经不变:

四个选择质心的方法,分别为随机选择,将数据排序后均匀选择,选择最好质心和 KMeans++:

欧氏距离计算:

数据预处理:

随后分别求 k=2,3,4 时的随机选择结果:

以及 k=3 时的均匀选择和最好结果:

K=3 时 KMeans++:

使用 Sklearn 的 Kmeans++ 选择质心:

1.9.3 实验结果:

以下分别为 k=2,3,4 时,质心随机选择的聚类图像以及评估距离,质心为红色:

以下为 k=3,均匀选择质心结果:

以下为 k=3 的最好质心:

KMeans++ 的结果:

Sklearn 的算法结果:

可以看到,KMeans++ 可以得到非常优秀的质心选择结果

1.9.4 实验感想

自己实现了多种 KMeans,很有成就感

1.10 C8-1


1.10.1 实验内容

请通过对 Iris data 的可视化,比较 PCA、LDA 和 ICA 的可视化效果。

1.10.2 实验步骤

自己实现了 PCA,其他调包

数据预处理:

PCA:

LDA:

ICA:

1.10.3 实验结果

原数据雷达图:

PCA 散点图:

雷达图:

LDA 散点图:

雷达图:

ICA 散点图:

雷达图:

结论:

比较效果其实相近。

1.10.4 实验感想

学习了可视化方法,对于可视化工具有了新的认识。

完整代码:https://download.youkuaiyun.com/download/pythonyanyan/87390267

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员奇奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值