机器学习实验一 数据感知及可视化

实验题目: 数据感知及可视化

一、实验目的:

1.建立对机器学习数据集的感性认识
2.掌握利用numpy创建矩阵,以及进行基本矩阵计算的方法

二、实验步骤:

① 随机生成线性回归数据集
② 随机生成线性可分的两类分类数据集
③ 随机生成线性可分的多类分类数据集
样本标签为独热向量
样本标签为标量

三、实验结果:

① 随机生成线性回归数据集

实验代码:
在这里插入图片描述

实验结果:
参数① samples=10 dim=5 var = 0.02
在这里插入图片描述在这里插入图片描述

参数② samples=10 dim=5 var = 0.05
在这里插入图片描述
在这里插入图片描述

参数③ samples=5 dim=5 var = 0.02
在这里插入图片描述

参数④ samples=10 dim=3 var = 0.02

在这里插入图片描述
在这里插入图片描述

问题1:选取某个样本,观察样本、权重及其标签之间的关系

此代码将生成一个包含10个样本和5个特征的数据集,其中每个特征的值都是从均值为0、方差为1的高斯分布中随机抽取的。然后,它会随机生成一个权重向量w,并计算标签y作为每个样本x的加权和(即y=xw),并添加一些高斯噪声。最后,它会将特征和标签之间的关系可视化,方便观察:

实验代码如下:
在这里插入图片描述

下面是生成数据集后的图像:
在这里插入图片描述

可以看到,对于每个特征,它们与标签之间大致存在线性关系。这意味着我们可以使用线性回归模型来预测标签。

问题2:修改数据集参数samples,dim,var ,观察生成矩阵的维度的变化

x,w,r,y矩阵维度与参数随机误差,正态分布的方差var无关;x w矩阵维度与参数样本特征数量dim有关,随着dim增大而增大且呈正线性相关关系;x r y矩阵维度与参数样本数量samples有关,随着samples增大而增大且呈正线性相关关系。

2.随机生成线性可分的两类分类数据集

实验代码:
在这里插入图片描述

实验结果:
在这里插入图片描述
在这里插入图片描述

问题1:选取某个样本,观察样本、权重及其几率、标签之间的关系:

①生成一个线性可分的两类分类数据集。假设我们需要生成一个包含100个样本的数据集,其中每个样本有两个特征,标签为0或1,实验代码如下:
在这里插入图片描述
在这里插入图片描述

②现在我们可以选取其中的某个样本来分析其与权重以及标签之间的关系。我们选取第50个样本,其具体数值为:
在这里插入图片描述

③输出结果如下:
在这里插入图片描述

④这意味着该样本具有两个特征,其值分别为-0.248和-0.41。如果我们使用逻辑回归模型进行分类,则可以通过学习到的权重来计算该样本属于标签1的概率。假设我们已经训练好了模型,并得到了一组权重w=[0.5, 0.7],则可以如下计算该样本属于标签1的概率:

样本标签实验结果:

在这里插入图片描述

100个样本数据集可视化图像:
在这里插入图片描述

3.随机生成线性可分的多类分类数据集 --独热向量
实验代码:
在这里插入图片描述

实验结果:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

问题1:选取某个样本,观察样本、权重及其几率、标签之间的关系

①随机生成线性可分的多类分类数据集
我们可以使用 Python 中的 scikit-learn 库来生成线性可分的多类分类数据集。其中,make_classification 函数可以用于生成具有多个类别的数据集。生成一个包含 1000 个样本、10 个特征和 5 个类别的数据集,每个类别都只包含一个聚类中心。

②将类别转换成独热向量,将每个类别转换成独热向量。可以使用 scikit-learn 中的 OneHotEncoder 类来实现这一过程。先将 y 转换为列向量,然后使用 OneHotEncoder 类将其转换为独热向量。

