机器学习--线性回归

批量梯度下降

  • 注意:需要导入文件ex1data1.txt,ex1data2.txt
  • 代码块

print("---------------------批量梯度下降---------------------")
#batch gradient decent(批量梯度下降)
def gradientDescent(X,y,theta,alpha,iters):
    #定义一个theta形状的零矩阵
    temp=np.matrix(np.zeros(theta.shape))
    #定义一个变量,表示theta的个数。
    #ravel函数将矩阵变为一维,shape[1]代表了矩阵的列数(即theta的个数)
    parameters = int(theta.ravel().shape[1])
    cost = np.zeros(iters)


    for i in range(iters):
        error = (X*theta.T)-y
        for j in range(parameters):
            term = np.multiply(error,X[:,j])#计算梁矩阵(ho(x)-y)x
            temp[0,j] = theta[0,j]-((alpha/len(X)*np.sum(term)))

        theta=temp
        cost[i]=computeCost(X,y,theta)
    return theta,cost



#初始化一些附加变量-学习速率a和要执行的迭代次数
alpha=0.01
iters=1000

g,cost=gradientDescent(X,y,theta,alpha,iters)
#最后,我们可以使用我们拟合到的参数计算训练模型的代价函数(误差)

print(g)

print("--------------------------")
#现在我们来绘制线性模型以及数据,直观地看出它的拟合
#np.linspace(start=0,stop=100,num=5)-->通过定义均匀间隔创建数值的序列,指定间隔起始点,终止端,以及指定分隔值总数,最终函数返回间隔类均值分布的数值序列
x=np.linspace(data.Population.min(),data.Population.max(),100)

f=g[0,0]+(g[0,1]*x)
print("------------------------")
fig,ax=plt.subplots(figsize=(12,8))
ax.plot(x,f,'r',label='Prediction')#ax.plot()可以同时创建曲线和散点
ax.scatter(data.Population,data.Profit,label='Traning Data')
ax.legend(loc=2)#loc参数,用于控制图例的位置,
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()
  • 代码运行截图:

  • #由于梯度方程式函数也在每个训练迭代中输出一个代价的向量,所以我们也可以绘制,请注意,代价总是降低,这是凸优化问题的一个例子
    
    
    fig,ax=plt.subplots(figsize=(12,8))
    ax.plot(np.arange(iters),cost,'r')
    ax.set_xlabel('Iterations')
    ax.set_ylabel('Cost')
    ax.set_title('Error vs.Training Epoch')
    plt.show()
  • 总结:如果喜欢人工智能的小伙伴,推荐去看吴恩达教授的机器学习,我目前也在学习,老师讲的课通俗易懂。最后本次内容仅作为学习使用。如有侵权,联系删除
  • 点赞666和收藏,私信分享源码和数据训练集

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值