本文通过编写神经网络对鸢尾花数据进行训练和分类。通过搜集鸢尾花的数据,并将数据可视化,可以发现通过鸢尾花的花瓣长度和花径长度可以将鸢尾花的品种进行区分。
1.数据样本可视化处理
使用如下代码将数据可视化:
file = "~/Desktop/Iris.csv"
import pandas as pd
df = pd.read_csv(file, header=None)
df.head(10)
选取第0列和第2列,并在二维坐标系中做出点阵图。
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
y = df.iloc[0:100, 4].values
#print y.shape
y = np.where(y == 'Iris-setosa', -1, 1)
X = df.iloc[0:100, [0, 2]].values
#print X.shape
plt.scatter(X[:50, 0], X[:50, 1], color='red', marker='o', label='setosa')
plt.scatter(X[50:100, 0], X[50:100, 1], color='blue', marker='x', label='versicolor')
plt.xlabel('FlowerLength')
plt.ylabel('ScapeLength')
plt.legend(loc='upper left')
plt.show()
通过作图可以发现,根据花瓣长度和花径长度,可以明显的将鸢尾花的种类分为两类。接下来就通过编写神经网络对鸢尾花进行训练和预测。
2.编写感知器神经元模型进行训练和预测
首先编写感知器模型,因为数据量较小,所以就选择了单层神经网络,eta为学习的速率,n_iter为权重向量训练的次数,w_为权重向量。编写模型的训练函数fit。在fit中,先将权重向量初始化为0,然后进行n_iter次的训练迭代。在训练中,update = ß * (y - y'),权重向量就等于权重向量加上update乘以输入值,并将阈值设置为update。n_iter次迭代以后,权重向量就为训练好