当前位置: 首页 > news >正文

头歌数据分析与数据挖掘——神经网络

1.什么是神经网络2.第2关神经元与感知机#encodingutf8 import numpy as np #构建感知机算法 class Perceptron(object): def __init__(self, learning_rate 0.01, max_iter 200): self.lr learning_rate self.max_iter max_iter def fit(self, data, label): input:data(ndarray):训练数据特征 label(ndarray):训练数据标签 output:w(ndarray):训练好的权重 b(ndarry):训练好的偏置 # 初始化权重和偏置 self.w np.random.randn(data.shape[1]) self.b np.random.rand(1) # ********* Begin *********# for _ in range(self.max_iter): for i in range(data.shape[0]): xi data[i] yi label[i] # 计算输出 output np.dot(self.w, xi) self.b # 若误分类更新权重和偏置 if yi * output 0: self.w self.lr * yi * xi self.b self.lr * yi # ********* End *********# def predict(self, data): input:data(ndarray):测试数据特征 # ********* Begin *********# output np.dot(self.w, data) self.b return 1 if output 0 else -1 # ********* End *********# # 下面是训练和预测示例供你测试 if __name__ __main__: # 构造题目中给出的数据 data np.array([ [0, 0, 0], # 青绿, 蜷缩, 浊响 [1, 0, 0], # 乌黑, 蜷缩, 浊响 [0, 1, 1], # 青绿, 硬挺, 清脆 [1, 2, 2] # 乌黑, 稍蜷, 沉闷 ]) label np.array([1, 1, -1, -1]) # 训练感知机 perceptron Perceptron(learning_rate0.1, max_iter1000) perceptron.fit(data, label) # 预测题目给的样本青绿、稍蜷、沉闷即 [0,2,2] test_sample np.array([0, 2, 2]) print(预测结果, perceptron.predict(test_sample))3.激活函数#encodingutf8 def relu(x): input:x(ndarray)输入数据 #********* Begin *********# return max(x, 0) #********* End *********#4.反向传播算法#encodingutf8 import numpy as np from math import sqrt #bp神经网络训练方法 def bp_train(feature,label,n_hidden,maxcycle,alpha,n_output): 计算隐含层的输入 input:feature(mat):特征 label(mat):标签 n_hidden(int)隐藏层的节点个数 maxcycle(int):最大迭代次数 alpha(float):学习率 n_output(int):输出层的节点个数 output:w0(mat):输入层到隐藏层之间的权重 b0(mat):输入层到隐藏层之间的偏置 w1(mat):隐藏层到输出层之间的权重 b1(mat):隐藏层到输出层之间的偏置 m,n np.shape(feature) # 使用Xavier均匀初始化偏置初始化为0 bound0 sqrt(6.0 / (n n_hidden)) w0 np.mat(np.random.uniform(-bound0, bound0, (n, n_hidden))) b0 np.mat(np.zeros((1, n_hidden))) bound1 sqrt(6.0 / (n_hidden n_output)) w1 np.mat(np.random.uniform(-bound1, bound1, (n_hidden, n_output))) b1 np.mat(np.zeros((1, n_output))) # 动量项初始化 momentum 0.9 v_w0 np.mat(np.zeros((n, n_hidden))) v_b0 np.mat(np.zeros((1, n_hidden))) v_w1 np.mat(np.zeros((n_hidden, n_output))) v_b1 np.mat(np.zeros((1, n_output))) #训练 i 0 while i maxcycle: #********* Begin *********# # 1. 前向传播 hidden_input hidden_in(feature, w0, b0) hidden_output hidden_out(hidden_input) output_input predict_in(hidden_output, w1, b1) output_output predict_out(output_input) # 2. 反向传播核心修正输出层误差不再乘sigmoid导数 # 输出层残差交叉熵损失 sigmoid 的梯度简化形式 delta2 output_output - label # 隐藏层残差需要乘sigmoid导数 delta1 np.multiply(delta2 * w1.T, partial_sig(hidden_input)) # 3. 计算批量梯度平均梯度 grad_w1 hidden_output.T * delta2 / m grad_b1 np.sum(delta2, axis0) / m grad_w0 feature.T * delta1 / m grad_b0 np.sum(delta1, axis0) / m # 4. 带动量的参数更新 v_w1 momentum * v_w1 - alpha * grad_w1 w1 v_w1 v_b1 momentum * v_b1 - alpha * grad_b1 b1 v_b1 v_w0 momentum * v_w0 - alpha * grad_w0 w0 v_w0 v_b0 momentum * v_b0 - alpha * grad_b0 b0 v_b0 #********* End *********# i 1 return w0,w1,b0,b1 #计算隐藏层的输入函数 def hidden_in(feature,w0,b0): m np.shape(feature)[0] hidden_in feature*w0 for i in range(m): hidden_in[i,] b0 return hidden_in #计算隐藏层的输出函数 def hidden_out(hidden_in): hidden_output sig(hidden_in) return hidden_output #计算输出层的输入函数 def predict_in(hidden_out,w1,b1): m np.shape(hidden_out)[0] predict_in hidden_out*w1 for i in range(m): predict_in[i,] b1 return predict_in #计算输出层的输出的函数 def predict_out(predict_in): result sig(predict_in) return result #sigmoid函数 def sig(x): return 1.0/(1np.exp(-x)) #计算sigmoid函数偏导 def partial_sig(x): m,n np.shape(x) out np.mat(np.zeros((m,n))) for i in range(m): for j in range(n): out[i,j] sig(x[i,j])*(1-sig(x[i,j])) return out5.Dropout#encodingutf8 import numpy as np #由于Dropout方法输出存在随机性我们已经设置好随机种子你只需要完成Dropout方法就行。 class Dropout: def __init__(self,dropout_ratio0.5): self.dropout_ratio dropout_ratio self.mask None def forward(self,x,train_flgTrue): 前向传播中self.mask会随机生成和x形状相同的数组 并将值比dropout_ratio大的元素设为True x为一个列表。 #********* Begin *********# x np.array(x) if train_flg: # 生成随机掩码大于dropout_ratio的神经元保留设为True self.mask np.random.rand(*x.shape) self.dropout_ratio # 被丢弃的神经元输出置0 return x * self.mask else: # 测试阶段输出乘以(1-丢弃率)保持期望一致 return x * (1 - self.dropout_ratio) #********* End *********# def backward(self,dout): 前向传播时传递了信号的神经元 反向传播时按原样传递信号。 前向传播没有传递信号的神经元 反向传播时信号就停在那里。 dout为一个列表。 #********* Begin *********# dout np.array(dout) # 只有前向传播中保留的神经元才传递梯度 return dout * self.mask #********* End *********#6.sklearn中的神经网络#encodingutf8 from sklearn.neural_network import MLPClassifier def iris_predict(train_sample, train_label, test_sample): 实现功能1.训练模型 2.预测 :param train_sample: 包含多条训练样本的样本集类型为ndarray :param train_label: 包含多条训练样本标签的标签集类型为ndarray :param test_sample: 包含多条测试样本的测试集类型为ndarry :return: test_sample对应的预测标签 #********* Begin *********# # 初始化MLP分类器参数针对鸢尾花数据集优化 mlp MLPClassifier( solverlbfgs, # 小数据集上lbfgs收敛更快、效果更稳定 alpha1e-5, # L2正则化系数防止过拟合 hidden_layer_sizes(100,), # 单隐藏层100个神经元足够拟合鸢尾花数据 max_iter200, # 足够的迭代次数保证收敛 random_state42 # 固定随机种子保证结果可复现 ) # 训练模型 mlp.fit(train_sample, train_label) # 预测并返回结果 return mlp.predict(test_sample) #********* End *********#
http://www.gsyq.cn/news/1360049.html

