1. 实验简介

什么是感知机?

感知机是一种二分类的线性判别模型。主要采用了分离超平面的概念,其学习策略是极小化误分点到超平面距离,使用的学习算法为随机梯度下降算法。

我们将采用sklearn包中提供的iris数据使用两种方法进行训练及分类。第一种是根据随机梯度下降法编写算法来训练数据,直到找到分离的超平面。第二种将采用sklearn包中的Perceptron(感知机)类实现。使用最经典的鸢尾花数据集: 鸢尾花数据集地址,鸢尾花的特征主要包括萼片长度、萼片宽度、花瓣长度和花瓣宽度,本次实验利用花瓣的长度和宽度来区分山鸢尾和变色鸢尾。

2. 实验原理

感知机的输入是实例的特征向量,输出是实例的类别,分别取值为1和-1。假设感知机的输入空间是X,输出空间是Y,则,由输入空间到输出空间的函数f(x)=sign(wx+b)称为感知机。其中w是权值向量,b是偏置,线性方程wx+b=0对应于特征空间中的一个超平面S,其中w是超平面的法向量,b是超平面的截距,这个超平面将特征空间划分为了两个部分,这两个部分的点分别是两类。
为了找到这个超平面,定义一个损失函数,并将损失函数最小化,将损失函数定义为误分类点到超平面的距离,误分类点xi到超平面S的距离是,这样,所有误分类点到超平面的总距离是 将其定为感知机的损失函数。感知机的学习过程就是将损失函数最优化,可以采用随机梯度下降法,一次随机选取一个误分类点使其梯度下降,对w,b进行更新:,(η ,0<η≤1,是学习率)。通过迭代使损失函数不断减少,直到训练集中没有误分类点。

算法过程为:
输入:训练数据集以及η
输出:w,b;感知机模型f(x)=sign(w⋅x+b)

  1. 选取初值w0,b0

  2. 在训练集中选取数据(x_i y_i)

  3. 如果y_i (w*x_i+b)≤0,

  4. 转至2,直至训练集中没有误分类点。

3. 实验代码

3.1 方法一

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as pltiris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target# 取出花瓣长度、花瓣宽度以及分类
data = np.array(df.iloc[:100, [2, 3, -1]])
# X是长度和宽度,y是分类
X, y = data[:, :-1], data[:, -1]
y = np.array([1 if i == 1 else -1 for i in y])class Model:def __init__(self):self.w = np.ones(len(data[0]) - 1, dtype=np.float32)  # 初始化权重self.b = 0  # 初始化截距self.l_rate = 0.1  # 学习步长# 符号函数def sign(self, x, w, b):y = np.dot(x, w) + breturn y# 进行感知训练def fit(self, X_train, y_train):is_wrong = Falsewhile not is_wrong:wrong_count = 0for d in range(len(X_train)):X = X_train[d]y = y_train[d]if y * self.sign(X, self.w, self.b) <= 0:self.w = self.w + self.l_rate * np.dot(y, X)  # 更新权重self.b = self.b + self.l_rate * y  # 更新步长wrong_count += 1if wrong_count == 0:is_wrong = Truereturn 'Perceptron Model!'perceptron = Model()
perceptron.fit(X, y)
print(perceptron.w)
print(perceptron.b)
x_points = np.linspace(1, 4, 10)y_ = -(perceptron.w[0] * x_points + perceptron.b) / perceptron.w[1]
plt.plot(x_points, y_)plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend()
plt.show()

实验截图

3.2 方法二

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.linear_model import Perceptroniris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target# 取出花瓣长度、花瓣宽度以及分类
data = np.array(df.iloc[:100, [2, 3, -1]])
# X是长度和宽度,y是分类
X, y = data[:, :-1], data[:, -1]
y = np.array([1 if i == 1 else -1 for i in y])clf = Perceptron(max_iter=1000)
clf.fit(X, y)x_points = np.linspace(1, 4, 10)
y_ = -(clf.coef_[0][0] * x_points + clf.intercept_) / clf.coef_[0][1]
plt.plot(x_points, y_)
print(clf.coef_)
print(clf.intercept_)
print(Perceptron.get_params(clf))
plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend()
plt.show()

实验截图

