机器学习实战-logistic回归随机梯度上升浅见
来源:互联网 发布:嵌入式linux开发前景 编辑:程序博客网 时间:2024/06/11 04:44
本周跟着书本调试了一下实战第五章logistic回归,下面浅谈一下我在随机梯度上升中遇到的问题以及一些见解。
方式一:随机但有重复,增大遍历次数
def stocGradAscent1(dataMat,labels,numIter=150): m,n = shape(dataMat) weights = ones(n) for j in range(numIter): dataIndex = range(m) for i in range(m): alpha = 4/(1.0+i+j)+0.0001 randomIndex = int(random.uniform(0,len(dataIndex))) h = sigmoid(sum(dataMat[randomIndex]*weights)) error = labels[randomIndex] - h weights = weights + alpha * error * dataMat[randomIndex] del(dataIndex[randomIndex]) return weightsm,labels = loadDataSet()#wei = gradAscent(m,labels)#wei = stocGradAscent0(array(m),labels)wei = stocGradAscent1(array(m),labels)plotBestFit(wei)
方式二:依次序逐条遍历,无增大遍历数
def stocGradAscent0(dataMat,labels): m,n = shape(dataMat) weights = ones(n) alpha = 0.01 #for j in range(150): #li = range(m) # random.shuffle(li)单纯的将整个样本集逐次遍历一遍 for i in range(m): print i #alpha = 4 / (1.0 + i + j) + 0.0001 h = sigmoid(sum(dataMat[i] * weights)) error = labels[i] - h weights = weights + alpha * error * dataMat[i] return weights
由于遍历次数较少,分割不够理想
方式三:依次序逐条遍历,增大遍历数
def stocGradAscent0(dataMat,labels): m,n = shape(dataMat) weights = ones(n) alpha = 0.01 for j in range(150): li = range(m) random.shuffle(li) for i in li: print i #alpha = 4 / (1.0 + i + j) + 0.0001 h = sigmoid(sum(dataMat[i] * weights)) error = labels[i] - h weights = weights + alpha * error * dataMat[i] return weights
效果基本为正确区分,虽有遗漏,但是大体区分明确,不影响正常区分
方式四:随机取,不重复,增大遍历数:
def stocGradAscent1(dataMat,labels,numIter=150): m,n = shape(dataMat) weights = ones(n) alpha = 0.01 for j in range(numIter): dataIndex = range(m) for i in range(m): #alpha = 4/(1.0+i+j)+0.0001 randomIndex = int(random.uniform(0,len(dataIndex))) h = sigmoid(sum(dataMat[dataIndex[randomIndex]]*weights)) #print "dataIndex:",dataIndex[randomIndex],"random",randomIndex error = labels[dataIndex[randomIndex]] - h weights = weights + alpha * error * dataMat[dataIndex[randomIndex]] #plotBestFit(weights) del(dataIndex[randomIndex]) return weights
效果与上面持同
下图为修改alpha=4/(1.0+i+j)+0.0001后的效果:
变化不是很明显
结论:对该样本集来说,遍历次数时改进区分效果最明显的因素,无论是随机取重复,随机取不重复,按序取增大遍历数,只要遍历的次数达到一定的量,最终的结果基本一样,由此推广到其他样本集,认为要保证区分的正确率,最主要的是要保证遍历的次数,随机取样,动态alpha虽然会使得结果趋于稳定后期无有较大波动,但是就效果来看,其影响微乎其微。
阅读全文
0 0
- 机器学习实战-logistic回归随机梯度上升浅见
- py2.7 : 《机器学习实战》 Logistic回归 1.22号 5.3 分析数据:随机梯度上升
- 《机器学习实战》第五章:Logistic回归(2)随机梯度上升和一个实例
- 机器学习-Logistic回归之随机梯度上升
- [机器学习]Logistic回归梯度上升法与改进的随机梯度上升算法
- 机器学习-Logistic回归之使用随机梯度上升算法预测病马死亡率
- Python3《机器学习实战》学习笔记(六):Logistic回归基础篇之梯度上升算法
- 【机器学习】Logistic回归的梯度上升法
- 机器学习-Logistic回归之梯度上升法
- 机器学习之logistic回归的梯度上升算法
- Logistic回归(随机梯度上升)
- Logistic回归(改进的随机梯度上升)
- 机器学习实战-Logistic回归
- 《机器学习实战》--Logistic回归
- [机器学习实战] -Logistic回归
- 《机器学习实战》--Logistic回归
- 机器学习实战-Logistic回归
- 《机器学习实战》logistic回归
- selenium webdriver的testNG框架的介绍及使用
- Ubuntu里权限相关问题
- xStream完美转换XML、JSON xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换; 前面有介
- OpenStack公共组件oslo之七——oslo.middleware
- URL编码
- 机器学习实战-logistic回归随机梯度上升浅见
- 初涉selenium+phantomjs
- Oracle之SQL语句性能优化(34条优化方法)
- 关于使用xpath的疑惑
- [Android N]KeyStore mBinder成员空指针引起system process不断重启
- 通过Synplify Pro查看FSM状态机
- SQL语句大全
- VS IntelliSense不识别新安装的Python库解决方法
- IDEA 热部署 Tomcat
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
学习软件下载
关于学习的软件有哪些
学习有关的软件
学习广东话的软件
英文单词学习软件
英语软件学习
有什么学习软件
关于学习的软件
大学学习软件
手机学习软件
学习网站大全免费
关于学习英语的软件
好用的学习软件
学习粤语的软件
学习软件大全
化学学习软件
免费学习英语的软件
学习计算机软件
学习物理软件
有关学习的软件
英语学习软件下载
学习应用软件
下载学习软件
有关学习英语的软件
好的学习软件
学习打字的软件
初中学习方法和技巧
学习方法总结
初中学习计划
初中数学学习方法
高中学习方法
初中生学习软件
怎么才能学习好
初三的学习方法
学习方法与技巧
初中生学习计划表
学习方法初中
中学生学习方法
初中生的学习方法
初中学霸的学习方法
初中的学习方法