相关文章:

  • DDrawCompat终极指南:简单三步让老游戏在Win10/11完美运行
  • 2026年一键生成论文工具实测报告:5款神器从文献到降重一站式避坑指南
  • # 2026.5 LLaMA Factory 微调模型 使用 llama.cpp 量化 Qwen3.5 模型实操文档
  • 一个简单的MCP代码示例
  • 如何用暗黑破坏神2存档编辑器重新定义你的单机游戏体验?
  • 几类结构矩阵的参数化符号分析与高精度计算方法【附程序】
  • 如何在Windows 11上快速安装安卓子系统:3步开启跨平台应用新时代
  • 开源火箭设计仿真工具:从零开始构建稳定可靠的模型火箭
  • 跨境社媒运营真正难的 不是内容不够而是账号越来越没有“主线感”
  • 知识竞赛抢答器使用培训:选手必知的5个技巧
  • 基站正在成为 AI 计算节点:NVIDIA Aerial 推动 RAN 架构重构
  • CANN-Profiler-昇腾NPU上推理慢到底慢在哪
  • 投影仪的分辨率不高,仅为1024*768的分辨率,而笔记本电脑2560×1600(2.5K)分辨率。‌‌——如果采用扩展屏复制笔记本电脑分辨率,发现那个投影仪投影出的字很小,且看不清。 将笔记本电脑的
  • CANN ops-transformer:MC2 通信融合算子怎么加速 MoE 的 All-to-All
  • 分布式系统平台选型与核心开发实践:从微服务到云原生演进
  • Vue2进阶 - Ref
  • Linux Systemd服务配置实战:从核心概念到生产环境部署
  • 大数据技术之SparkSQL
  • VL53L8CX运动指示器:嵌入式动态感知的硬件级解决方案
  • BepInEx终极指南:5分钟学会游戏模组框架安装与使用
  • C++跨平台线程池组件设计:从核心原理到工程实践
  • 给机器人一个值得信赖的“判断力”
  • 鸿蒙意图框架快速入门:5 分钟实现你的第一个意图
  • libwebsockets跨平台移植实战:从交叉编译到嵌入式部署
  • 跨平台macOS组件获取:系统部署专家的高效解决方案
  • NBK_RD8x3x MCU开发实战:从GPIO到定时器中断实现LED精准闪烁
  • C++学习之线程详解
  • 车载音响升级指南:AE1-L方案核心解析与DSP调音实战
  • iMLite AI Map 2.1:嵌入式离线地图如何赋能智能穿戴独立导航
  • 深入解析Linux fork系统调用:从写时复制到多线程陷阱与实战指南