利用感知机实现鸢尾花分类问题相关推荐

  1. (NO.1)利用sklearn进行鸢尾花分类

    文章目录 利用sklearn进行鸢尾花分类 preheat 联库 版本查询 practice summary 利用sklearn进行鸢尾花分类 preheat 联库 sklearn是基于Numpy和S ...

  2. 利用神经网络对鸢尾花数据集分类

    利用神经网络对鸢尾花数据集分类 详细实现代码请见:https://download.csdn.net/download/weixin_43521269/12578696 一.简介 一个人工神经元网络是 ...

  3. pytorch用多层感知机实现鸢尾花3分类(亲测可用)

    pytorch用多层感知机实现鸢尾花3分类(亲测可用) 泪目了,家人们 我终于能交出点东西了 这是上课的要求,不能直接用库,不能用sklearn函数,必须用多层感知机!而且要3分类,太难了. 鸢尾花分 ...

  4. 【机器学习】决策树案例二:利用决策树进行鸢尾花数据集分类预测

    利用决策树进行鸢尾花数据集分类预测 2 利用决策树进行鸢尾花数据集分类预测 2.1 导入模块与加载数据 2.2 划分数据 2.3 模型创建与应用 2.4 模型可视化 手动反爬虫,禁止转载: 原博地址 ...

  5. 神经网络与深度学习(五)前馈神经网络(3)鸢尾花分类

    目录 4.5实践:基于前馈神经网络完成鸢尾花分类 深入研究鸢尾花数据集 4.5.1 小批量梯度下降法 4.5.1.1 数据分组 4.5.2 数据处理 4.5.2.2 用DataLoader进行封装 4 ...

  6. python决策树分类鸢尾花_基于决策树—鸢尾花分类

    决策树算法广泛应用于:语音识别.医疗诊断.客户关系管理.模式识别.专家系统等,在实际工作中,必须根据数据类型的特点及数据集的大小,选择合适的算法. 本文选择经典案例--<鸢尾花分类> 一. ...

  7. 【神经网络学习】鸢尾花分类的实现

    目录 1.问题 2.问题解决思路 3.神经网络理论准备 4.Tensor Flow编程基础 5. 鸢尾花分类神经网络实现 1.问题 鸢尾花分为:狗尾草鸢尾.杂色鸢尾.弗吉尼亚鸢尾: 通过测量:花萼长. ...

  8. 决策树模型——鸢尾花分类

    构建一个决策树分类模型,实现对鸢尾花的分类 1.lris数据集介绍: 鸢尾花数据集是机器学习领域中非常经典的一个分类数据集.数据集全名为:Iris Data Set,总共包含150行数据. 每一行由4 ...

  9. 【机器学习】鸢尾花分类问题

    鸢尾鸢尾花分类问题是机器学习中最简单的问题,如果这个问题有了很好的理解,机器学习就可以入门了花分类问题是机器学习中最简单的问题,如果这个问题有了很好的理解,机器学习就可以入门了.本文将利用sklear ...

最新文章

  1. 一款简洁大气的jquery日期日历插件
  2. 修改nullMyEclipse 设置文件的默认编码
  3. leetcode-191-Number of 1 Bits
  4. tcp抓包返回fin_TCP/IP学习二TCP链接建立与断开
  5. ros中move_group的参数动态设置
  6. windows常见端口和协议--SMB(445)-NETBIOS(137-138-139)
  7. 【人工智能】给初学者们讲解人工神经网络(ANN)
  8. 【Oracle学习笔记-4】内连接和外连接的区别
  9. Eclipse无法查看Servlet源代码的解决方案
  10. CentOS 7.2.5 安装 Redis 与 远程访问
  11. 处女座的砝码 数学结论题
  12. linux xp双系统引导修复工具,XP和Linux双系统启动菜单的修复
  13. 地铁工程安全生产预警系统价格
  14. 80004005错误代码_0x80004005,教您0x80004005错误代码解决方法
  15. 关于contiki中的Ctimer和Etimer
  16. Julia 在VScode下的操作方式,B站教程Julia中文社区2020夏季会议
  17. ES32中OTA空中升级
  18. java斗地主随机发牌_java实现斗地主发牌功能
  19. PTA乙级题解(110题全)
  20. 阿里:不清除35岁以上的P8员工!

热门文章

  1. 关于svn提交performing vcs refresh 卡住的解决办法
  2. android应用市场汇总
  3. 关于RabbitMQ连接不上None of the specified endpoints were reachable的几个原因
  4. An动画基础之元件的图形动画与按钮动画
  5. 【硬见小百科】SMT工艺,是什么影响锡膏印刷的质量
  6. python 三色球问题
  7. 新车磨合应该从正确启动发动机开始
  8. [18调剂]天津大学软件学院软件工程(专业学位)全日制及非全日制研究生接收院内校内校外调剂...
  9. plg.Polygon
  10. MPEG-TS 格式解析