在人工智能的领域中,逻辑回归是一种非常基础且实用的机器学习算法,它常用于分类问题。而神经网络作为一种模拟人脑工作原理的计算模型,可以显著提升逻辑回归的性能。本文将带你一步步用Python搭建神经网络,进行逻辑回归的实战。
环境准备
首先,确保你的Python环境中安装了以下库:
- NumPy:用于数值计算
- Matplotlib:用于数据可视化
- scikit-learn:用于机器学习
你可以使用pip进行安装:
pip install numpy matplotlib scikit-learn
数据准备
逻辑回归需要的数据通常为数值型。以下是一个简单的示例数据集,用于分类任务:
import numpy as np
# 生成模拟数据
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.array([0, 0, 1, 1])
神经网络构建
接下来,我们使用Python的NumPy库来构建一个简单的神经网络。
import numpy as np
# 定义激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义神经网络的输入层、隐藏层和输出层
class NeuralNetwork:
def __init__(self):
# 随机生成权重和偏置
self.weights_input_hidden = np.random.randn(2, 4)
self.bias_input_hidden = np.random.randn(4, 1)
self.weights_hidden_output = np.random.randn(4, 1)
self.bias_hidden_output = np.random.randn(1, 1)
def train(self, X, y):
# 前向传播
hidden_layer_input = np.dot(X, self.weights_input_hidden) + self.bias_input_hidden
hidden_layer_output = sigmoid(hidden_layer_input)
# 输出层输入
output_layer_input = np.dot(hidden_layer_output, self.weights_hidden_output) + self.bias_hidden_output
output = sigmoid(output_layer_input)
# 反向传播
output_error = y - output
d_output = output_error * output * (1 - output)
hidden_error = d_output.dot(self.weights_hidden_output.T)
d_hidden = hidden_error * hidden_layer_output * (1 - hidden_layer_output)
# 更新权重和偏置
self.weights_hidden_output += hidden_layer_output.T.dot(d_output)
self.bias_hidden_output += np.sum(d_output, axis=0, keepdims=True)
self.weights_input_hidden += X.T.dot(d_hidden)
self.bias_input_hidden += np.sum(d_hidden, axis=0, keepdims=True)
def predict(self, X):
hidden_layer_input = np.dot(X, self.weights_input_hidden) + self.bias_input_hidden
hidden_layer_output = sigmoid(hidden_layer_input)
output_layer_input = np.dot(hidden_layer_output, self.weights_hidden_output) + self.bias_hidden_output
output = sigmoid(output_layer_input)
return output
训练神经网络
现在,我们可以使用上面构建的神经网络来训练我们的数据集。
# 创建神经网络实例
nn = NeuralNetwork()
# 训练神经网络
for i in range(10000):
nn.train(X, y)
# 打印预测结果
print(nn.predict([[1, 1]])) # 应该接近 0
print(nn.predict([[2, 2]])) # 应该接近 1
结果可视化
为了更好地理解模型的表现,我们可以使用Matplotlib库来可视化训练过程。
import matplotlib.pyplot as plt
# 记录损失值
losses = []
# 训练神经网络并记录损失值
for i in range(10000):
nn.train(X, y)
loss = np.mean(np.square(y - nn.predict(X)))
losses.append(loss)
# 绘制损失曲线
plt.plot(losses)
plt.xlabel('迭代次数')
plt.ylabel('损失值')
plt.title('神经网络训练损失曲线')
plt.show()
通过上述步骤,你已经成功用Python搭建了一个简单的神经网络,并进行了逻辑回归的实战。随着你对神经网络的理解不断深入,你可以尝试更复杂的网络结构和优化算法,以应对更复杂的分类问题。