使用Python scikit-learn 库实现神经网络算法
1:神经网络算法简介
2:Backpropagation算法详细介绍
3:非线性转化方程举例
4:自己实现神经网络算法NeuralNetwork
5:基于NeuralNetwork的XOR实例
6:基于NeuralNetwork的手写数字识别实例
7:scikit-learn中BernoulliRBM使用实例
8:scikit-learn中的手写数字识别实例
一:神经网络算法简介
1:背景
以人脑神经网络为启发,历史上出现过很多版本,但最著名的是backpropagation
2:多层向前神经网络(Multilayer Feed-Forward Neural Network)
多层向前神经网络组成部分
输入层(input layer),隐藏层(hiddenlayer),输出层(output layer)
3:设计神经网络结构
4:算法验证——交叉验证法(Cross- Validation)
解读: 有一组输入集A,B,可以分成三组,第一次以第一组为训练集,求出一个准确度,第二次以第二组作为训练集,求出一个准确度,求出准确度,第三次以第三组作为训练集,求出一个准确度,然后对三个准确度求平均值
二:Backpropagation算法详细介绍
1:通过迭代性来处理训练集中的实例
2:输入层输入数
经过权重计算得到第一层的数据,第一层的数据作为第二层的输入,再次经过权重计算得到结果,结果和真实值之间是存在误差的,然后根据误差,反向的更新每两个连接之间的权重
3:算法详细介绍
输入:D : 数据集,| 学习率(learning rate),一个多层前向神经网络
4:结合实例讲解算法
0.9对用的是L,学习率
测试代码如下:
1.NeutralNetwork.py文件代码
#coding:utf-8 import numpy as np #定义双曲函数和他们的导数def tanh(x): return np.tanh(x) def tanh_deriv(x): return 1.0 - np.tanh(x)**2 def logistic(x): return 1/(1 + np.exp(-x)) def logistic_derivative(x): return logistic(x)*(1-logistic(x)) #定义NeuralNetwork 神经网络算法class NeuralNetwork: #初始化,layes表示的是一个list,eg[10,10,3]表示第一层10个神经元,第二层10个神经元,第三层3个神经元 def __init__(self, layers, activation='tanh'): """ :param layers: A list containing the number of units in each layer. Should be at least two values :param activation: The activation function to be used. Can be "logistic" or "tanh" """ if activation == 'logistic': self.activation = logistic self.activation_deriv = logistic_derivative elif activation == 'tanh': self.activation = tanh self.activation_deriv = tanh_deriv self.weights = [] #循环从1开始,相当于以第二层为基准,进行权重的初始化 for i in range(1, len(layers) - 1): #对当前神经节点的前驱赋值 self.weights.append((2*np.random.random((layers[i - 1] + 1, layers[i] + 1))-1)*0.25) #对当前神经节点的后继赋值 self.weights.append((2*np.random.random((layers[i] + 1, layers[i + 1]))-1)*0.25) #训练函数 ,X矩阵,每行是一个实例 ,y是每个实例对应的结果,learning_rate 学习率, # epochs,表示抽样的方法对神经网络进行更新的最大次数 def fit(self, X, y, learning_rate=0.2, epochs=10000): X = np.atleast_2d(X) #确定X至少是二维的数据 temp = np.ones([X.shape[0], X.shape[1]+1]) #初始化矩阵 temp[:, 0:-1] = X # adding the bias unit to the input layer X = temp y = np.array(y) #把list转换成array的形式 for k in range(epochs): #随机选取一行,对神经网络进行更新 i = np.random.randint(X.shape[0]) a = [X[i]] #完成所有正向的更新 for l in range(len(self.weights)): a.append(self.activation(np.dot(a[l], self.weights[l]))) # error = y[i] - a[-1] deltas = [error * self.activation_deriv(a[-1])] #开始反向计算误差,更新权重 for l in range(len(a) - 2, 0, -1): # we need to begin at the second to last layer deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l])) deltas.reverse() for i in range(len(self.weights)): layer = np.atleast_2d(a[i]) delta = np.atleast_2d(deltas[i]) self.weights[i] += learning_rate * layer.T.dot(delta) #预测函数 def predict(self, x): x = np.array(x) temp = np.ones(x.shape[0]+1) temp[0:-1] = x a = temp for l in range(0, len(self.weights)): a = self.activation(np.dot(a, self.weights[l])) return a
2、测试代码
#coding:utf-8'''#基于NeuralNetwork的XOR(异或)示例import numpy as npfrom NeuralNetwork import NeuralNetwork nn = NeuralNetwork([2,2,1], 'tanh')X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])y = np.array([0, 1, 1, 0])nn.fit(X, y)for i in [[0, 0], [0, 1], [1, 0], [1,1]]: print(i,nn.predict(i))''''''#基于NeuralNetwork的手写数字识别示例import numpy as npfrom sklearn.datasets import load_digitsfrom sklearn.metrics import confusion_matrix,classification_reportfrom sklearn.preprocessing import LabelBinarizerfrom sklearn.cross_validation import train_test_splitfrom NeuralNetwork import NeuralNetwork digits = load_digits()X = digits.datay = digits.targetX -= X.min()X /= X.max() nn =NeuralNetwork([64,100,10],'logistic')X_train, X_test, y_train, y_test = train_test_split(X, y)labels_train = LabelBinarizer().fit_transform(y_train)labels_test = LabelBinarizer().fit_transform(y_test)print "start fitting"nn.fit(X_train,labels_train,epochs=3000)predictions = []for i in range(X_test.shape[0]): o = nn.predict(X_test[i]) predictions.append(np.argmax(o))print confusion_matrix(y_test, predictions)print classification_report(y_test, predictions)''' #scikit-learn中的手写数字识别实例import numpy as npimport matplotlib.pyplot as plt from scipy.ndimage import convolvefrom sklearn import linear_model, datasets, metricsfrom sklearn.cross_validation import train_test_splitfrom sklearn.neural_network import BernoulliRBMfrom sklearn.pipeline import Pipeline ################################################################################ Setting up def nudge_dataset(X, Y): direction_vectors = [ [[0, 1, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [1, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 1], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 1, 0]]] shift = lambda x, w: convolve(x.reshape((8, 8)), mode='constant', weights=w).ravel() X = np.concatenate([X] + [np.apply_along_axis(shift, 1, X, vector) for vector in direction_vectors]) Y = np.concatenate([Y for _ in range(5)], axis=0) return X, Y # Load Datadigits = datasets.load_digits()X = np.asarray(digits.data, 'float32')X, Y = nudge_dataset(X, digits.target)X = (X - np.min(X, 0)) / (np.max(X, 0) + 0.0001) # 0-1 scaling X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0) # Models we will uselogistic = linear_model.LogisticRegression()rbm = BernoulliRBM(random_state=0, verbose=True) classifier = Pipeline(steps=[('rbm', rbm), ('logistic', logistic)]) ################################################################################ Training # Hyper-parameters. These were set by cross-validation,# using a GridSearchCV. Here we are not performing cross-validation to# save time.rbm.learning_rate = 0.06rbm.n_iter = 20# More components tend to give better prediction performance, but larger# fitting timerbm.n_components = 100logistic.C = 6000.0 # Training RBM-Logistic Pipelineclassifier.fit(X_train, Y_train) # Training Logistic regressionlogistic_classifier = linear_model.LogisticRegression(C=100.0)logistic_classifier.fit(X_train, Y_train) ################################################################################ Evaluation print()print("Logistic regression using RBM features:\n%s\n" % ( metrics.classification_report( Y_test, classifier.predict(X_test)))) print("Logistic regression using raw pixel features:\n%s\n" % ( metrics.classification_report( Y_test, logistic_classifier.predict(X_test)))) ################################################################################ Plotting plt.figure(figsize=(4.2, 4))for i, comp in enumerate(rbm.components_): plt.subplot(10, 10, i + 1) plt.imshow(comp.reshape((8, 8)), cmap=plt.cm.gray_r, interpolation='nearest') plt.xticks(()) plt.yticks(())plt.suptitle('100 components extracted by RBM', fontsize=16)plt.subplots_adjust(0.08, 0.02, 0.92, 0.85, 0.08, 0.23) plt.show() '''from sklearn.neural_network import BernoulliRBMX = [[0,0],[1,1]]y = [0,1]clf = BernoulliRBM().fit(X,y)print
测试结果如下:
转载于:https://www.cnblogs.com/zhouxiaohui888/p/6092535.html
使用Python scikit-learn 库实现神经网络算法相关推荐
- python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别
之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...
- python scikit learn 关闭开源_scikit learn 里没有神经网络?
本教程的代码和数据来自于 Springboard 的博客教程,希望能为你提供帮助.作者为 Jose Portilla,他是网络教育平台 Udemy 一门数据科学类课程的讲师. GitHub 链接:ht ...
- Python之数据挖掘实践--scikit learn库介绍和下载、实践、采坑
文章目录 前言 A sklearn库是什么? A1 依赖库介绍 1.Numpy库 2.Scipy库 3. matplotlib A2 下载安装 B 实践过程 B1 主成分分析(PCA) B2 实现Km ...
- python scikit learn 关闭开源_慕课|Python调用scikit-learn实现机器学习(一)
一.机器学习介绍及其原理 1.什么是人工智能? 机器对人的思维信息过程的模拟,让它能相认一样思考. a.输入 b.处理 c.输出 根据输入信息进行模型建构.权重更新,实现最终优化. 特点:信息处理.自 ...
- python scikit learn 封装_python的scikit-learn的主要模块和基本使用
在从事数据科学的人中,最常用的工具就是R和Python了,每个工具都有其利弊,但是Python在各方面都相对胜出一些,这是因为scikit-learn库实现了很多机器学习算法. 加载数据(Data L ...
- python scikit learn 关闭开源_Python机器学习工具:Scikit-Learn介绍与实践
Scikit-learn 简介 官方的解释很简单: Machine Learning in Python, 用python来玩机器学习. 什么是机器学习 机器学习关注的是: 计算机程序如何随着经验积累 ...
- python scikit learn 关闭开源_Scikit Learn安装教程
Windows下安装scikit-learn 准备工作 Python (>= 2.6 or >= 3.3), Numpy (>= 1.6.1) Scipy (>= 0.9), ...
- python中pca算法_使用python的numpy库实现PCA算法
#!/usr/bin/env python # -*- coding: utf-8 -*- from numpy import * #参数1:特征值向量, #参数2:比率 #返回值:k(符合指定比率的 ...
- 机器学习与Scikit Learn学习库
摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...
最新文章
- objdump查看目标文件构成
- C++TSL之map容器(悲伤的故事)
- 实现instanceof关键字
- 作为程序员之正则表达式
- c语言自动计算时间,C语言 · 计算时间
- jav简单的个人博客网站代码_每个人都可以拥有的个人博客网站
- linux-vim设置环境
- mysql事务最好别用_理解完这些基本上能解决面试中MySql的事务问题
- XGBoost深度理解
- 广义典型相关分析_数学建模/机器学习:广义加性模型(GAM)及其Python实现
- NetBeans 6.9 正式版发布!
- [UESTC SC T3] 蛋糕
- 华为管理学案例分析_华为战略管理案例分析.docx
- 2020中国公关公司30强排行榜(记录)
- MySQL数据导入导出方法与工具介绍
- PWN-CTF:gef工具安装
- “新基遇 星生态 心未来” 星际无限&神算云全球发布暨表彰盛典在深顺利召开
- 学英语《每日一歌》之see you again(速度与激情7主题曲)
- python经典类和新式类_python中经典类和新式类的区别
- 在mysql中删除数据后,添加数据,id值依然从删除的位置开始增加,问题详解。
热门文章
- Eclipse导出APK文件报错 android lint problem
- 2015 03 03 复习 上课笔记(一)
- LA 3695 Distant Galaxy
- 推荐95个极富创意的单页网站设计实例欣赏
- 《C++ Primer》关于自增自减操作符的描述错误
- Linux内核管理之分配掩码(三)
- MySQL step by step 安装实战
- (22)VHDL实现比较器(二位数值)
- linux文档查看器翻译,mdv – Linux终端下的 Markdown 文档查看器
- 4、python简单线性回归代码案例(完整)_python 实现一个简单的线性回归案例