2. 利用著名的数据集 Iris 对上述感知器算法进行训练: (1). 著名的机器学习数据集网站:http://archive.ics.uci.edu/ml/index.php 网站上保存的是”iris.data”数据文件,可利用 pandas 的 csv 文件读入: (2). 由于我们设计的是二元数据分类器,因此只取 Iris 数据中前 100 组(行)的数据,即前 50 组数据是 Iris-setosa 花的数据,另外 50 组数据是 Iris-versicolor 花的数据,并把类标签表示为:+1 表示 versicolor,而-1 表示 setosa。 (3). 在训练中,分别选取 Iris 数据集的第一列(0 列)和第三列(2 列),即第一列为萼片长度 sepal length,第三列为花瓣长度 petal length,由这两列构成特征列矩阵。 (4). 以 sepal length 为横轴,以 petal length 为纵轴,绘制两种花 setosa 和 versicolor 的数据散点图。观察散点图可知存在线性分界面。 (5). 利用训练数据集训练感知器,给出迭代次数与错误分类样本数的关系。
时间: 2024-03-18 09:43:37 浏览: 98
机器学习之Iris数据集
5星 · 资源好评率100%
好的,让我来回答你的问题。
首先,感知器算法是一种二元分类算法,它可以通过输入样本的特征值,对样本进行分类。对于iris数据集,我们可以选择其中的两个特征:萼片长度和花瓣长度,来进行分类。
以下是实现步骤:
1. 首先,我们需要使用pandas库读入iris数据集,并取出前100组数据。
```python
import pandas as pd
url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris = pd.read_csv(url, header=None)
iris = iris.iloc[:100,:]
```
2. 接着,我们需要将数据集中的类别标签进行编码。将Iris-setosa编码为-1,将Iris-versicolor编码为+1。
```python
import numpy as np
y = np.where(iris.iloc[:, -1]=='Iris-setosa', -1, 1)
```
3. 接下来,我们需要提取数据集中的两个特征列:萼片长度和花瓣长度,并将它们组合成一个特征矩阵。
```python
X = iris.iloc[:, [0, 2]].values
```
4. 然后,我们需要将数据集中的样本进行可视化,以便观察是否存在线性分界面。
```python
import matplotlib.pyplot as plt
plt.scatter(X[:50, 0], X[:50, 1], color='red', marker='o', label='setosa')
plt.scatter(X[50:, 0], X[50:, 1], color='blue', marker='x', label='versicolor')
plt.xlabel('sepal length')
plt.ylabel('petal length')
plt.legend(loc='upper left')
plt.show()
```
5. 我们可以看到,通过萼片长度和花瓣长度这两个特征,可以很好地将setosa和versicolor两种花分开。接下来,我们可以使用感知器算法对这些样本进行分类,并记录迭代次数与错误分类样本数的关系。
```python
from perceptron import Perceptron
ppn = Perceptron(eta=0.1, n_iter=10)
ppn.fit(X, y)
plt.plot(range(1, len(ppn.errors_)+1), ppn.errors_, marker='o')
plt.xlabel('Epochs')
plt.ylabel('Number of errors')
plt.show()
```
其中,Perceptron类是我们自己实现的感知器算法。eta表示学习率,n_iter表示迭代次数。在训练过程中,我们记录了每次迭代的错误分类样本数,并将它们绘制成图表。
以上就是利用iris数据集对感知器算法进行训练的过程。
阅读全文