用python实现代价曲线的绘制
时间: 2024-05-14 15:13:57 浏览: 132
Python绘制KS曲线的实现方法
以下是Python实现代价曲线的代码:
```python
import matplotlib.pyplot as plt
# 代价函数
def cost_function(theta, X, y):
m = len(y)
J = 0
h = X.dot(theta)
J = 1/(2*m)*np.sum(np.square(h-y))
return J
# 梯度下降
def gradient_descent(theta, X, y, alpha, num_iters):
m = len(y)
J_history = np.zeros(num_iters)
for i in range(num_iters):
h = X.dot(theta)
theta = theta - alpha*(1/m)*(X.T.dot(h-y))
J_history[i] = cost_function(theta, X, y)
return theta, J_history
# 生成数据
np.random.seed(1)
X = np.random.rand(100, 1)
y = 2 + 3*X + np.random.randn(100, 1)*0.5
# 特征缩放
X = (X - np.mean(X))/np.std(X)
# 增加偏置项
m = len(y)
X = np.hstack((np.ones((m, 1)), X))
# 初始化参数
theta = np.zeros((2, 1))
# 计算代价函数
J = cost_function(theta, X, y)
print('初始代价函数值为:', J)
# 梯度下降
alpha = 0.1
num_iters = 1000
theta, J_history = gradient_descent(theta, X, y, alpha, num_iters)
print('梯度下降后的参数值为:', theta)
# 绘制代价曲线
plt.plot(np.arange(num_iters), J_history)
plt.xlabel('迭代次数')
plt.ylabel('代价函数值')
plt.title('代价曲线')
plt.show()
```
运行后,会生成一个代价曲线的图形。其中,横轴代表迭代次数,纵轴代表代价函数值。通过观察代价曲线,可以判断梯度下降是否收敛,以及选择最优的学习率和迭代次数。
阅读全文