神经网络

先贴代码:

#! /usr/bin/env python
# coding=utf-8
from sklearn.datasets import load_digits  # 数据集
from sklearn.preprocessing import LabelBinarizer  # 标签二值化
#from sklearn.cross_validation import train_test_split  # 数据集分割 注意新版本则为下面的model_selection
from sklearn.model_selection import train_test_split
import numpy as npimport pylab as pl  # 数据可视化def sigmoid(x):  # 激活函数return 1 / (1 + np.exp(-x))def dsigmoid(x):  # sigmoid的倒数return x * (1 - x)class NeuralNetwork:def __init__(self, layers):  # 这里是三层网络,列表[64,100,10]表示输入,隐藏,输出层的单元个数# 初始化权值,范围1~-1self.V = np.random.random((layers[0] + 1, layers[1])) * 2 - 1  # 隐藏层权值(65,100),之所以是65,因为有偏置W0self.W = np.random.random((layers[1], layers[2])) * 2 - 1  # (100,10)def train(self, X, y, lr=0.1, epochs=10000):# lr为学习率,epochs为迭代的次数# 为数据集添加偏置temp = np.ones([X.shape[0], X.shape[1] + 1])temp[:, 0:-1] = XX = temp  # 这里最后一列为偏置# 进行权值训练更新for n in range(epochs + 1):i = np.random.randint(X.shape[0])  # 随机选取一行数据(一个样本)进行更新x = X[i]x = np.atleast_2d(x)  # 转为二维数据L1 = sigmoid(np.dot(x, self.V))  # 隐层输出(1,100)L2 = sigmoid(np.dot(L1, self.W))  # 输出层输出(1,10)# deltaL2_delta = (y[i] - L2) * dsigmoid(L2)  # (1,10)L1_delta = L2_delta.dot(self.W.T) * dsigmoid(L1)  # (1,100),这里是数组的乘法,对应元素相乘# 更新self.W += lr * L1.T.dot(L2_delta)  # (100,10)self.V += lr * x.T.dot(L1_delta)  ## 每训练1000次预测准确率if n % 1000 == 0:predictions = []for j in range(X_test.shape[0]):out = self.predict(X_test[j])  # 用验证集去测试predictions.append(np.argmax(out))  # 返回预测结果accuracy = np.mean(np.equal(predictions, y_test))  # 求平均值print('epoch:', n, 'accuracy:', accuracy)def predict(self, x):# 添加转置,这里是一维的temp = np.ones(x.shape[0] + 1)temp[0:-1] = xx = tempx = np.atleast_2d(x)L1 = sigmoid(np.dot(x, self.V))  # 隐层输出L2 = sigmoid(np.dot(L1, self.W))  # 输出层输出return L2digits = load_digits()  # 载入数据
X = digits.data  # 数据y = digits.target  # 标签
# print y[0:10]# 数据归一化,一般是x=(x-x.min)/x.max-x.min
X -= X.min()
X /= X.max()# 创建神经网络
nm = NeuralNetwork([64, 100, 10])X_train, X_test, y_train, y_test = train_test_split(X, y)  # 默认分割:3:1# 标签二值化
labels_train = LabelBinarizer().fit_transform(y_train)
# print labels_train[0:10]
labels_test = LabelBinarizer().fit_transform(y_test)print
'start'nm.train(X_train, labels_train, epochs=20000)print
'end'

再看结果

epoch: 0 accuracy: 0.10444444444444445
epoch: 1000 accuracy: 0.58
epoch: 2000 accuracy: 0.8511111111111112
epoch: 3000 accuracy: 0.9066666666666666
epoch: 4000 accuracy: 0.9288888888888889
epoch: 5000 accuracy: 0.9177777777777778
epoch: 6000 accuracy: 0.9444444444444444
epoch: 7000 accuracy: 0.9422222222222222
epoch: 8000 accuracy: 0.9444444444444444
epoch: 9000 accuracy: 0.9488888888888889
epoch: 10000 accuracy: 0.9511111111111111
epoch: 11000 accuracy: 0.9555555555555556
epoch: 12000 accuracy: 0.9533333333333334
epoch: 13000 accuracy: 0.9511111111111111
epoch: 14000 accuracy: 0.9533333333333334
epoch: 15000 accuracy: 0.96
epoch: 16000 accuracy: 0.9533333333333334
epoch: 17000 accuracy: 0.96
epoch: 18000 accuracy: 0.96
epoch: 19000 accuracy: 0.96
epoch: 20000 accuracy: 0.96

也可参考:https://blog.csdn.net/huakai16/article/details/77479127

