python实现logistic分类算法代码
最近在看吴恩达的机器学习课程,自己用python实现了其中的logistic算法,并用梯度下降获取最优值。
logistic分类是一个二分类问题,而我们的线性回归函数
的取值在负无穷到正无穷之间,对于分类问题而言,我们希望假设函数的取值在0~1之间,因此logistic函数的假设函数需要改造一下
由上面的公式可以看出,0 costfunction可以这样定义 其中,m是样本的数量,初始时θ可以随机给定一个初始值,算出一个初始的J(θ)值,再执行梯度下降算法迭代,直到达到最优值,我们知道,迭代的公式主要是每次减少一个偏导量 如果将J(θ)代入化简之后,我们发现可以得到和线性回归相同的迭代函数 按照这个迭代函数不断调整θ的值,直到两次J(θ)的值差值不超过某个极小的值之后,即认为已经达到最优解,这其实只是一个相对较优的解,并不是真正的最优解。其中,α是学习速率,学习速率越大,就能越快达到最优解,但是学习速率过大可能会让惩罚函数最终无法收敛,整个过程python的实现如下 运行结果如下 以上这篇python实现logistic分类算法代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。 声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
importmath
ALPHA=0.3
DIFF=0.00001
defpredict(theta,data):
results=[]
foriinrange(0,data.__len__()):
temp=0
forjinrange(1,theta.__len__()):
temp+=theta[j]*data[i][j-1]
temp=1/(1+math.e**(-1*(temp+theta[0])))
results.append(temp)
returnresults
deftraining(training_data):
size=training_data.__len__()
dimension=training_data[0].__len__()
hxs=[]
theta=[]
foriinrange(0,dimension):
theta.append(1)
initial=0
foriinrange(0,size):
hx=theta[0]
forjinrange(1,dimension):
hx+=theta[j]*training_data[i][j]
hx=1/(1+math.e**(-1*hx))
hxs.append(hx)
initial+=(-1*(training_data[i][0]*math.log(hx)+(1-training_data[i][0])*math.log(1-hx)))
initial/=size
iteration=initial
initial=0
counts=1
whileabs(iteration-initial)>DIFF:
print("第",counts,"次迭代,diff=",abs(iteration-initial))
initial=iteration
gap=0
forjinrange(0,size):
gap+=(hxs[j]-training_data[j][0])
theta[0]=theta[0]-ALPHA*gap/size
foriinrange(1,dimension):
gap=0
forjinrange(0,size):
gap+=(hxs[j]-training_data[j][0])*training_data[j][i]
theta[i]=theta[i]-ALPHA*gap/size
forminrange(0,size):
hx=theta[0]
forjinrange(1,dimension):
hx+=theta[j]*training_data[i][j]
hx=1/(1+math.e**(-1*hx))
hxs[i]=hx
iteration+=-1*(training_data[i][0]*math.log(hx)+(1-training_data[i][0])*math.log(1-hx))
iteration/=size
counts+=1
print('trainingdone,theta=',theta)
returntheta
if__name__=='__main__':
training_data=[[1,1,1,1,0,0],[1,1,0,1,0,0],[1,0,1,0,0,0],[0,0,0,0,1,1],[0,1,0,0,0,1],
[0,0,0,0,1,1]]
test_data=[[0,1,0,0,0],[0,0,0,0,1]]
theta=training(training_data)
res=predict(theta,test_data)
print(res)