python 实现梯度下降
在多元线性回归中会用到梯度下降来计算参数值。这里我用python实现一个梯度下降版本。
这里多元线性方程为 y = A0+A1*x1+...+An* xn
数据输入格式,y表示
y \t x1 \t x2 \t .... xn
代码如下:
import os
import sys theta = []
training_data = []
h_value = []
alpha = 0.0000009 def load(path):
f = open(path,'r')
for x in f:
x = x.strip('\r\n')
field = x.split('\t')
v_list = []
for v in field:
v_list.append(int(v))
training_data.append(v_list)
f.close()
for x in training_data:
h_value.append(0.0) def init(path,theta_num):
for x in range(theta_num):
theta.append(1.0)
load(path); def gradient():
i = 0
loss = 100.0
theta_num = len(theta)
data_num = len(training_data)
while i < 3000 and loss > 0.0001:
#compute hvalue
for index in range(data_num):
hv = theta[0]
for k in range(1,theta_num):
hv += theta[k]*training_data[index][k]
h_value[index] = hv
#update theta
for index in range(theta_num):
s = 0.0
for k in range(data_num):
if index == 0:
s += (h_value[k] - training_data[k][0])*1
else:
s += (h_value[k] - training_data[k][0])*training_data[k][index]
theta[index] = theta[index] - alpha * 1/data_num * (s)
#compute loss
loss = 0.0
for index in range(data_num):
hv = theta[0] / (2*data_num)
for k in range(1,theta_num):
hv += theta[k]*training_data[index][k]
loss += pow((hv - training_data[index][0]),2)/(2*data_num)
print loss
i += 1
for x in theta:
print x, if __name__=='__main__':
path = sys.argv[1]
init(path,int(sys.argv[2]))
gradient()
sys.exit(0)
python 实现梯度下降的更多相关文章
- 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测
线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...
- Python之TensorFlow的变量收集、自定义命令参数、矩阵运算、梯度下降-4
一.TensorFlow为什么要存在变量收集的过程,主要目的就是把训练过程中的数据,比如loss.权重.偏置等数据通过图形展示的方式呈现在开发者的眼前. 自定义参数:自定义参数,主要是通过Python ...
- 【Python】机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值
[Python]机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值 本题目来自吴恩达机器学习视频. 题目: 你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方), ...
- Gradient descend 梯度下降法和归一化、python中的实现(未完善)
梯度下降法是优化函数参数最常用.简单的算法 通常就是将一组输入样本的特征$x^i$传入目标函数中,如$f(x) = wx + b$,再计算每个样本通过函数预测的值$f(x^i)$与其真实值(标签)$y ...
- [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类
ps:本博客内容根据唐宇迪的的机器学习经典算法 学习视频复制总结而来 http://www.abcplus.com.cn/course/83/tasks 逻辑回归 问题描述:我们将建立一个逻辑回归模 ...
- 机器学习算法整理(二)梯度下降求解逻辑回归 python实现
逻辑回归(Logistic regression) 以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 用梯度下降求解逻辑回归 Logi ...
- 机器学习算法整理(一)线性回归与梯度下降 python实现
回归算法 以下均为自己看视频做的笔记,自用,侵删! 一.线性回归 θ是bias(偏置项) 线性回归算法代码实现 # coding: utf-8 get_ipython().run_line_mag ...
- python机器学习——随机梯度下降
上一篇我们实现了使用梯度下降法的自适应线性神经元,这个方法会使用所有的训练样本来对权重向量进行更新,也可以称之为批量梯度下降(batch gradient descent).假设现在我们数据集中拥有大 ...
- 不依赖Python第三方库实现梯度下降
认识 梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模), 我感觉, 其实就是偏导数向量方向 ...
随机推荐
- oc-24-点语法
/** 点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时, 编译器会自动展开成相应的方法.切记点语法的本质是转换成相应的set和get方法, 如果没有set和get方法,则不能使用点语法. ...
- 性能监视器(SSAS)
使用性能监视器,您可以通过性能计数器监视 Microsoft SQL Server Analysis Services (SSAS) 实例的性能. 性能监视器是用于跟踪资源使用情况的 Microsof ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- js中数组操作
var selectedCodeArray = []; var num = $.inArray(值, selectedCodeArray) //值在数组中的位置 selectedCodeArray. ...
- git的一些命令
因为项目的原因,大家把项目托管到git上,然后我不会,队友就传了一个廖雪峰的git教程,讲的很详细,不会用git的同学,可以在http://pan.baidu.com/s/1pKizolP上下载,这是 ...
- bing 输入法,切换简体、繁体快捷键与myeclipse 格式化代码冲突。。
bing 输入法,切换简体.繁体快捷键与myeclipse 格式化代码冲突...蛋碎 myeclipse 代码格式化快捷键是:ctrl+shift+F,bing输入法简体.繁体切换也是,于是蛋疼的事情 ...
- 快递鸟顺丰电子面单接口API-JAVA
一.电子面单对接案例 1.接口描述 接口支持的消息接收方式:HTTP POST 请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;cha ...
- solr返回的字段带有中括号问题
在solr返回的结果集的content字段返回格式为: "content": ["测试content" ], 经过对比title 和content字段,发现co ...
- Comparison method violates its general contract
生产环境出现的错误排查,错误log如下 java.lang.IllegalArgumentException: Comparison method violates its general contr ...
- Shell学习笔记 - 分支语句
一.单分支if语句 1. 语法格式 if [ 条件判断式 ]; then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 注意:中括号和条件判断式之间必须有空格 2. 示例1:判断登 ...