机器学习---7.神经网络基础
基本介绍
神经网络最基本的成分是神经元模型,当输入值超过了神经元的阈值,神经元就被激活了。然后通过激活函数就可以将输出值对应为0或者1。
感知机
感知机是由两层神经元组成,输入层接收数据,输出层经过激活函数可以输出0或者1,所以感知机能实现一些基本的逻辑运算,下面来看看其中的数学原理。
感知机的数学原理
公式: f(x)=sign(w∗x+b)f(x)=sign(w*x+b)f(x)=sign(w∗x+b)
其中sign(x)={1x≥00x<0\begin{aligned} sign(x)=\left\{ \begin{aligned} 1 &&x \geq 0\\ 0 &&x<0 \end{aligned} \right. \end{aligned} sign(x)={10x≥0x<0
x是输入,w是权重,b是偏差(偏置项)
数学原理很简单,那开始实现一些基本的逻辑运算
- 与运算
- 或运算
- 非运算
- 异或运算
1.与运算
x1 | x2 | x1 AND X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
对应的不等式为:
b<0
w2+b<0
w1+b<0
w1+w2+b>=0
综上:只要权重满足w1,w2<-b,w1+w2>-b就可以实现与运算;
# 1.与运算
import numpy as npdef AND(x1,x2):x=np.array([x1,x2])w=np.array([1,1])b=-1.5y=np.sum(x*w)+bif(y>=0):return 1elif(y<0):return 0print(AND(1,1))
print(AND(0,1))
print(AND(1,0))
print(AND(0,0))
2.或运算
x1 | x2 | x1 OR X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
对应的不等式为:OR
b<0
w2+b>=0
w1+b>=0
w1+w2+b>=0
综上:只要权重满足w1,w2>=-b就可以实现与运算;
def OR(x1,x2):x=np.array([x1,x2])w=np.array([1,1])b=-0.5y=np.sum(x*w)+bif(y>=0):return 1elif(y<0):return 0print(OR(1,1))
print(OR(0,1))
print(OR(1,0))
print(OR(0,0))
3.非运算
x | NOT x |
---|---|
0 | 1 |
1 | 0 |
对应的不等式为:
b>=0
w+b<0
综上:只要权重满足w<-b,b>=0就可以实现非运算;
def NOT(x):x=np.array([x])w=np.array([-1])b=0.5y=np.sum(x*w)+bif(y>=0):return 1elif(y<0):return 0print(NOT(1))
print(NOT(0))
4.异或运算
x1 | x2 | x1 XOR X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
对应的不等式为:
b<0
w2+b>=0
x1+b>=0
w1+w2+b<0
这个不等式无解,所以这就是单层感知机的弊端,不能进行异或运算。
所以这个时候就要用多层感知机去解决这个问题了
#用多层感知机来解决这个问题
def XOR(x1,x2):a=NOT(x1)b=NOT(x2)X1=AND(a,x2)X2=AND(x1,b)Y=OR(X1,X2)print(Y)XOR(0,0)
XOR(1,1)
XOR(0,1)
XOR(1,0)
通过这几个例子我们就知道了单层感知机只能解决线性可分问题,对于非线性可分问题的求解还得通过多层感知机(神经网络)。
对于神经网络的训练
需要训练多层网络,就需要更强大的学习算法—BP算法(反向传播算法)
对训练集假设神经网络的输出为y^jk=f(βj−θj)\hat{y}_{j}^{k}=f(\beta_j-\theta_j)y^jk=f(βj−θj)
则均方误差为:Ek=12∑j=1l(y^jk−yjk)2E_k=\frac{1}{2}\sum_{j=1}^{l}(\hat{y}_j^k-y_j^k)^2Ek=21j=1∑l(y^jk−yjk)2
BP算法还是基于梯度下降的算法,以负梯度方向进行调参,目标是将训练集上的累计误差E=1m∑k=1mEkE=\frac{1}{m}\sum_{k=1}^mE_kE=m1k=1∑mEk最小化。
基本的步骤就是计算输出—>计算输出层的梯度项—>计算隐层的梯度项—>然后根据更新公式更新权重和阈值,所以这叫做反向传播算法。对于权重和阈值的更新公式推导等后期深度学习专题再专门讲,这里就简单介绍一下就好
缺点
反向传播往往容易过拟合,通常用“早停”或者“正则化”的策略来防止过拟合。
最后来个实战例子
使用多层感知机对葡萄酒数据集来分析葡萄酒的优劣
import pandas as pd
wine = pd.read_csv('./wine.csv', names = ["Cultivator", "Alchol", "Malic_Acid", "Ash", "Alcalinity_of_Ash", "Magnesium", "Total_phenols", "Falvanoids", "Nonflavanoid_phenols", "Proanthocyanins", "Color_intensity", "Hue", "OD280", "Proline"])
wine.head(10)
wine.describe().transpose()
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import classification_report,confusion_matrixX = wine.drop('Cultivator',axis=1)
y = wine['Cultivator']
X_train, X_test, y_train, y_test = train_test_split(X, y)
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
mlp = MLPClassifier(hidden_layer_sizes=(13,13,13),max_iter=500)
mlp.fit(X_train,y_train)
predictions = mlp.predict(X_test)
print(confusion_matrix(y_test,predictions))
print(classification_report(y_test,predictions))
print(len(mlp.coefs_))
print(mlp.intercepts_)
机器学习---7.神经网络基础相关推荐
- 深度学习:神经网络基础知识总结
[神经网络基础知识总结]: 定义: 人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它 ...
- 【赠书】图神经网络基础与前沿最新书籍,赠5本学习
假期快要到了,本次给大家赠送5本人工智能领域的技术书籍,这次赠送的书籍是<图神经网络基础与前沿>. 这是一本什么样的书 图神经网络是近两年学术界的热点,在顶级会议上的文章越来越多.目前图像 ...
- 吴恩达《Machine Learning》精炼笔记 4:神经网络基础
作者 | Peter 编辑 | AI有道 今天带来第四周课程的笔记:神经网络基础. 非线性假设 神经元和大脑 模型表示 特征和直观理解 多类分类问题 非线性假设Non-linear Hypothese ...
- Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
红色石头的个人网站:redstonewill.com 上节课我们主要介绍了逻辑回归,以输出概率的形式来处理二分类问题.我们介绍了逻辑回归的Cost function表达式,并使用梯度下降算法来计算最小 ...
- 神经网络基础之可视化和交互式指南
1.动机 2015年11月谷歌开源TensorFlow的时候,我非常兴奋,知道是时候开始学习了.听起来不太戏剧化,但对我来说,这实际上有点像普罗米修斯从机器学习的奥林匹斯山把火传给人类.在我的脑海里浮 ...
- 计算机视觉:卷积神经网络基础
计算机视觉:卷积神经网络基础 计算机视觉概述 计算机视觉的发展历程 卷积神经网络 卷积(Convolution) 卷积计算 填充(padding) 步幅(stride) 感受野(Receptive F ...
- 机器学习——前馈神经网络
一.神经网络基础 1. 神经元模型 神经网络中最基本的单元是神经元模型(neuron). 细胞体分为两部分,前一部分计算总输入值(即输入信号的加权和,或者说累积电平),后一部分先计算总输入值与该神经元 ...
- 深度学习导论(4)神经网络基础
深度学习导论(4)神经网络基础 一. 训练深度学习模型的步骤 二. 线性层(或叫全链接层)(Linear layer(dense or fully connected layers)) 1. 定义一个 ...
- 猿宵节正确打开方式:你要的大数据、机器学习、神经网络…已配齐
导读:数据叔听说,程序猿们今晚要通宵了: 但数据叔真心希望,在这个以团圆为关键词的节日里,你能早点下班,跟家人一起过节.光说几句祝福的话好像诚意不够,数据叔再送一本书,愿你在新年开工之际提高姿势水平. ...
最新文章
- java web dao_JavaWeb项目,DAO应该怎么写?
- visual basic从入门到精通第三版cd_C++从零到精通,这才是你需要的书单!
- ARM汇编:汇编中proc、endp、ret、near、far指令用法
- 每天一个linux命令:cat
- MyBatisPlus条件构造器Condition的用法
- 按钮配置之自定义按钮使用(一)——JEPLUS软件快速开发平台
- 第24周维生素市场最新动态
- mysql初级知识梳理与练习
- Git使用教程之从远程库克隆项目(四)
- DICOM查询/获取信息模型的研究及关系数据库实现
- Eigen教程(6)之高级初始化方法
- 服务器中W3SVC1文件夹的文件,完美解决IIS 服务器无法加载应用程序 '/LM/W3SVC/1/ROOT'。错误是 '没有注册类别...
- JavaScript学习笔记(四)
- A better zip bomb,比例28000000:1「V2」
- python源码剖析_Python源码剖析-深度探索动态语言核心技术.陈儒.PDF版www.atcpu.com...
- 1一10到时的英文单词_1到10的英语单词
- Servlet(HttpServletResponse响应对象)
- 快门光圈感光度口诀_光圈快门感光度口诀是什么?
- Python制作微信小助手
- vue图片裁剪功能的实现
热门文章
- 教你如何使用铁威马NAS智能照片管理功能
- 计算机程序数据随机变化,计算机程序编程课程设计报告(马尔可夫链算法生成随机可读文本)...
- 公式概念与运用计算机,天津市高等院校“高职升本科”招生统一考试 计算机应用基础 考试大纲...
- 前端知识每日小拷问 002
- 服务器文件系统格式,2. Linux 文件系统
- Win7旗舰版64位系统正确安装Genymotion模拟器步骤全过程
- 案例:990万次骑行:纽约自行车共享系统分析
- 什么是DO / DTO / BO / VO /AO ?
- 大学生找工作的个人简历模板(合集)
- 【HC32L110】国产单片机HC32L110C6UA,基础点灯流水灯