inx函数python_【机器学习算法实现】logistic回归__基于Python和Numpy函数库

sigmoid(inX)函数

def sigmoid(inX):

return 1.0/(1+exp(-inX))

gradAscent(dataArray,labelArray,alpha,maxCycles)函数

用梯度下降法计算得到回归系数,alpha是步长,maxCycles是迭代步数。

def gradAscent(dataArray,labelArray,alpha,maxCycles):

dataMat=mat(dataArray) #size:m*n

labelMat=mat(labelArray) #size:m*1

m,n=shape(dataMat)

weigh=ones((n,1))

for i in range(maxCycles):

h=sigmoid(dataMat*weigh)

error=labelMat-h #size:m*1

weigh=weigh+alpha*dataMat.transpose()*error

return weigh

用到numpy里面的mat,矩阵类型。shape()用于获取矩阵的大小。

这个函数返回参数向量Θ,即权重weigh

classfy(testdir,weigh)函数

分类函数,根据参数weigh对测试样本进行预测,同时计算错误率

def classfy(testdir,weigh):

dataArray,labelArray=loadData(testdir)

dataMat=mat(dataArray)

labelMat=mat(labelArray)

h=sigmoid(dataMat*weigh) #size:m*1

m=len(h)

error=0.0

for i in range(m):

if int(h[i])>0.5:

print int(labelMat[i]),'is classfied as: 1'

if int(labelMat[i])!=1:

error+=1

print 'error'

else:

print int(labelMat[i]),'is classfied as: 0'

if int(labelMat[i])!=0:

error+=1

print 'error'

print 'error rate is:','%.4f' %(error/m)

digitRecognition(trainDir,testDir,alpha=0.07,maxCycles=10)函数

整合上面的所有函数,调用这个函数进行数字识别,alpha和maxCycles有默认形参,这个可以根据实际情况更改。

def digitRecognition(trainDir,testDir,alpha=0.07,maxCycles=10):

data,label=loadData(trainDir)

weigh=gradAscent(data,label,alpha,maxCycles)

classfy(testDir,weigh)

用loadData函数从train里面读取训练数据,接着根据这些数据,用gradAscent函数得出参数weigh,最后就可以用拟合参数weigh来分类了。

3、试验结果

工程文件可以到这里下载:github地址

运行logistic regression.py,采用默认形参:alpha=0.07,maxCycles=10,看下效果,错误率0.0118

>>> digitRecognition('train','test')

infodetail-517367.html

改变形参,alpah=0.01,maxCycles=50,看下效果,错误率0.0471

>>> digitRecognition('train','test',0.01,50)

infodetail-517367.html

这两个参数可以根据实际情况调整

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值