全文共3494字,预计学习时长11分钟

来源:Pexels

这篇推文将展示如何使用python对乳腺癌数据集建立感知模型。

感知器是神经网络的基本单位。神经网络接收和处理加权输入,并对其进行二元分类。

免责声明:本文的内容和结构基于One-forth实验室——Padhai的深度学习讲座。

感知器概述

不同于MP神经元模型中的布尔输入,感知器模型中的输入可以是真正的数字。模型的输出仍然是二元的0或1。输入值x的加权和如果大于阈值b,感知模型将输出1,否则将输出0。

图1——数学表征学习算法

该学习算法的主要目的是找出能够把数据完全分成正P (y = 1)或负N(y = 0)的向量w,感知器学习算法运行如下。

图2——感知器算法

开始写代码吧

我们将使用来自于sklearn的乳腺癌数据集。数据集有569个观察值和30个变量(不包括类变量)。乳腺癌数据是失衡数据集,类别0和类别1的数据量差异较大。因为本例只是简单实现感知器模型,我们不打算采取任何抽样技术来平衡数据量。

(类失衡)

开始构建感知器模型之前,首先加载需要的包和数据集。数据集已经在sklearn的数据模块中准备就绪。数据加载完成后,需要使用breast_cancer.data和breast_cancer.target命令提取数据特征和反应变量。

#import packages

import sklearn.datasets

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

#load thebreast cancer data

breast_cancer= sklearn.datasets.load_breast_cancer()

#convertthe data to pandas dataframe.

data =pd.DataFrame(breast_cancer.data, columns = breast_cancer.feature_names)

data["class"] = breast_cancer.target

data.head()

data.describe()

#plottinga graph to see classimbalance

data['class'].value_counts().plot(kind = "barh")

plt.xlabel("Count")

plt.ylabel("Classes")

plt.show()

from sklearn.preprocessing import MinMaxScaler

#performscaling on the data.

X =data.drop("class", axis = 1)

Y = data["class"]

mnscaler =MinMaxScaler()

X = mnscaler.fit_transform(X)

X =pd.DataFrame(X, columns=data.drop("class",axis = 1).columns)

#traintest split.

X_train,X_test, Y_train, Y_test = train_test_split(X,Y, test_size = 0.1, stratify= Y, random_state = 1)

(感知器预处理)

获取变量X和Y后,通过最小最大缩放将所有的特征值控制在范围0~1内。建立模型前,将数据分割为训练用数据和测试用数据,分别对两部分数据进行模型训练与性能测试。我们将使用sklearn的train_test_split函数将数据按90:10的比例进行分割,分别用于训练和测试。现在预处理已经完成,可以开始构建模型了。我们将在一个叫做perceptron的类中构建模型。

在“perceptron”类中,编写一个构造函数def_init_。这一函数将权值向量w与阈值b设置为空。

classPerceptron:

#constructor

def__init__ (self):

self.w = None

self.b = None

#model

def model(self, x):

return1if (np.dot(self.w, x) >= self.b) else0

#predictor to predict on the data based on w

def predict(self, X):

Y = []

for x in X:

result = self.model(x)

Y.append(result)

return np.array(Y)

def fit(self, X, Y, epochs = 1, lr = 1):

self.w = np.ones(X.shape[1])

self.b = 0

accuracy = {}

max_accuracy = 0

wt_matrix = []

#for all epochs

for i in range(epochs):

for x, y in zip(X,Y):

y_pred = self.model(x)

if y == 1 andy_pred == 0:

self.w = self.w + lr * x

self.b = self.b - lr * 1

elif y == 0 andy_pred == 1:

self.w = self.w - lr * x

self.b = self.b + lr * 1

wt_matrix.append(self.w)

accuracy[i] =accuracy_score(self.predict(X), Y)

if (accuracy[i] > max_accuracy):

max_accuracy = accuracy[i]

chkptw = self.w

chkptb = self.b

#checkpoint (Save the weights and b value)

self.w = chkptw

self.b = chkptb

print(max_accuracy)

#plot the accuracy values over epochs

plt.plot(accuracy.values())

plt.xlabel("Epoch #")

plt.ylabel("Accuracy")

plt.ylim([0, 1])

plt.show()

#return the weight matrix, that contains weightsover all epochs

return np.array(wt_matrix)

(perceptron模型)

函数模型以输入值x作为参数,计算输入的加权聚合(w与x的点积),点积大于b则返回值为1,否则返回值为0。接下来调用predict函数,其参数为x,该函数计算x中每一个观察值的预测结果,并返回预测结果列表。

最后,执行fit函数找到为给定数据分类的最佳权值向量w和阈值b。该函数以输入数据(x与y),学习率和训练次数作为参数。

perceptron= Perceptron()

#epochs = 10000 and lr = 0.3

wt_matrix= perceptron.fit(X_train, Y_train, 10000, 0.3)

