机器学习笔记--实现简单的神经网络
来源:互联网 发布:淘宝中的淘气值能干嘛 编辑:程序博客网 时间:2024/05/06 12:41
编译环境使用的是anaconda,应用的是python语言
软件包的下载:https://mirrors.tuna.tsinghua.edu.cn/
安装后进入:
Environment-->root-->open with Jupyter NoteBook-->弹出网页-->new-->python
然后进行代码编写(代码是根据教学视频中的代码给出的)
import numpy as npclass Perceptron(object): """ 实现感知器的类 eta:学习率 n_iter:权重向量的训练次数 w_:神经分叉权重向量 errors_:用于记录神经元判断出错次数 def _int:为初始化函数 """ def _int_(self, eta = 0.01, n_iter=10): self.eta=eta; self.n_iter=n_iter pass def fit(self,X,y): """ 1.fit方法是为输入训练数据,培训神经元 2.其中X是电信号向量,即输入样本向量 3.y:每一个样本所属于的分类 4.每一个X都有一个shape属性,是对X向量的描述 X:shape(n_samples,n_features) 其中n_samples是指X中有多少个输入的样本量 n_features这个分叉输入的电信号有多少个,比如神经元有三个分叉,则这个神经元 可以接受三个输入电信号 eg:x:[[1,2,3],[4,5,6]] n_samples:2 n_features:3 y:[1,-1]表示[1,2,3]属于分类1,[4,5,6]属于分类-1 1.初始化权重向量为0 2.np.zero:数学库,初始化分量全是0的一个向量 3.其中X.shape[1]为X.shape中的n_samples的值即为2 4.为什么np.zero中要+1,是对应阈值中的对应的w0,(步调函数的阈值) 5.self.errors_表示记录错误的次数 """ self.w_=np.zero(1+X.shape[1]); self.errors_=[] """ 进入训练的过程,训练n_iter,如果尝试了n_iter次都是错误的,则终止训练 """ for _ in range(self.n_iter): errors=0 """ 1. X:[[1,2,3],[4,5,6]] y:[1,-1] 2.zip(X,y) = [[1,2,3,1],[4,5,6,-1]] 3.for中运用权值更新算法 update=η*(y-y'),η是学习率,y是电信号的向量分类,y'是计算出来的分类 y'是对应predict所调用出来的结果 """ for xi,target in zip(X,y): update = self.eta * (target - self.predict(xi)) """ 1.xi是向量,update是常量 update * xi等价于: ▽w(1)=X[1]*update,▽w(2)=X[2]*update,▽w(3)=X[3]*update self.w[1:] +=等价于: 把原来的权重分量全部加上增加的分量▽w(1),▽w(2),▽w(3) self.w[1:]等价于 是从1开始,忽略0元素,即忽略掉0 这样就可以更新每一个神经分叉进行更新 """ self.w[1:] += update * xi """ 更新阈值w0,然后统计判断错误的次数,如果错误次数越来越少,学习效果 越来越好,对新数据的判断越来越准确 如果判断正确,则y-y'=0,则target - self.predict(xi)=0 """ self.w_[0] += update; errors += int(update !=0.0) self.errors_.append(errors) pass pass """ 1.当神经元接受信号的时候会将接受的数据弱化,通过向量的点积运算来进行弱化 2.np.dot做点积,其中权重向量就是进行弱化的那个向量 3.z=w0*1+w1*x1+w2*x2+...+xn*wn 如果z<0则输入的x属于电信号-1 """ def net_input(self,X): return np.dot(X,self.w_[1:])+self.w_[0] pass def predict(self,X): return np.where(self.net_input(X) >= 0.0 , 1,-1) pass pass
import numpy as npclass Perceptron(object): def _int_(self, eta = 0.01, n_iter=10): self.eta=eta; self.n_iter=n_iter pass def fit(self,X,y): self.w_=np.zero(1+X.shape[1]); self.errors_=[] for _ in range(self.n_iter): errors=0 for xi,target in zip(X,y): update = self.eta * (target - self.predict(xi)) self.w_[1:] += update * xi self.w_[0] += update; errors += int(update !=0.0) self.errors_.append(errors) pass pass def net_input(self,X): return np.dot(X,self.w_[1:])+self.w_[0] pass def predict(self,X): return np.where(self.net_input(X) >= 0.0 , 1,-1) pass pass
以上代码是构建神经元的学习基本模型
通过将大量数据给学习模型,让学习模型通过对大量数据进行观察总结出相应规律
根据数据的特点不断的调节神经元的权重数值,当神经元的权重数值调节到合适范围之后,就可以利用训练后的模型
去对新的数据进行运算,通过运算结果就能准确对新的数据进行分类和预测
pandas是python中的提供的非常强大的数据读取类库
header=None是因为csv数据中第一行往往不是一个数据,往往是用来说明下面一些数据的信息的,但代码中file中第一行就是数据,所以设置文件头为None
file = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'import pandas as pddf = pd.read_csv(file,header=None)df.head(10)
运行结果:
关于CSV文件问题:(该段摘自某网友的回答)
file = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
import pandas as pd
df = pd.read_csv(file,header=None)
df.head(10)
1.网址是文件的原地址,数据是可以直接从网址上拔下来的。
2.如果运行以上代码csv的文件,网站只能下载txt需要下载txt后转化成csv。
以上运行结果一致。
0 0
- 机器学习笔记--实现简单的神经网络
- 机器学习之实现简单的神经网络
- [机器学习]机器学习笔记整理11-神经网络算法简单实现
- 机器学习之简单三层神经网络实现
- 机器学习笔记——神经网络的实现
- 机器学习笔记:神经网络
- 机器学习--BP神经网络的C++实现
- 机器学习-学习笔记 神经网络
- 机器学习-神经网络简单Demo
- 机器学习算法练习之(二):Python和Tensorflow分别实现简单的神经网络
- 神经网络与机器学习笔记
- 机器学习笔记(五)神经网络
- 机器学习笔记--神经网络--Rosenblatt
- 手动实现简单的神经网络(唐宇迪神经网络课程笔记)
- 斯坦福机器学习公开课笔记(六)--神经网络的学习
- 斯坦福机器学习公开课笔记--神经网络的学习
- 机器学习笔记(九) 神经网络的学习
- 神经网络与深度学习学习笔记:实现单隐层的神经网络
- Runtime
- matlab中的随机函数
- css3 animation与jQuery animate()区别
- 使用Spring的@Scheduled实现定时任务
- 【C++学习笔记】结构简介
- 机器学习笔记--实现简单的神经网络
- java基础面试题大全(一)
- C++之菱形继承的解决之道
- 计算机专外Week6-Exercises
- springmvc拦截器
- 利用CSS3 text-overflow换行
- Linux中退出/保存
- AndroidAPI学习——任务和返回栈
- C语言--完数