Logistic 回归梯度上升优化函数
2016-05-01 15:02
417 查看
In [183]:
In [184]:
批量梯度下降
In [185]:
随机梯度下降
In [186]:
sum()的参数是一个list 下面是改进的随机梯度上升算法:
In [187]:
In [188]:
In [189]:
In [190]:
In [191]:
h = subplot(m,n,p)/subplot(mnp) 将figure划分为m×n块,在第p块创建坐标系,并返回它的句柄。当m,n,p<10时,可以简化为subplot(mnp)或者subplot mnp (注:subplot(m,n,p)或者subplot(mnp)此函数最常用:subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。 )
In [192]:
def loadDataSet():
dataMat = []
labelMat = []
fr = open('testSet.txt')
for line in fr.readlines():
lineArr = line.strip().split()
dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])])
labelMat.append(int(lineArr[2]))
return dataMat,labelMat
In [184]:
def sigmoid(inX):
return 1.0/(1+exp(-inX))
批量梯度下降
In [185]:
def gradAscent(dataMatIn, classLabels):
dataMatrix = mat(dataMatIn)
labelMat = mat(classLabels).transpose()
m,n = shape(dataMatrix)
alpha = 0.001
maxCycles = 500
weights = ones((n,1))
for k in range(maxCycles):
h = sigmoid(dataMatrix*weights) # h是一个矩阵
error = (labelMat - h)
weights = weights + alpha * dataMatrix.transpose() * error
return weights
随机梯度下降
In [186]:
def stocGradAscent0(dataMatrix, classLabels):
m,n = shape(dataMatrix)
alpha = 0.01
weights = ones(n)
#weights = [0.1,0.1,0.1]
for i in range(m):
h = sigmoid(sum(dataMatrix[i]*weights))# h是一个数值
print dataMatrix[i]
print weights
print dataMatrix[i]*weights
error = classLabels[i] - h
weights = weights + alpha * error * dataMatrix[i]
return weights
sum()的参数是一个list 下面是改进的随机梯度上升算法:
In [187]:
def stocGradAscent1(dataMatrix, classLabels, numIter=150):
m,n = shape(dataMatrix)
weights = ones(n)
#weights = [0.1,0.1,0.1]
for j in range(numIter):
dataIndex = range(m)
for i in range(m):
alpha = 4/(1.0+j+i)+0.01
randIndex = int(random.uniform(0,len(dataIndex)))
h = sigmoid(sum(dataMatrix[randIndex]*weights))# h是一个数值
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weights
In [188]:
#import logRegres
In [189]:
dataArr,labelMat = loadDataSet()
In [190]:
#weights=gradAscent(dataArr,labelMat)
weights=stocGradAscent1(array(dataArr),labelMat,500)
In [191]:
def plotBestFit(wei):
import matplotlib.pyplot as plt
weights = wei
dataMat,labelMat = loadDataSet()
dataArr = array(dataMat)
n = shape(dataArr)[0]
xcord1 = []; ycord1 = []
xcord2 = []; ycord2 = []
for i in range(n):
if int(labelMat[i])==1:
xcord1.append(dataArr[i,1]);ycord1.append(dataArr[i,2])
else:
xcord2.append(dataArr[i,1]);ycord2.append(dataArr[i,2])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xcord1,ycord1,s=30,c='red',marker='s')
ax.scatter(xcord2,ycord2,s=30,c='green')
x = arange(-3.0,3.0,0.1)
y = (-weights[0]-weights[1]*x)/weights[2]
ax.plot(x,y)
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()
h = subplot(m,n,p)/subplot(mnp) 将figure划分为m×n块,在第p块创建坐标系,并返回它的句柄。当m,n,p<10时,可以简化为subplot(mnp)或者subplot mnp (注:subplot(m,n,p)或者subplot(mnp)此函数最常用:subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。 )
In [192]:
from numpy import *
#reload
print weights
plotBestFit(weights)
相关文章推荐
- JetBrains PhpStorm 所有版本通用注册码
- Encapsulation and Requiring Files
- 用Jmeter进行接口压力测试的步骤
- android中ListView的基本组件及用法
- Encapsulation and Requiring Files
- 指针做形参新发现
- zlib交叉编译
- configure: error: no acceptable C compiler found in $PATH 问题解决
- 安装linuxdash后nginx配置与原有wordpress的error解决
- CentOS6.5安装Elasticsearch1.7.5
- 96. Unique Binary Search Trees
- 使用Jmeter测试Webservice简单示例
- PHP基础之进制的转换
- secureCRT光标不见啦
- POJ 3321Apple Tree(dfs序 树状数组)
- ios拼图游戏(三)之使用TableView布局
- leetcode——117——Populating Next Right Pointers in Each Node II
- Unity Official Tutorial --- CREATING A BREAKOUT GAME FOR BEGINNERS
- SNMP++ 01-SNMP request time out问题的解决
- 1371 - Energetic Pandas