- 注意:需要导入文件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和收藏,私信分享源码和数据训练集