[机器学习]Logistic回归梯度上升法与改进的随机梯度上升算法
来源:互联网 发布:网易养猪场 知乎 编辑:程序博客网 时间:2024/06/10 19:50
http://sbp810050504.blog.51cto.com/2799422/1608064/这个网址解释了多维空间的sigmoid函数与梯度上升算法的原理,大家可以参考一下。
from numpy import *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, labelMatdef sigmoid(intX):#sigmoid函数 return 1.0 / (1 + exp(-intX))def gradAscent(dataMatIn, classLabels):#Logistic回归梯度上升优化算法 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) error = labelMat - h weights = weights + alpha * dataMatrix.transpose() * error return weightsdef stocGradAscent0(dataMatrix,classLabels):#随机梯度上升算法 m,n =shape(dataMatrix) alpha = 0.01 weights =ones(n) for i in range(m): h = sigmoid(dataMatrix[i]*weights) error = classLabels[i] - h weights = weights + alpha*error*dataMatrix[i] return weightsdef stocGradAscent1(dataMatrix,classLabels,numIter=150):#改进的随机梯度上升算法 m,n =shape(dataMatrix) weights = ones(n) for j in range(numIter): dataIndex = list(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)) error = classLabels[randIndex]-h weights = weights +alpha*error*dataMatrix[randIndex] del(dataIndex[randIndex]) return weightsdef plotBestFit(weights):#数据可视化 import matplotlib.pyplot as plt 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='blue', marker='s') ax.scatter(xcord2, ycord2, s=30, c='red') 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()def main(): dataArr,labelMat = loadDataSet() weights1 = gradAscent(dataArr,labelMat) print(weights1) plotBestFit(weights1.getA()) dataArr, labelMat = loadDataSet() weights2 = stocGradAscent0(array(dataArr),labelMat) print(weights2) plotBestFit(weights2) dataArr, labelMat = loadDataSet() weight3 = stocGradAscent1(array(dataArr),labelMat) print(weight3) plotBestFit(weight3)if __name__ == '__main__': main()
结果:
图片
图片一
图片二
图片三
0 0
- [机器学习]Logistic回归梯度上升法与改进的随机梯度上升算法
- 机器学习之logistic回归的梯度上升算法
- Logistic回归(改进的随机梯度上升)
- 【机器学习】Logistic回归的梯度上升法
- 机器学习-Logistic回归之随机梯度上升
- 机器学习实战-logistic回归随机梯度上升浅见
- Logistic回归与梯度上升算法
- Logistic回归与梯度上升算法
- Logistic回归与梯度上升算法
- 机器学习-Logistic回归之使用随机梯度上升算法预测病马死亡率
- 基于梯度上升算法的Logistic回归
- 机器学习-Logistic回归之梯度上升法
- Logistic回归(随机梯度上升)
- py2.7 : 《机器学习实战》 Logistic回归 1.22号 5.3 分析数据:随机梯度上升
- 《机器学习实战》第五章:Logistic回归(2)随机梯度上升和一个实例
- Logistic回归算法(梯度上升)
- Logistic回归和梯度上升算法
- Logistic回归及梯度上升算法
- HBase的配置
- codeforces 673C
- HAUTOJ 1265
- Java 套接字
- 使用Eclipse+scala计算Pi
- [机器学习]Logistic回归梯度上升法与改进的随机梯度上升算法
- 错误: 找不到或无法加载主类
- Android Greendao3.0框架的使用
- centos 6.5配置epel源
- SDN實驗(一) Mininet使用
- HBse中Shell
- CPU卡程序设计实例(三)命令格式
- 内核轮询式IO(poll-select)
- 百度地图开发平台范例