plt.plot拟合正弦曲线
时间: 2023-11-16 13:01:14 浏览: 34
plt.plot函数可以用于绘制折线图,也可以用于拟合正弦曲线。在给定x轴和y轴的数据后,可以通过设置颜色、标记点样式等参数来美化图形。在引用中提供的代码中,使用了sklearn库中的DecisionTreeRegressor模型来拟合正弦曲线,并使用plt.plot函数将拟合结果可视化展示出来。其中,max_depth参数用于控制决策树的深度,从而影响模型的复杂度和拟合效果。
相关问题
全连接神经网络拟合正弦曲线
以下是一个使用全连接神经网络拟合正弦曲线的示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成训练数据
X = np.linspace(0, 2*np.pi, 100)
y = np.sin(X)
# 构建神经网络模型
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(10, input_dim=1, activation='relu'))
model.add(Dense(1, activation='linear'))
# 编译模型
model.compile(loss='mean_squared_error', optimizer='adam')
# 训练模型
model.fit(X, y, epochs=1000, verbose=0)
# 预测并绘制拟合曲线
X_test = np.linspace(0, 2*np.pi, 100)
y_pred = model.predict(X_test)
plt.plot(X, y, label='Actual')
plt.plot(X_test, y_pred, label='Predicted')
plt.legend()
plt.show()
```
这个示例使用Keras库构建了一个具有一个隐层的全连接神经网络模型。模型的输入是一个维度为1的特征,即正弦曲线的自变量X,输出是一个维度为1的预测值,即正弦曲线的因变量y。模型使用ReLU作为隐层的激活函数,使用线性激活函数作为输出层的激活函数。模型使用均方误差作为损失函数,使用Adam优化器进行模型训练。
训练完成后,使用训练好的模型对新的输入数据进行预测,并将预测结果与实际值进行比较,绘制出拟合曲线。
神经网络拟合正弦曲线
以下是一个使用BP人工神经网络拟合正弦曲线的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 创建训练数据
X = np.linspace(-np.pi, np.pi, 100)
y = np.sin(X)
# 构建神经网络
class NeuralNetwork:
def __init__(self):
self.input_size = 1
self.hidden_size = 10
self.output_size = 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.sin(self.z2)
return self.y_hat
def backward(self, X, y, learning_rate):
delta3 = self.y_hat - y
dW2 = np.dot(self.a1.T, delta3)
db2 = np.sum(delta3, axis=0, keepdims=True)
delta2 = np.dot(delta3, self.W2.T) * (1 - np.power(self.a1, 2))
dW1 = np.dot(X.T, delta2)
db1 = np.sum(delta2, axis=0)
self.W2 -= learning_rate * dW2
self.b2 -= learning_rate * db2
self.W1 -= learning_rate * dW1
self.b1 -= learning_rate * db1
def train(self, X, y, num_epochs, learning_rate):
for epoch in range(num_epochs):
y_hat = self.forward(X)
self.backward(X, y, learning_rate)
if epoch % 100 == 0:
loss = np.mean(np.square(y_hat - y))
print(f"Epoch {epoch}, Loss: {loss}")
print("Training complete!")
# 创建神经网络对象并进行训练
nn = NeuralNetwork()
nn.train(X.reshape(-1, 1), y.reshape(-1, 1), num_epochs=1000, learning_rate=0.01)
# 使用训练好的神经网络进行预测
X_test = np.linspace(-np.pi, np.pi, 100)
y_pred = nn.forward(X_test.reshape(-1, 1))
# 绘制拟合曲线
plt.plot(X, y, label='Ground Truth')
plt.plot(X_test, y_pred, label='Predicted')
plt.legend()
plt.show()
```
这段代码使用了一个简单的单隐藏层的神经网络来拟合正弦曲线。它通过反向传播算法来更新网络的权重和偏置,以最小化预测值与真实值之间的均方误差。训练完成后,使用训练好的神经网络对新的输入数据进行预测,并将拟合曲线与真实曲线进行对比。