感知机
在前面介绍了感知机的相关感念以及理论依据,在这里我们以一个实例来看一下感知机的实现过程(python 3)。
数据来源
这里使用经典的鸢尾花Iris数据集作为数据集,由于针对的是二分类问题,因此我们区分Setosa和Versicolor两种。【当然可以将其扩展为多分类问题】
数据来源:https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
数据相关的介绍请看:https://baike.baidu.com/item/IRIS/4061453
数据示例
实现感知机模型
- 引入相关模块
import pandas as pd #引入pandas用于读取数据
import matplotlib.pyplot as plt #引入matplotlib用于画图
from matplotlib.colors import ListedColormap
import numpy as np #引入numpy用于处理数据
- 获取并查看数据
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=None) #获取数据
df.head() #显示其中的前五条看看数据样式
- 显示数据总体样式
我们这里只考虑Setosa和Versicolor两种类型的样本,因此只关注数据的100条。我们将其中Versicolor对应的样本标记为1,Setosa的样本则标记为-1。特征则选用sepal length和petal length两个维度。【考虑到感知机的要求,查看数据是否线性可分,如显然不可分则不适用感知机。】
y=df.iloc[0:100,4].values #获取前一百个样本的标签,函数iloc是按行取的意思
y=np.where(y=='Iris-setosa',-1,1) #对标签进行重新整理:setosa(-1),versicolor(1)
X=df.iloc[0:100,[0,2]].values #取每个样本的第一列(Sepal length)和第三列(petal length)作为特征
####对数据进行图形化显示
plt.scatter(X[:50,0],X[:50,1],color = 'red',marker='o',label='setosa')
plt.scatter(X[50