首页 > 花卉 / 正文
大家好,鸢尾花数据集相信很多的网友都不是很明白,包括python鸢尾花数据集分析也是一样,不过没有关系,接下来就来为大家分享关于鸢尾花数据集和python鸢尾花数据集分析的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
本文目录
一、鸢尾花数据集分类的意义
鸢尾花数据集是一个经典的机器学习分类问题数据集,常被用于机器学习算法的验证和比较,因此它成为了机器学习入门的经典案例之一。它具有较高的分类准确率和稳定性,可以用于评估不同分类算法的性能和优劣,为算法选择和优化提供参考。此外,鸢尾花数据集中的特征具有较高的区分度和可解释性,可以用于探索特征选择和特征提取方法,提高分类准确率和模型可解释性。最后,鸢尾花数据集的分类问题具有实际应用背景,如根据花的特征对鸢尾花进行分类和识别,可以应用于植物学和农业生产等领域。
二、数据归一化会降低数据集大小吗
数据归一化方法的本质是一种对数据进行线性转换的方法,通过构建一种样本空间之间的线性映射关系来进行数据数值的转化,这种转化并不会影响数据分布,即不会影响数据的内在规律,只是对数据的数值进行调整。数据归一化有很多方法,并且在机器学习领域有诸多用途,不仅是能够作为梯度下降的优化算法,同时还能帮助一些数据集避免量纲不一致等问题。
经典机器学习领域的数据归一化算法主要有两种,分别是0-1标准化(Max-Min Normalization)和Z-Score标准化。我们先讨论归一化基本流程,再探讨归一化对机器学习算法在各方面的影响。
一般来说,归一化和标准化都是指对数据进行数值转化,根据**的解释,都是Feature scaling(特征缩放)的方法,并且都可以称为normalization。但某些场景下也会有不同的称呼,例如将0-1标准化称为normalization,也就是归一化,而把Z-Score标准化称为Standardization,即标准化。课上对二者概念不做具体区分。
0-1标准化是最简单同时也是最常用的标准化方法。该方法通过在输入特征中逐列遍历其中里的每一个数据,将Max和Min的记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理,基本公式为:
𝑥𝑛𝑜𝑟𝑚𝑎𝑙𝑖𝑧𝑎𝑡𝑖𝑜𝑛=𝑥−𝑀𝑖𝑛𝑀𝑎𝑥−𝑀𝑖𝑛
实际计算过程中需要逐列进行处理,即用每一列中的元素减去当前列的最小值,再除以该列的极差。
和0-1标准化不同,Z-score标准化利用原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。同样是逐列进行**作,每一条数据都减去当前列的均值再除以当前列的标准差,在这种标准化**作下,如果原数据服从正态分布,处理之后的数据服从标准正态分布。Z-Score标准化计算公式如下:
𝑥𝑛𝑜𝑟𝑚𝑎𝑙𝑖𝑧𝑎𝑡𝑖𝑜𝑛=𝑥−𝜇𝜎
和0-1标准化不同,Z-Score标准化并不会将数据放缩在0-1之间,而是均匀地分布在0的两侧。类似这种数据也被称为Zero-Centered Data,在深度学习领域有重要应用。
一种更加严谨的做法,是在分母项、也就是标准差上加上一个非常小的常数𝜇
除了0-1标准化和Z-Score标准化外,还有一类使用非线性函数进行归一化**作的方法。其中最具代表性的是Sigmoid标准化。
Sigmoid标准化其实非常好理解,就是利用Sigmoid函数对数据集的每一列进行处理,由于Sigmoid函数特性,处理之后的数据也将被压缩到0-1之间。
当然,相比Sigmoid标准化,Z-Score标准化实际用途更广。
我们以0-1标准化为例,来探讨数据归一化处理对量纲的影响以及在实际建模过程中的计算流程。当然其他标准化也类似。
对于0-1标准化来说,表面上看起来只是将每一列数据都放缩至0-1区间内,但实际上却有着非常多的用途。一个最简单的使用场景是,当数据集中不同列的量纲不一致时,通过对每一列的0-1标准化处理,能够消除因为这种不一致而引发的算法学习偏差。例如,在鸢尾花数据中,每一列都是以厘米作为单位,整体数据分布相对统一,但如果把其中某一列改为毫米、而其他几列改为米作为单位,则以毫米为单位的列数值将特别大,而其他几列数值将特别小,如此一来就会对包括线性方程在内的一系列模型建模造成重大影响,模型将无法“均匀的”从各列中提取信息。
数据的真实规律是第一个特征其实对标签的取值起到非常重大的作用,但在实际数据获取记录过程中,如果量纲错配,即给了第一个特征一个非常大的量纲、第二个特征一个非常小的量纲,那么数据情况和实际建模情况就将产生较大误差。
此时模型为了捕捉第一列相对更加重要的特性,计算所得的第一列特征取值非常大,甚至是第二列特征系数的10的5次方倍左右。尽管上述模型结果仍然是可以使用的结果,但特征系数差异性的增加(由200倍变成20000倍差异)会导致两个问题,其一是部分系数太小而导致计算精度问题,其二则是在特征重要性判别上会忽视系数较小的特征。而为了能够消除这种量纲差异所带来的规律挖掘方面的影响,我们就需要采用归一化方法。
注意,关于标签是否需要归一化的问题,一般来说这并不是一个典型的**作,在绝大多数情况下我们也并不会对标签进行归一化**作。但此处,由于需要在归一化后全都为正数的特征上进行回归类问题预测,且标签取值有正有负,因此可以考虑对标签进行归一化处理,以方便观测后续模型参数。不过尽管如此,此处的标签归一化也并不是必须的。
当然,如果是划分训练集和测试集进行建模并且进行归一化**作,那么在遵循“在训练集上训练,在测试集上进行测试”的基本原则下,我们首先在训练集上进行数据归一化处理并记录各列的极值,然后当模型训练完成之后,再借助训练集各列的极值来对测试机数据进行归一化,再带入模型进行测试。当然,如果这个过程对标签也进行了归一化处理,则标签的归一化过程和特征归一化过程无异,唯一需要注意的是如果是对未知数据进行预测,即需要模型输出和真实采集到数据类似的结果,则需要在模型输出的归一化的标签基础上进行逆向归一化处理。
此外,一般来说如果是Z-Score标准化,则无需对标签进行标准化处理。
此处我们通过量纲不一致问题引出归一化方法,但归一化方法却并不一定、且不仅仅应用于处理量纲不一致问题中。
首先,并非所有模型都受到数据各列的绝对数值大小影响,在通用的模型中,线性模型和距离类模型是两类典型的会受到各列绝对数值大小影响的模型,例如线性回归、KNN、K-Means(一种无监督的聚类模型)等,并且逻辑回归在使用ECOC编码进行类别判别时也是利用距离来判别样本最终归属,此时,由于各列的绝对数值会影响模型学习的偏重,模型会更加侧重于学习那些数值比较大的列,而无法“均匀”的从各列中提取有效信息,因此有时会出现较差的模型结果。但有些模型却不受此影响,典型的如树模型。
辩证的看,“均匀”的从各列提取有效信息其实也并不一定是最好的做法,本身对于有监督学习算法来说,大多数数据集各列的重要性就不是等价的。但是,比起无法“均匀”的从各列提取有效信息,更可怕的是我们会不受控制的“不均匀”的去提取有效信息,这也是归一化要解决的核心问题。
其次,我们需要知道,一旦对数据进行归一化处理,数据就将失去可解释性,也就是失去了量纲。例如对于鸢尾花数据来说,原始数据代表花瓣花萼的长宽测量结果,而如果我们对其进行归一化处理,则每条数据就无法再给予明确的现实意义,这也是在很多要求可解释性的情况下我们应该避免使用归一化方法的原因。
不仅是归一化方法,其实所有的样本空间的映射都会改变数据集的可解释性。
其三,归一化方法属于仿射变换的一种特殊形式,而所有的仿射变换其实都不会影响数据集原始分布,也就是并不影响数据集真实规律,只会影响某些算法挖掘规律的难度(也就是受到特征绝对数值影响的算法)。例如对如下数据,我们可以观察其归一化前后的数据分布变化情况:
仿射变换指的是样本空间平移(加减某个数)和放缩(乘除某个数)的变换。0-1标准化过程中,平移就是减去每一列最小值,放缩就是除以某一列的极差。
最后,也是最重要的一点,那就是对于梯度下降算法来说,归一化能够提高收敛速度,例如下图所示,经过归一化处理之后的数据,在进行损失函数构造时损失函数的等高线图将更加均匀,此时梯度下降的收敛速度也将更快,具体理论理解详见下文论述,而在实际使用过程中,经过归一化的数据在梯度下降过程中往往收敛更快,这其实是相比消除量纲影响,归一化方法更加重要应用场景。
在提高收敛速度方面,Z-Score效果要好于0-1标准化。
关于归一化能够让等高线更加均匀从而加快迭代收敛过程的理解:
从理论角度出发,其实梯度下降过程每一步参数点移动的方向是能够让梯度最快速下降的方向,也就是图片上垂直于等高线的方向。但这种所谓的最快速的方向只在开始移动的一瞬间满足,由于梯度是连续变化的函数,因此当移动了一小步之后“最优方向”其实就可能发生了变化,但参数只能在下次移动时再改变方向,因此中间其实很长一段距离参数并不不一定是沿着最优方向在进行移动。这里需要注意,如果下一次移动的方向和上一次移动方向一致或者类似,那就说明这次移动过程中参数并没有偏离方向太多,反之则这次移动走了很多弯路。而当损失函数的等高线是均匀分布时,外圈的垂直线也就是内圈的垂直线,此时参数两次移动过程大概率最优方向一致,也就是说相同的移动能够更大程度降低损失函数值,而如果类似图1中的情况,内外圈分布不均匀,则参数两次迭代过程最优方向将发生偏移,也就是说明上一次迭代过程有很长一段距离没有沿着最优方向迭代,该次迭代只降低了有限的损失函数计算值。经次过程不断迭代,由于经过归一化的损失函数每次迭代效率都更高,因此相比其他损失函数,经过归一化的数据只需要更少次的迭代就能抵达最小值点,这也就是加快收敛速度的根本原因。
另外需要注意的是,收敛更快往往也意味着能够收敛至更靠近全局最小值的点。
4.Z-Score标准化算法评价及横向对比
从大类上来分,Z-Score的使用场景要远高于0-1标准化使用场景。当然这也并不是绝对的,要区分二者使用情景,我们首先需要进一步了解二者算法性能。
一般来说,由于Z-Score标准化生成数据的Zero-Centered特性,使得其在深度学习领域倍受欢迎(是Batch Normalization的一种特殊情况)。而在机器学习领域对于标签同时存在正负值的回归类问题,使用Z-Score能够避免对标签进行归一化。
由于该方法同时也是正态分布转换为标准正态分布的计算公式,因此如果原始数据满足正态分布,则经过Z-Score转化之后就能转化为标准正态分布,进而可以利用标准正态分布诸多统计性质。
还有一点非常实用的功能,就是相比0-1标准化,Z-Score标准化能够保留极端值的分布。
由于极端值的存在,会将其他数值压缩在一个非常小的范围内。而如果此时我们采用Z-Score进行标准化,极端值仍然还是极端值(相对该列其他数值而言),此时我们即可采用极端值处理方法对其进行处理(删除或者盖帽(默认凡小于百分之1分位数和大于百分之99分位数的值将会被百分之1分位数和百分之99分位数替代))。
归一化和学习率调度,是梯度下降算法优化的基本方法。
1.数据归一化与梯度下降算法优化
接下来,我们讨论归一化与梯度下降之间的关系。此前我们通过简单例子观察了数据归一化对梯度下降的影响——即归一化能够改变损失函数形态,而这种改变将显著加快梯度下降的迭代收敛过程,直观判断是归一化之后的损失函数等高线图更加均匀。本小节我们将从梯度下降算法优化角度出发,讨论数据归一化和梯度下降之间的关系。
在机器学习模型优化体系中,构建损失函数和损失函数求解是模型优化的两大核心命题,通过损失函数的构建和求解,就能够找到模型最优参数。但对于很多复杂模型来说,损失函数构建和求解并非易事,而梯度下降作为损失函数求解的重要方法,如何优化梯度下降求解过程,使其能够“又快又好”的找到最小值点,就成了决定建模成败的核心因素。当然,从梯度下降到随机梯度下降再到小批量梯度下降,我们可以理解其为算法层面上的优化,但除此以外还有许多围绕优化梯度下降求解过程的算法和方法,例如本节介绍的归一化和学习率调度方法。
当然,优化方法的学习也需要遵循循序渐进的过程,本节我们仍然还是**性回归损失函数、也就是凸函数上进行基本优化思路的介绍和基本优化方法的学习,围绕现线性回归的凸函数损失函数求解,其实是可以使用最小二乘法一步到位求出数值解的,但也正是因为其最优解明确存在,也就给了我们进行对照实验的基础。我们将利用梯度下降算法,在更加复杂的数据集上,探索如何使用优化方法,来逼近明确存在的全域最小值点,并在这个过程中深化对优化方法的理解,进而能够在后续更加复杂的损失函数上、甚至是非凸的损失函数上,凭借我们的理解和所掌握的工具,用好最小二乘法这把利器进行更快更好的最优参数的求解。
为何在相同学习率下,在归一化之后的数据集上进行梯度下降,却更加接近全域最小值点,这又是什么原因呢?回顾此前我们所讨论的归一化对损失函数的影响,从等高线图上来看是等高线变得更加均匀,但实际上是整个损失函数在不同区域对应梯度都更加均匀,从而在靠近最小值点附近的梯度也比归一化之前的损失函数梯度要大,也就是说,虽然学习率相同,但由于归一化之后最小值点附近梯度要更大,因此同样的迭代次,在归一化之后的损失函数上参数点将移动至更加靠近最小值地附近的点。
我们可以通过不断尝试,直到“测出”最佳学习率为止。当然,在Scikit-Learn中其实也提供了这种类似枚举去找出最佳超参数取值的方法,但如果是面对超大规模数据集的建模,受到计算资源的**,我们其实是无法反复建模来找到最优学习率的,此时就需要采用一种更加先进的计算流程来解决这个问题。
其实梯度下降优化的核心目标就是希望“更快更好”的找到最小值点,归一化是通过修改损失函数来达成这个目标,而所谓学习率调度,则是通过调整学习率来达到这个目标。值得注意的是,此时找到一个确定的最优学习率并不是目标,“更快更好”找到最小值点才是目标,因此我们完全可以考虑在迭代过程动态调整学习率。而所谓学习率调度,也并不是一个寻找最佳学习率的方法,而是一种伴随迭代进行、不断调整学习率的策略。
学习率调度方法有很多种,目前流行的也达数十种之多,而其中一种最为通用的学习率调度方法是学习率衰减法,指的是在迭**始时设置较大学习率,而伴随着迭代进行不断减小学习率。通过这样的学习率设置,能够让梯度下降收敛速度更快、效果更好。
例如在上述例子中,我们不妨设置这样的减速衰减的一个学习调度策略,衰减过程比例由如下函数计算得出:
lr_lambda= lambda epoch: 0.95** epoch
即假设初始学习率为0.5,则第一次迭代时实际学习率为0.5*1,第二轮迭代时学习率为0.5*0.95,以此类推。据此,我们可以优化梯度下降迭代过程。
接下来,简单总结学习率调度的使用场景和注意事项。
首先,在很多海量数据处理场景下,学习率调度的重大价值在于能够提供对学习率超参数设置更大的容错空间。在很多情况下,搜索出一个最佳学习率取值进而设置恒定学习率进行梯度下降,难度会远高于设置一组学习率衰减的参数。并且有的时候,刚开始学习率设置过大其实也可以通过多轮迭代进行调整,其所消耗的算力也远低于反复训练模型寻找最佳恒定学习率。
其次,尽管上述例子我们是在梯度下降中使用学习率衰减这一调度策略,但实际上更为一般的情况是学习率调度和小批量梯度下降或者随机梯度下降来配合使用。一般来说梯度下降的使用场景在于小规模数据集且损失函数较为简单的情况,此时可利用梯度下降+枚举找到最佳学习率的策略进行模型训练,其相关**作的技术门槛相对较低(枚举法可借助Scikit-Learn的网格搜索);而对于更大规模的数据集且损失函数情况更加复杂时,则需要考虑小批量梯度下降+学习率调度方法来进行梯度下降求解损失函数。
当然,除了学习率衰减外还有很多学习率调度策略,甚至有些学习率调度策略会间接性提高和降低学习率,来帮助梯度下降找到最小值点。
无论是数据归一化、学习率调度还是采用小批量梯度下降,这些方法并不互斥,我们完全可以组合进行使用,达到组合优化的目的。
三、kmeans算法鸢尾花召回率
使用K-means聚类算法筛实现鸢尾花聚类
对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇,让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大
1、包含3种类型数据集,共150条数据;
2、包含4项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度
return np.sqrt(np.sum((x-y)**2))#计算欧氏距离
#为给定数据集构建一个包含K个随机质心centroids的**
centroids= np.zeros((k,n))#4*4
index= int(np.random.uniform(0,m))#产生0到150的随机数(在数据集中随机挑一个向量做为质心的初值)
centroids[i,:]= dataSet[index,:]#把对应行的四个维度传给质心的**
m= np.shape(dataSet)[0]#行数150
#第一列存每个样本属于哪一簇(四个簇)
#第二列存每个样本的到簇的中心点的误差
clusterAs**ent= np.mat(np.zeros((m,2)))#.mat()创建150*2的矩阵
centroids= randCent(dataSet,k)#4*4
#计算该样本到4个质心的欧式距离,找到距离最近的那个质心minIndex
distance= distEclud(centroids[j,:],dataSet[i,:])
if clusterAs**ent[i,0]!= minIndex:
clusterAs**ent[i,:]= minIndex,minDist**2
# np.nonzero(x)返回值不为零的元素的下标,它的返回值是一个长度为x.ndim(x的轴数)的元组
#元组的每个元素都是一个整数数组,其值为非零元素的下标在对应轴上的值。
#矩阵名.A代表将矩阵转化为array数组类型
#这里取矩阵clusterAs**ent所有行的第一列,转为一个array数组,与j(簇类标签值)比较,返回true or false
#通过np.nonzero产生一个array,其中是对应簇类所有的点的下标值(x个)
#再用这些下标值求出dataSet数据集中的对应行,保存为pointsInCluster(x*4)
pointsInCluster= dataSet[np.nonzero(clusterAs**ent[:,0].A== j)[0]]#获取对应簇类所有的点(x*4)
centroids[j,:]= np.mean(pointsInCluster,axis=0)#求均值,产生新的质心
# axis=0,那么输出是1行4列,求的是pointsInCluster每一列的平均值,即axis是几,那就表明哪一维度被压缩成1
return centroids,clusterAs**ent
def draw(data,center,as**ent):
data1=data[np.nonzero(as**ent[:,0].A== 0)[0]]
data2=data[np.nonzero(as**ent[:,0].A== 1)[0]]
data3=data[np.nonzero(as**ent[:,0].A== 2)[0]]
#选取前两个维度绘制原始数据的散点图
plt.scatter(data1[:,0],data1[:,1],c="red",marker='o',label='label0')
plt.scatter(data2[:,0],data2[:,1],c="green", marker='*', label='label1')
plt.scatter(data3[:,0],data3[:,1],c="blue", marker='+', label='label2')
plt.annotate('center',xy=(center[i,0],center[i,1]),xytext=\
(center[i,0]+1,center[i,1]+1),arrowprops=dict(facecolor='yellow'))
# plt.annotate('center',xy=(center[i,0],center[i,1]),xytext=\
#(center[i,0]+1,center[i,1]+1),arrowprops=dict(facecolor='red'))
#选取后两个维度绘制原始数据的散点图
plt.scatter(data1[:,2],data1[:,3],c="red",marker='o',label='label0')
plt.scatter(data2[:,2],data2[:,3],c="green", marker='*', label='label1')
plt.scatter(data3[:,2],data3[:,3],c="blue", marker='+', label='label2')
plt.annotate('center',xy=(center[i,2],center[i,3]),xytext=\
(center[i,2]+1,center[i,3]+1),arrowprops=dict(facecolor='yellow'))
centroids,clusterAs**ent= KMeans(dataSet,k)
draw(dataSet,centroids,clusterAs**ent)
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
直接从sklearn.datasets中加载数据集
X= iris.data[:,:4]#表示我们取特征空间中的4个维度
每个样本使用两个特征,绘制其二维数据分布图
#取前两个维度(萼片长度、萼片宽度),绘制数据分布图
plt.scatter(X[:, 0], X[:, 1], c="red", marker='o', label='see')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
实例化K-means类,并且定义训练函数
estimator= KMeans(n_clusters=n_clusters)#构造聚类器
label_pred= estimator.labels_#获取聚类标签
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0')
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1')
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
文章到此结束,如果本次分享的鸢尾花数据集和python鸢尾花数据集分析的问题解决了您的问题,那么我们由衷的感到高兴!
- 上一篇:鸢尾花数据集,r语言鸢尾花简单分析
- 下一篇:鸢尾花怎么读?鸢有几个读音
猜你喜欢
- 搜索
-
- 11-30鸢尾花怎么读?鸢有几个读音
- 11-30鸢尾花数据集(python鸢尾花数据集分析)
- 11-30鸢尾花数据集,r语言鸢尾花简单分析
- 11-30鸢尾花是哪个国家的国花(鸢尾花和扁竹花一样吗)
- 11-30鸢尾花是哪个国家的国花,鸢尾花适合送给谁
- 11-30鸢尾花是死人花吗,鸢尾花的特点是什么
- 11-30鸢尾花是死人花吗?鸢尾花在中国寓意
- 11-30鸢尾花有毒吗 鸢尾花的功效与作用
- 11-30鸢尾花有毒吗?鸢尾花吃了多久会中毒
- 11-30鸢尾花梵高(梵高鸢尾花花卉鉴赏)
- 11-30鸢尾花的图片,鸢尾花花语象征与寓意
- 11-30鸢尾花的寓意(白色鸢尾花的花语)
- 11-30鸢尾花的寓意和象征(鸢尾花的名字由来)
- 11-30鸢尾花的寓意和象征(鸢尾花语)
- 11-30鸢尾花的寓意和象征意义?各种花的寓意及花语
- 11-30鸢尾花的寓意和象征意义?鸢尾花的含义
- 11-30鸢尾花的寓意好吗 鸢尾的寓意和象征意义
- 11-30鸢尾花的寓意好吗,鸢尾花象征着自由和希望对吗
- 11-30鸢尾花的种植(鸢尾的种植全过程)
- 11-30鸢尾花的种植,鸢尾花的种植时间和地点
- 网站分类
- 标签列表
-
- 我在宫里做厨师 (600)
- 不完美妈妈 (580)
- 历史 (410)
- 一直在身边 (371)
- 美好 (371)
- 汕头 (324)
- 明朝 (287)
- 文化 (264)
- 唐朝 (236)
- 清朝 (227)
- 政治 (221)
- 经济 (197)
- 三国 (196)
- 曹操 (184)
- 恋爱 (177)
- 宋朝 (172)
- 汉朝 (165)
- 交个朋友吧 (158)
- 中国历史 (158)
- 广东 (151)
- 广州 (151)
- 东莞 (145)
- 熊猫宝来 (144)
- 刘邦 (143)
- 诸葛亮 (140)
- 日本 (138)
- 刘备 (137)
- 史记 (135)
- 美女 (129)
- 春秋战国 (128)
- 康熙 (126)
- 秦始皇 (125)
- 唐太宗 (122)
- 小说 (121)
- 战国时期 (119)
- 朱元璋 (117)
- 服装 (115)
- 三国演义 (114)
- 北宋 (113)
- 雍正 (108)