奇书网

奇书网>人工智能专业 > 第二节 单层感知器与线性分类(第2页)

第二节 单层感知器与线性分类(第2页)

147147。06。32。55。19virginica

148148。06。535。22virginica

149149。06。23。45。42。3virginica

150150。05。935。11。8virginica

In[10]:print(data。shape)

(151,6)

为了让读者更熟悉Python处理数据的方式,在这个案例中,将从整个鸢尾花数据集中抽取需要使用的类别和特征属性数据。

In[11]:flower_class=data。iloc[1:101,5]。values

In[12]:flo。where(flower_class=="setosa",-1,1)

In[13]:floe=data。iloc[1:101,[1,3]]。values

在上述数据抽取的过程中,有几点需要注意。在Python中数据编号是从0开始的。例如,想读取第1条数据,那么在代码中应该告诉Python你想读取的数据编号是0,如果想读取第9条数据,那么告诉Python的数据编号应该是8。案例需要分析的是鸢尾花数据的前两类,一共100条数据。在下载的数据集中,第一行是数据项的名称,所以应该读取第2到第101条。因此在In[11]中,告诉Python的数据编号是“1:101”(不含101)。类别数据在表格中位于第6列,所以代码中的列编号为“5”。类似地,花萼长度和花瓣长度位于表格的第2列和第4列,所以在In[13]中告诉Python的编号是1和3。In[12]中,把类别“setosa”和“versicolour”转换成了-1和1,它的意思是,如果是setosa,则类别为-1,否则为1。

接下来定义绘制数据散点图的函数,通过data_show()调用函数显示散点图(图6-4)。

Ia_show():

plt。title("鸢尾花散点图",foies=font)

plt。xlabel("花瓣长度",foies=font)

plt。ylabel("萼片长度",foies=font)

plt。legend(loc="upperleft")

plt。show()

In[15]:data_show()

图6-4

利用sklearn提供的感知器,对抽取出的数据进行学习。学习过程一共迭代10次,学习速率设定为0。1。

In[16]:floer_iter=10,eta0=0。1)

In[17]:flower_classifier。fit(floe,flo>

Out[17]:

&ron(alpha=0。0001,class_weight=a0=0。1,fit_interce

pt=True,n_iter=10,n_jobs=1,penalty=None,random_stat

e=0,shuffle=True,verbose=0,warm_start=False)

学习完毕后,计算学习结果的准确率。可以看到准确率为100%(1。0)。这表明,学习结束后得到的模型在这个数据集上的分类准确率是100%,也就是对这些数据可以给出完全正确的分类。通常应该把数据集划分为训练集和检测集,通过训练集学习,再通过检测集评估结果。在这个案例中没有把数据划分为两个部分。一是因为这个问题比较简单,二是可用的数据较少。

In[18]:accuracy=flower_classifier。score(floe,flo>

In[19]:print(accuracy)

1。0

可以定义一个绘图函数,来显示这个分类器的决策边界。结果显示如图6-5所示。

I_de_regions(x,y,classifier,resolution=0。2):

热门小说推荐

最新标签