1、实验原理
- 感知器算法是最简单的可以学习的机器。感知器算法是很多更复杂算法的基础,如支持向量机和多层感知器人工神经网络。
- 感知器算法要求样本是线性可分的,通过梯度下降法有限次的迭代后就可以收敛得到一个解。 当样本非线性时,使用感知器算法不会收敛。为了使感知器算法在样本集不是线性可分时仍能得到收敛的解,可以在梯度下降过程中让步长按照一定的规则逐渐缩小,这样就可以强制算法收敛。
2、实验内容:
- 读取iris鸢尾花数据集,绘制散点图展示3类鸢尾花。
- 使用感知器算法区分山鸢尾(setosa)和维吉尼亚鸢尾(virginica),每次只使用两个特征进行划分,分别如下:
a: 使用花萼长度和花萼宽度两个特征
b: 使用花瓣长度和花瓣宽度两个特征
感知器算法的步长为 0.1,初始权重为 w=[1,1]T,w0=0w=[1,1]^T,w_0=0w=[1,1]T,w0=0 - 输出结果并绘制分类器图
- 改变步长和初始权重,观察对算法的影响
3、实验代码
- 导入实验会用到的相关库
# 导入实验要用到的相关库
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from matplotlib import pyplot as plt
%matplotlib inline
- 加载鸢尾花数据集
# 加载数据集
iris_dataset = load_iris()
- 使用pandas DataFrame 格式查看数据集
df = pd.DataFrame(iris_dataset.data, columns=iris_dataset.feature_names)
df['label'] = iris_dataset.target
df

- 绘制数据集的散点图矩阵
# 将数据data转换为DataFrame格式
# 利用iris_dataset.feature_names中的字符串对数据列进行标记
iris_dataframe = pd.DataFrame(iris_dataset.data, columns=iris_dataset.feature_names)
# 利用DataFrame创建散点图矩阵,参数c表示按标签target着色
grr = pd.plotting.scatter_matrix(iris_dataframe, c=iris_dataset.target, figsize=(10, 10), marker='o',hist_kwds={
'bins': 50}, s=50, alpha=.8)

矩阵的主对角线是每个特征的直方图,其他位置为通过两两特征绘制的散点图。
- 取出山鸢尾(setosa)和维吉尼亚鸢尾(virginica)的数据和标签
输入:
# 实验要求使用感知器算法区分山鸢尾(Iris-setosa)和维吉尼亚鸢尾(Iris-virginica)
# 取出setosa和virginaica的数据和标签
X = iris_dataset.data[list(range(50))+list(range(100,150))]
y = iris_dataset.target[list(range(50))+list(range(100,150))]
print(X.shape) # 查看X的形状
输出:
(100, 4)
- 选择特征
由于每次划分只是用两个特征,因此还需要对特征进行选择
输入:
X_a = X[:,[0,1]] # X_a:使用花萼长度和花萼宽度两个特征;
print(X_a.shape)
X_b = X[:,[2,3]] # X_b:使用花瓣长度和花瓣宽度两个特征。
print(X_b.shape)
输出:
(100, 2)
(100, 2)
- 画出数据分布
# 画出使用花萼长度和花萼宽度两个特征的点的数据的分布
plt.subplot(2, 1, 1)
plt.scatter(X_a[:50,0],X_a[:50,1], c='c',label='0')
plt.scatter(X_a[50:100,0],X_a[50:100,1], c='y', label='2')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.title('Iris-setosa and Iris-virginica')
plt.legend()
plt.<

本文介绍了使用感知器算法对鸢尾花数据集进行线性分类的方法,包括基于花萼长度和宽度以及花瓣长度和宽度的特征。通过自定义感知器模型和sklearn库进行训练,展示了不同初始权重和学习率对算法收敛及分类效果的影响,并计算了模型精度。
3万+

被折叠的 条评论
为什么被折叠?