机器学习之监督学习(二)——神经网络相关推荐

  1. 2021 MIT || 麻省理工机器学习导论(二)RNN LSTMs循环神经网络

    2021 MIT || 麻省理工机器学习导论(二) YOUTube:MIT 6.S191: Introduction to Deep Learning(要梯子,可以去B站上找找,好像也有) 这些是我在 ...

  2. 机器学习、监督学习、非监督学习、强化学习、深度学习、迁移学习

    机器学习.监督学习.非监督学习.强化学习.深度学习.迁移学习 机器学习(machine learning) 监督学习(supervised learning) 非监督学习(unsupervised l ...

  3. 【人工智能】机器学习概述(二)

    目录 一.机器学习概述: 1.机器学习定义: 2.机器学习分类: 3.机器学习流程: 二.没有免费午餐定理(No Free Lunch Theorem): 一.机器学习概述: [人工智能]机器学习概述 ...

  4. 机器学习中有监督学习——回归

    机器学习中有监督学习--回归 一.引言 本材料参考Andrew Ng大神的机器学习课程 http://cs229.stanford.edu,以及斯坦福无监督学习UFLDL tutorial http: ...

  5. 斯坦福大学机器学习第八课“神经网络的表示(Neural Networks: Representation)”

    斯坦福大学机器学习第八课"神经网络的表示(Neural Networks: Representation)" 斯坦福大学机器学习第八课"神经网络的表示(Neural Ne ...

  6. 一天1个机器学习知识点(二)

    陆陆续续整理的机器学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,,一起学习,一起进步! 每天都在更新中,记得收藏,每天进步一点点!! 一天 ...

  7. 斯坦福大学机器学习第六课“神经网络的表示(Neural Networks: Representation)”

    斯坦福大学机器学习第六课"神经网络的表示(Neural Networks: Representation)" 本次课程主要包括7部分: 1)  Non-linear hypothe ...

  8. 机器学习:监督学习和无监督学习

    机器学习:监督学习和无监督学习 ************************************** 注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的<机器学习& ...

  9. 【机器学习】广义回归神经网络(GRNN)的python实现

    [机器学习]广义回归神经网络(GRNN)的python实现 一.广义回归神经网络原理 1.1.GRNN与PNN的关系 2.2.GRNN的网络结构 二.广义回归神经网络的优点与不足 2.1.优点 2.2 ...

  10. 【转】 机器学习入门——浅谈神经网络

    [转] 机器学习入门--浅谈神经网络 本文转自:https://blog.csdn.net/bitjoy/article/details/50464989 先从回归(Regression)问题说起.我 ...

最新文章

  1. C语言中:在头文件中使用static定义变量意味着什么?
  2. 使用hyper-v、CentOS学习Linux基本概念和命令
  3. 活动 | 5G万物智联下互联网通信技术升级之路
  4. git根据用户过滤提交记录
  5. python开发环境有哪些_python编程需要什么环境
  6. springmvc 带查询条件的分页,form的控制范围,怎么包裹条件提交给后台
  7. dataframe 查找特定值_C++初级编程NOIP题:11H1544: 查找特定的值
  8. [msi]启动msi日志记录
  9. Java千百问_06数据结构(003)_什么是基本类型包装器
  10. 运行命令、文件扩展名速查、Windows运行命令大全
  11. 高级Bash脚本编程指南
  12. tl494cn逆变器电路图_tl494简单逆变器电路
  13. 有赞BI平台实现原理
  14. 作业:欧拉公式以及凉鞋问题
  15. 【RDMA】使用‘无信号完成’(Working with Unsignaled completions)|IBV_SEND_SIGNALED
  16. c语言stdin输入字符,scanf如何从stdin中读取数据的
  17. 前台传入数据后台被转义问题解决
  18. 淘宝商城,亚洲最大网上购物网站
  19. 服务器发来的信息手机收不到,收不到QQ好友发来的信息
  20. 【MySQL】索引常见面试题

热门文章

  1. android触摸事件触摸点坐标,Android开发——触摸事件TouchEvent详解及其应用
  2. log4j:WARN Please initialize the log4j system properly.解决方案
  3. C#控制 计算机中“服务”的启动与停止 转
  4. andriod socket开发问题小结
  5. ubuntu pcl 点云库使用
  6. formdata ie9怎么兼容_2021上半年教师资格证笔试报名如何设置兼容性?
  7. LA 2572 Viva Confetti (Geometry.Circle)
  8. oracle 中的参数 optimizer_mod的各个参数的意义
  9. VoltDB培训PPT一则
  10. 使用commons-fileupload包实现文件上传