#makingpredictions on test data

Y_pred_test= perceptron.predict(X_test)

#checkingthe accuracy of the model

print(accuracy_score(Y_pred_test,Y_test))

(perceptron模型的执行)

搭建好这个类之后,将新的perceptron类初始化,使用该类对训练用数据调用fit方法,找到最佳参数。我们将通过计算测试准确率来评估模型在测试数据上的性能。

更多改进

可以尝试一些改进来提高模型的准确性。

· 改变训练集和测试集的比例,观察模型预测准确率有无变化。

· 增加输入次数,学习速率,在感知器模型上测试,对准确率变化变化进行可视化处理。

· 在感知器模型中随机输入权值,测试其结果

来源:Pexels

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

python实现算法改进_独门秘籍,如何从零开始用Python实现感知算法?相关推荐

  1. python以图搜图_以图搜图(一):Python实现dHash算法(转)

    近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是 ...

  2. python具体工作内容_有没有人知道公司里用python工作的内容有什么

    2018-07-11 回答 python的特色 简单 python是一种代表简单主义思想的语言.阅读一个良好的python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!python的这种伪代 ...

  3. python注册人工智能专业_从专业程度上分析Python和人工智能(AI) 它们如何相关?...

    Python和人工智能(AI) - 它们如何相关? Python是当今开发人员使用的最流行的编程语言之一.Guido Van Rossum于1991年创建它,自成立以来,它一直是使用最广泛的语言之一, ...

  4. python实现推荐系统代码_推荐系统之矩阵分解及其Python代码实现

    有如下R(5,4)的打分矩阵:("-"表示用户没有打分) 其中打分矩阵R(n,m)是n行和m列,n表示user个数,m行表示item个数 那么,如何根据目前的矩阵R(5,4)如何对 ...

  5. 经典python项目源码_建议收藏,22个Python迷你项目(附源码)

    在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...

  6. python迷你停车管理系统_建议收藏,22个Python迷你项目(附源码)

    在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...

  7. python删除图片文字_文字隐藏到图片的python脚本

    本帖最后由 WyattHuang 于 2019-7-13 17:47 编辑 这是什么: 昨天写的一个能把文字隐藏在图片的python脚本 DEMO: 藏文字之前: 藏文字之后: 使用方法 下载 T2I ...

  8. numpy是python标准库吗_吐血 整理!140种Python标准库、第三方库和外部工具都有了...

    Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连接.数 ...

  9. python项目开发计划_开源项目 | 企业微信第三方Python SDK项目启动计划

    各位知友大家好!我是量潮科技创始人 @iGuo ,这篇文章和大家分享我们公司目前的一些技术进展和一些开源项目的规划. 在技术方面,我们目前还处在搭建平台的早期阶段:在架构完善以后,我会专门写一篇文章介 ...

最新文章

  1. AGX Xavier GPIO
  2. shell脚本编程-结构化命令2-for命令
  3. ITK:表面提取之前平滑二值图像
  4. CSS3的flex布局:方向 换行 对齐 顺序
  5. JAVA多线程(一)线程安全问题产生的原因
  6. python-练习-查找匹配-模拟数据库的查找-小例子
  7. jboss esb 学习笔记与html的传输,Jboss_ESB学习笔记1.doc
  8. 特斯拉得克萨斯超级工厂正式开业 计划明年开始生产电动皮卡
  9. c语言心形编程代码_做游戏,学编程(C语言) 7 学习EasyX图形交互功能----flappy bird源代码...
  10. c语言程序设计教程二进制是什么,C语言程序设计教程
  11. python怎么解压rar文件_Python 解压缩文件详解
  12. 在HTML中可以链接Word文档吗,为Word文档添加超文本链接就是这么简单!
  13. InnoDB一棵B+树可以存放多少行数据?
  14. Unity OSA循环列表插件常用介绍
  15. 关于100M以太网的争用期问题
  16. NYOJ326_Dining(最大流)
  17. ES6语法总结(21)--Generator函数的异步应用
  18. ps保存html和图像格式不显示,photoshop保存web格式不能显示该怎样解决
  19. 爱普生连续供墨系统故障排除方法
  20. 朵拉影像开发 又一个昫暖的午后

热门文章

  1. 去除android2.1移动设备3G图标
  2. Spring MVC BindingResult异常
  3. 解决Docker容器时区不一致的问题
  4. 2021年企业直播营销研究报告
  5. 【报告分享】中国营销数字化行业趋势报告:全渠道时代,品牌商如何抓住消费者?(附下载链接)...
  6. 美团智能搜索推荐模型预估框架的建设与实践
  7. TransFM:基于因子分解机的序列推荐方法
  8. PyTorch系列入门到精通——梯度消失与爆炸,损失函数
  9. 安卓actionBar上无法显示搜索按钮如何解决
  10. 娓娓道来!那些BERT模型压缩方法(一)