机器学习笔记--实现简单的神经网络

来源:互联网 发布:淘宝中的淘气值能干嘛 编辑:程序博客网 时间: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苏宁账号被冻结怎么办 九州娱乐提款未到账怎么办 法院拍卖后不足的余款怎么办 购车后余款没拿怎么办? 抵押房屋被执行后余款怎么办 苏宁无敌券过期怎么办 被亚马逊自营跟卖怎么办 苏宁易购绑定手机后解绑不了怎么办 手机qq注册号码忘了怎么办 原创头条号被限制推荐了怎么办 为什么打开app有广告怎么办 苹果手机浏览器总是弹出广告怎么办 手机上打开页面出现广告怎么办 电脑下面的任务栏变宽了怎么办 酷派手机总是出现广告怎么办 电脑弹出的热点新闻关闭不了怎么办 京东老是弹广告怎么办 电脑右下角出现无法显示网页怎么办 电脑右下角广告关不了怎么办 qq邮箱被冻结了怎么办 手机qq群自动发广告怎么办 济宁学院考研和上课冲突怎么办 考研但是大四上课多怎么办 试管促排卵泡少怎么办 京东退货卖家拒收怎么办 京东退货被卖家拒收怎么办 期货平台跑路了怎么办 浮云牧场没房了怎么办 融资股票停牌了怎么办 买入的股票停牌怎么办 淘宝抢到便宜货老板不发货怎么办 微信代购买到假货了怎么办 微信代购收到假货怎么办 苹果商店下载很慢怎么办 谷歌商店下载东西慢怎么办 买家说少发货了怎么办 人肉代购被海关扣了怎么办 韩国代购被海关扣了怎么办 爱奇艺开通自动续费忘了账号怎么办 小米手机云储存空间不足怎么办 路由器被黑了打不开网页怎么办