实验一:用python实现感知机并对鸢尾花数据集分类.pdf
- 文档编号:18634064
- 上传时间:2023-08-23
- 格式:PDF
- 页数:10
- 大小:246.83KB
实验一:用python实现感知机并对鸢尾花数据集分类.pdf
《实验一:用python实现感知机并对鸢尾花数据集分类.pdf》由会员分享,可在线阅读,更多相关《实验一:用python实现感知机并对鸢尾花数据集分类.pdf(10页珍藏版)》请在冰点文库上搜索。
实验:
python实现感知机并对鸢尾花数据集分类实验:
python实现感知机并对鸢尾花数据集分类1.实验内容:
(1)你熟知的语(尽量使python)实现感知器的算法,并在给定的数据集上训练。
(2)在测试集上训练好的感知器模型进测试,并将预测结果以csv格式保存为预测的分类。
(3)简要说明算法原理,记录实验过程的关键步骤,以及实验过程中遇到的问题和解决法。
(4)尝试与上次实验进数据互换对两种算法。
2.实验说明:
数据集为鸢尾花数据集,有三个类别,其中setosa与另外两种之间是线性可分的,因此你需要选择按照setosa和versicolor,或setsosa和virginica,进训练分类。
实验过程中不可以直接调第三库封装好的训练函数,但可以使基础类和函数,例如numpy的数组以及矩阵内积dot函数等(算法迭代过程必须完成)。
算法具体实现式要求,函数或是类封装均可,但是要写进实验报告内。
不必粘贴代码,但要有实验过程关键步骤的截图。
可以尝试利可视化分析实验过程(必须)。
3.报告要求:
实验必须独完成不得抄袭借鉴他的实验内容。
4.原理说明:
简要说明感知器算法原理,可以借助伪代码来进说明。
4.1字描述:
感知机是个分类的线性模型,它的的是寻找个能将训练集正实例点和负实例点完全正确分开的超平,即将输数据线性分为两类(1和-1标识)。
感知机的输是实例的特征向量,输出是实例的类别,分别是+1和-1。
即输实例各属性值组成的向量,根据这些属性值进分类,并做好标签输出。
当我们掌握了输、输出以及最终的时,可以发现最重要的部分是分类使的法对个实例的每个属性进加权,并求和修正,判断正负,实现正实例点和负实例点的区分。
4.2数学抽象:
4.2.1输部分:
输空间(特征空间)表样本的特征向量,对应输空间(特征空间)中的点。
4.2.2输出部分:
XRDxX输出空间(类别空间)是,输出表样本的类别。
4.2.3训练内容:
给定训练集,其中,构建线性分类器,即学习个由属性的线性组合构成的函数。
对于个给定的维样本,其线性组合为即其中为维的权重向量,为偏置。
构建映射关系,即输空间到输出空间的映射函数为:
4.2.4训练策略:
Y=+1,1YD=(x,y),(x,y),(x,y)
(1)
(1)
(2)
(2)(N)(N)x(n)Xy(n)Yn=1,2,3,NDx=x,,x1DTf(x)=wx+11wx+22+wx+DDbf(x)=wx+TbwDbsign(f(x)=sign(wx+Tb)=+1,1,f(x)0f(x)0y(wx+(n)T(n)b)0L(w,b)=y(wx+xQ(n)(n)T(n)b)wbww+yx(n)(n)bb+y(n)(01)L(w,b)L(w,b)=0Sx(n)y(wx+w1(n)T(n)b)y(wx+xQ(n)w1(n)T(n)b)w1D=(x,y),(x,y),(x,y)
(1)
(1)
(2)
(2)(N)(N)x(n)Xy(n)Yn=1,2,3,N(01)初始化:
;选取训练集中的个样本;满收敛条件;输出:
在感知机算法中,采错误驱动的迭代法,类似于贪的策略调整参数,直到可以被正确分类。
但当给定的数据集法分类时,会法收敛,不能得出正确结果。
5.实验过程:
简要说明实验步骤,重点说明关键步骤,对结果进分析。
5.1算法过程化5.1.1读取数据根据所给的csv件可知,每个样本有4个属性,1个标签,根据数据结构构建数据集和标签集#从外部件提取数据(数据格式:
a、b、c、d、label)#构建数据集data_set和标签集data_labeldata_set=data_label=withopen(./iris/iris_train.csv)asf:
forlineinf.readlines():
#print(line.strip()line=line.strip().split(,)foriinrange(len(line)-1):
linei=float(linei)#print(line)data_set.append(line0:
4)#为便计算,将setosa记为1,versicolor和virginica记为-1ifline-1=setosa:
data_label.append
(1)else:
data_label.append(-1)#print(data_label,n)#print(data_set,n)data=np.array(data_set)label=np.array(data_label)#print(data)#print(label)由于数据集为鸢尾花数据集,有三个类别,其中setosa与另外两种之间是线性可分的,为便计算,将标签中的setosa记为1,versicolor和virginica记为-1,其余属性均以数组的形式存储。
5.1.2训练参数w=00,b=00repeat(x,y)(n)(n)ify(wx+(n)T(n)b)0thenww+yx(n)(n)bb+y(n)endifuntilw,b#初始化权重、偏置、步长w=np.array(0,0,0,0)b=0alpha=1#计算(data*w+b)*label,寻找分类错误的点score=(np.dot(data,w.T)+b)*labelidx=np.where(score=0)loss=np.sum(scoreidx)print(TheLoss:
%d%loss)#print(score)#print(idx)#使随机梯度下降法求解权重、偏置iteration=1whilescoreidx.size!
=0:
point=np.random.randint(scoreidx.shape0)x=dataidx0point,:
y=labelidx0pointw=w+alpha*y*xb=b+alpha*y#print(x)#print(y)#print(w)#print(b)score=(np.dot(data,w.T)+b)*labelidx=np.where(score=0)loss=np.sum(scoreidx)print(Iteration:
%dw:
%sb:
%sloss:
%d%(iteration,w,b,loss)iteration=iteration+1固定步长,使随机梯度下降法,对权重、偏置进训练,并配以损失函数初步观察训练效果。
5.1.3初步效果根据训练过程可以看出,训练集中的是可以线性分类的,并随着迭代过程,逐步趋于最优解(loss=0)。
5.1.4可视化#绘图显index_p=np.where(label=1)index_n=np.where(label!
=1)data_p=dataindex_pdata_n=dataindex_nfig=plt.figure()ax=fig.add_subplot(111,projection=3d)x_p=np.transpose(data_p:
0)y_p=np.transpose(data_p:
1)z_p=np.transpose(data_p:
2)s_p=np.transpose(data_p:
3)x_n=np.transpose(data_n:
0)y_n=np.transpose(data_n:
1)z_n=np.transpose(data_n:
2)s_n=np.transpose(data_n:
3)ax.scatter(x_p,y_p,z_p,s=s_p,c=r,marker=,label=setosa)ax.scatter(x_n,y_n,z_n,s=s_n,c=b,marker=o,label=versicolorandvirginica)ax.set_xlabel(XLabel)ax.set_ylabel(YLabel)ax.set_zlabel(ZLabel)ax.legend(loc=best)print(nPerceptronlearningalgorithmisover)由于样本具有四维属性,我们活的空间为三维坐标系,所以我将前三种属性值构成坐标,第四种属性修改为点的,以此体现四维属性,并将分类后的样本使不同颜划分(红为setosa,蓝为versicolor和virginica)。
由图所,分类效果还是分良好的。
5.2算法模块化5.2.1数据格式化函数读训练集defbuild_training_set(file):
data_set=data_label=withopen(file)asf:
forlineinf.readlines():
line=line.strip().split(,)foriinrange(len(line)-1):
linei=float(linei)data_set.append(line0:
4)#为便计算,将setosa记为1,versicolor和virginica记为-1ifline-1=setosa:
data_label.append
(1)else:
data_label.append(-1)data=np.array(data_set)label=np.array(data_label)returndata,label读测试集defbuild_test_set(testFile,targetsFile):
data_set=data_label=withopen(testFile)astestfile:
forlineintestfile.readlines():
line=line.strip().split(,)foriinrange(len(line):
linei=float(linei)data_set.append(line0:
4)withopen(targetsFile)astargetsfile:
forlineintargetsfile.readlines():
line=line.strip().split(,)ifline-1=setosa:
data_label.append
(1)else:
data_label.append(-1)data=np.array(data_set)label=np.array(data_label)returndata,label5.2.2随机梯度法训练参数deftraining_parameters(data,label):
w=np.array(0,0,0,0)b=0alpha=1#计算(data*w+b)*label,寻找分类错误的点score=(np.dot(data,w.T)+b)*labelidx=np.where(score=0)#使随机梯度下降法求解权重、偏置#iteration=1whilescoreidx.size!
=0:
point=np.random.randint(scoreidx.shape0)x=dataidx0point,:
y=labelidx0pointw=w+alpha*y*xb=b+alpha*yscore=(np.dot(data,w.T)+b)*labelidx=np.where(score0)testLabelindex=1#print(testLabel)wrongScore=testLabel*targetsLabelwrongNum=-np.sum(np.where(wrongScore0data_label=withopen(testFile)astestfile:
forlineintestfile.readlines():
line=line.strip().split(,)foriinrange(len(line):
linei=float(linei)data_set.append(line0:
4)withopen(targetsFile)astargetsfile:
forlineintargetsfile.readlines():
line=line.strip().split(,)ifline-1=setosa:
data_label.append
(1)else:
data_label.append(-1)data=np.array(data_set)label=np.array(data_label)returndata,labeldeftraining_parameters(data,label):
w=np.array(0,0,0,0)b=0alpha=1#计算(data*w+b)*label,寻找分类错误的点score=(np.dot(data,w.T)+b)*labelidx=np.where(score=0)#使随机梯度下降法求解权重、偏置#iteration=1whilescoreidx.size!
=0:
point=np.random.randint(scoreidx.shape0)x=dataidx0point,:
y=labelidx0pointw=w+alpha*y*xb=b+alpha*yscore=(np.dot(data,w.T)+b)*labelidx=np.where(score0)testLabelindex=1#print(testLabel)#print(targetsLabel)wrongScore=testLabel*targetsLabelwrongNum=-np.sum(np.where(wrongScore=0)print(Numberoftesterrors:
%d%wrongNum)6.实验问题:
描述实验过程中遇到的问题,以及对应解决办法。
数据格式问题:
在导csv件中,为了后期处理更加便,提前对训练集、测试集、标签集的数据格式做了规定,在编写代码的过程中,有许多细节需要注意,如读取件内容时的分割,读取到的数据进类型转换,字符串名称与数字对应,从计算更加简便。
可视化问题:
由于想象有限,法直观的画出四维属性图,更不提对应的超平。
解决办法:
在三维坐标轴中,增加点的、点的颜等属性,从体现更多的维度。
降低超平具有的维数(这有点粗暴,只选取了前三种属性,忽视了第四种属性)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 python 实现 感知 鸢尾 数据 分类