Python实现神经网络非线性模型:特征权重可视化
Python实现神经网络非线性模型:特征权重可视化
本文提供一个简单的Python代码示例,用于构建一个包含一个隐藏层的神经网络非线性模型。该代码示例展示了如何训练模型、输出特征权重,并使用热力图可视化特征权重,帮助理解模型学习到的特征与隐藏单元之间的关系。pythonimport numpy as npimport matplotlib.pyplot as plt
定义神经网络模型class NeuralNetwork: def init(self): # 定义模型参数 self.input_size = 10 self.hidden_size = 5 self.output_size = 1 self.learning_rate = 0.1 # 初始化权重和偏置 self.W1 = np.random.randn(self.input_size, self.hidden_size) self.b1 = np.zeros((1, self.hidden_size)) self.W2 = np.random.randn(self.hidden_size, self.output_size) self.b2 = np.zeros((1, self.output_size)) # 定义前向传播函数 def forward(self, X): self.z1 = np.dot(X, self.W1) + self.b1 self.a1 = np.tanh(self.z1) self.z2 = np.dot(self.a1, self.W2) + self.b2 self.y_hat = np.sigmoid(self.z2) return self.y_hat # 定义反向传播函数 def backward(self, X, y): self.error = y - self.y_hat self.delta2 = self.error * self.y_hat * (1 - self.y_hat) self.dW2 = np.dot(self.a1.T, self.delta2) self.db2 = np.sum(self.delta2, axis=0, keepdims=True) self.delta1 = np.dot(self.delta2, self.W2.T) * (1 - np.power(self.a1, 2)) self.dW1 = np.dot(X.T, self.delta1) self.db1 = np.sum(self.delta1, axis=0) # 定义模型训练函数 def train(self, X, y, epochs): self.losses = [] for i in range(epochs): y_hat = self.forward(X) self.backward(X, y) self.W2 += self.learning_rate * self.dW2 self.b2 += self.learning_rate * self.db2 self.W1 += self.learning_rate * self.dW1 self.b1 += self.learning_rate * self.db1 loss = np.mean(np.square(y - y_hat)) self.losses.append(loss) if i % 100 == 0: print(f'Epoch {i}, Loss: {loss:.4f}') # 定义特征权重图绘制函数 def plot_weights(self): fig, ax = plt.subplots(figsize=(10, 6)) im = ax.imshow(self.W1, cmap='coolwarm', vmin=-1, vmax=1) ax.set_xticks(np.arange(self.hidden_size)) ax.set_yticks(np.arange(self.input_size)) ax.set_xticklabels(np.arange(1, self.hidden_size+1)) ax.set_yticklabels(np.arange(1, self.input_size+1)) ax.set_xlabel('Hidden Units') ax.set_ylabel('Input Features') ax.set_title('Feature Weights') fig.colorbar(im) plt.show()
生成随机数据X = np.random.randn(1000, 10)y = np.random.randint(0, 2, (1000, 1))
创建神经网络模型实例model = NeuralNetwork()
训练模型model.train(X, y, epochs=1000)
绘制特征权重图model.plot_weights()
代码说明:
- 模型定义: 定义了一个名为
NeuralNetwork的类,包含了模型的初始化、前向传播、反向传播和训练函数。2. 数据生成: 使用np.random.randn生成随机的输入数据X,使用np.random.randint生成随机的二分类标签y。3. 模型训练: 创建模型实例,并使用训练数据进行训练。4. 特征权重可视化: 调用plot_weights函数,使用matplotlib库绘制热力图,其中每个格子代表一个输入特征和隐藏单元之间的权重,颜色深浅表示权重大小。
通过可视化特征权重,我们可以直观地了解模型学习到的特征关系,例如哪些特征对模型预测结果影响更大。
原文地址: http://www.cveoy.top/t/topic/f1Y2 著作权归作者所有。请勿转载和采集!