python中怎么模拟感知机算法
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,今天就跟大家聊聊有关python中怎么模拟感知机算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。通过梯度下降模拟感知机算法。数据来源于skl
千家信息网最后更新 2025年12月01日python中怎么模拟感知机算法
今天就跟大家聊聊有关python中怎么模拟感知机算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
通过梯度下降模拟感知机算法。数据来源于sklearn.datasets中经典数据集。
import numpy as npimport pandas as pd# 导入数据集load_iris。# 其中前四列为花萼长度,花萼宽度,花瓣长度,花瓣宽度等4个用于识别鸢尾花的属性,from sklearn.datasets import load_irisimport matplotlib.pyplot as plot# load datairis = load_iris()# 构造函数DataFrame(data,index,columns),data为数据,index为行索引,columns为列索引# 构造数据结构df = pd.DataFrame(data=iris.data, columns=iris.feature_names)# 在df中加入了新的一列:列名label的数据是target,即类型# 第5列为鸢尾花的类别(包括Setosa,Versicolour,Virginica三类)。# 也即通过判定花萼长度,花萼宽度,花瓣长度,花瓣宽度的尺寸大小来识别鸢尾花的类别。df['label'] = iris.targetdf.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']# 打印出label列值对应的数量。以及列名称、类型# print(df.label.value_counts())# 创建数组,# 第一个参数:100表示取0-99行,即前100行;但100:表示100以后的所有数据。# 第二个参数,0,1表示第一列和第二列,-1表示最后一列data = np.array(df.iloc[:100, [0, 1, -1]])# 数组切割,X切除了最后一列;y仅切最后一列X, y = data[:, :-1], data[:, -1]# 数据整理,将y中非1的改为-1y = np.array([1 if i == 1 else -1 for i in y])# 数据线性可分,二分类数据# 此处为一元一次线性方程class Model: def __init__(self): # w初始为自变量个数相同的(1,1)阵 self.w = np.ones(len(data[0]) - 1, dtype=np.float32) self.b = 0 # 学习率设置为0.1 self.l_rate = 0.1 def sign(self, x, w, b): # dot函数为点乘,区别于*乘。 # dot对矩阵运算的时候为矩阵乘法,一行乘一列。 # *乘对矩阵运算的时候,是对应元素相乘 y = np.dot(x, w) + b return y # 随机梯度下降法 def fit(self, X_train, y_train): is_wrong = False while not is_wrong: # 记录当前的分类错误的点数,当分类错误的点数归零的时候,即分类结束 wrong_count = 0 # d从0-49遍历 for d in range(len(X_train)): # 这里的X为一行两列数组 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 += 1 if wrong_count == 0: is_wrong = True return 'Perceptron Model!' def score(self): passperceptron = Model()# 对perception进行梯度下降perceptron.fit(X, y)print(perceptron.w)x_points = np.linspace(4, 7, 10)# 最后拟合的函数瑞如下:# w1*x1 + w2*x2 + b = 0# 其中x1就是下边的x_points,x2就是y_y_ = -(perceptron.w[0] * x_points + perceptron.b) / perceptron.w[1]plot.plot(x_points, y_)# scatter两个属性分别对应于x,y。# 先画出了前50个点的花萼长度宽度,这时的花类型是0;# 接着画50-100,这时花类型1plot.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')plot.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')# 横坐标名称plot.xlabel('sepal length')# 纵坐标名称plot.ylabel('sepal width')plot.legend()plot.show()结果如图
2. sklearn中提供了现成的感知机方法,我们可以直接调用
import sklearnimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.linear_model import Perceptroniris = load_iris()df = pd.DataFrame(iris.data, columns=iris.feature_names)df['label'] = iris.target# df.columns = [# 'sepal length', 'sepal width', 'petal length', 'petal width', 'label'# ]data = np.array(df.iloc[:100, [0, 1, -1]])X, y = data[:, :-1], data[:, -1]y = np.array([1 if i == 1 else -1 for i in y])clf = Perceptron(fit_intercept=True, # true表示估计截距 max_iter=1000, # 训练数据的最大次数 shuffle=True, # 每次训练之后是否重新训练 tol=None) # 如果不设置none那么迭代将在误差小于1e-3结束clf.fit(X, y)# 输出粘合之后的wprint(clf.coef_)# 输出拟合之后的截距bprint(clf.intercept_)# 画布大小plt.figure(figsize=(10, 10))# 中文标题# plt.rcParams['font.sans-serif'] = ['SimHei']# plt.rcParams['axes.unicode_minus'] = False# plt.title('鸢尾花线性数据示例')plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')# 画感知机的线x_ponits = np.arange(4, 8)y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]plt.plot(x_ponits, y_)# 其他部分plt.legend() # 显示图例plt.grid(False) # 不显示网格plt.xlabel('sepal length')plt.ylabel('sepal width')plt.legend()plt.show()结果如图
看完上述内容,你们对python中怎么模拟感知机算法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
数据
宽度
花萼
长度
类型
花瓣
鸢尾
鸢尾花
算法
内容
函数
名称
数组
时候
梯度
矩阵
线性
分类
训练
一行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全四个主要目标
本机MySQL数据库文件
网络安全比赛新闻稿范文
学ui好还是软件开发好
简历软件开发经验
tbc怀旧服服务器NGA
江西家用软件开发单价
小学生提倡网络安全
请求数据库异常
如何控制网络租赁服务器
加强网络安全信息管理和应用
召开网络安全主题班会的缘由
广西网络安全保障线上学习
模型库数据库知识库之间的关系
网络安全与安防
农村工作局网络安全应急预案
计算机网络技术服务宣传语
标准网络技术市场报价
两个公司项目合作软件开发
鄂州服务器回收怎样收费
安卓软件开发报告及代码
知到网络技术答案
软件开发公司赔钱
河北app软件开发销售价格
防火墙是保护网络安全的吗
丰台区数据网络技术诚信服务
我的世界战地服务器
你所理解的计算机网络技术
网络安全的看法400
神农架靠谱的软件开发团队