③观察样本、权重及其几率、标签之间的关系
我们可以使用 scikit-learn 中的 LogisticRegression 类来训练一个逻辑回归模型,并观察样本、权重及其几率、标签之间的关系。随机选择一个样本,然后使用训练好的逻辑回归模型计算该样本的权重和几率。最后,输出样本、权重及其几率、标签之间的关系。
通过上述步骤,我们可以生成线性可分的多类分类数据集和独热向量,并且观察样本、权重及其几率、标签之间的关系。这有助于我们更好地理解模型的工作原理,并发现可能存在的问题。

实验代码:
在这里插入图片描述

实验结果:
在这里插入图片描述

问题2:修改数据集参数classes,观察生成矩阵的维度的变化

当更改参数classes时,生成的特征矩阵和标签矩阵的形状将发生相应的变化。特别地,对于一个给定的样本数量n_samplesn_samples和特征数量n_featuresn_features,当您增加参数classes的值时,每个类别所占的样本数量n_samples // classesn_samples//classes会减少,因此生成的数据集中的每个类别之间的差异可能会更加明显。

具体来说,当参数classes取不同值时,生成矩阵的维度如下:

当classes=2时,生成的特征矩阵的形状为(n_samples, n_features),标签矩阵的形状为(n_samples, 2)。
当classes=3时,生成的特征矩阵的形状仍然为(n_samples, n_features),但是标签矩阵的形状为(n_samples, 3)。
当classes=4时,生成的特征矩阵的形状仍然为(n_samples, n_features),但是标签矩阵的形状为(n_samples, 4)。
以此类推,当您增加classes的值时,标签矩阵的列数会相应增加,而特征矩阵保持不变。

4. 随机生成线性可分的多类分类数据集–标签为标量

实验代码:
在这里插入图片描述

实验结果:
在这里插入图片描述在这里插入图片描述

问题1:修改代码行6,7,为每个样本生成一个标量作为标签,这个标量对应样本所属类别的序号

修改后的代码:
在这里插入图片描述

修改后的代码将生成一个整数数组y,其中y[i]表示第i个样本所属的类别序号(从0开始)

运行结果:
在这里插入图片描述

问题2:选取某个样本,检查生成的标签是否正确

实验代码:使用了np.argmax函数来找到每个样本所属的类别,并将其作为标量标签
在这里插入图片描述

选择了第42个样本进行检查,检查结果:
在这里插入图片描述

由于随机数生成器的随机性,每次运行代码时可能得到不同的结果,但如果代码正确,它输出的结果应该表明该样本所属类别和标签相同。

四、拓展题

在这里插入图片描述

对于三维的数据集,可以使用一个三维散点图来进行可视化。由于类别数量为5,我们可以使用不同的颜色或形状来区分不同的类别。

实验代码:
在这里插入图片描述

实验结果:
在这里插入图片描述

五、实验心得

作为机器学习的入门实验,数据感知及可视化是非常重要的。在这个实验中,可以通过对数据进行探索性分析和可视化来更好地了解数据集和问题。
首先,在进行数据可视化之前,你需要对数据集有一个全面的了解。这包括数据集中的特征、变量类型(离散或连续)、缺失值等信息。然后,可以使用各种可视化工具(例如直方图、散点图、箱线图等)来探索不同特征之间的关系,并检查是否存在异常值或离群点。如果存在异常值或离群点,需要考虑如何将其处理或排除。
另外,数据可视化也可以帮助你选择合适的特征用于模型训练。通过观察不同特征与目标变量之间的关系,可以判断哪些特征可能对预测结果有影响,并据此选择最佳特征集。
总之,数据感知及可视化是机器学习实践中必不可少的一步。通过对数据进行探索性分析和可视化,可以更好地了解数据集和问题,选择合适的特征并发现异常值,这些都是建立良好的机器学习模型所必需的基础,这些技能对于日后进行机器学习和数据分析任务非常有帮助。

猜你喜欢

转载自blog.csdn.net/xqmids99/article/details/130492394