机器学习--梯度下降

  • 注意:需要导入文件ex2data1.txt,
  • 梯度下降

  • 代码如下:

print("-------------------gradient descent(梯度下降)-------------------")

def gradient(theta,X,y):
    theta=np.matrix(theta)
    X=np.matrix(X)
    y=np.matrix(y)


    parameters=int(theta.ravel().shape[1])
    grad=np.zeros(parameters)
    error=sigmoid(X*theta.T)-y

    for i in range(parameters):
        term=np.multiply(error,X[:,i])
        grad[i]=np.sum(term)/len(X)

    return grad


print(gradient(theta, X, y))


print("=============================")



#opt.fmin_tnc()函数,用于最优化
#基本参数: func:优化的目标函数,x0:初值
#fprime:提供优化函数func的梯度函数,不然优化函数必须返回函数值和梯度,或者设置approx_grad=True
#approx_grad=True ,会给出近似梯度
#args:元组,是传递给优化函数的参数



import scipy.optimize as opt
result=opt.fmin_tnc(func=cost,x0=theta,fprime=gradient,args=(X,y))

print(result)

print(cost(result[0], X, y))


#编写一个函数,用参数theta来为数据集X输出预测,然后,我们可以使用这个函数来给我们分类器的训练精度打分
#当h0大于等于0.5,预测y=1
#当h0小于0.5,预测y=0;

def predict(theta,X):
    probability=sigmoid(X*theta.T)
    return [1 if x>=0.5 else 0 for x in probability]

theta_min=np.matrix(result[0])
predictions=predict(theta_min,X)
#zip()之后的结果自能“使用一次”
#zip()实际上是一个生成器对象,故使用list()获取zip()结果时,已经相当于完成一次迭代遍历
#第二次再次使用list()时迭代已经结束,所以返回[]

correct=[1 if((a==1 and b==1) or (a==0 and b==0)) else 0 for(a,b) in zip(predictions,y )]

accuracy=(sum(map(int,correct))%len(correct))#correct=[1,1,3] ,print(sum(map(int, correct))),结果为5

print('accuracy={0}%'.format(accuracy))

  • 代码截图如下:

  •  总结:如果喜欢人工智能的小伙伴,推荐去看吴恩达教授的机器学习,我目前也在学习,老师讲的课通俗易懂。最后本次内容仅作为学习使用。如有侵权,联系删除
  • 点赞666和收藏,私信分享源码和数据训练集

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值