梯度下降-单变量线性回归-理论+代码+解释
用梯度下降实现线性回归
y = mx + b 其中m是线性函数的斜率(Slope of the line),b是偏置( bias)
数据集:Swedish Insurance Dataset
代价函数/损失函数 Cost Function [J]= (1/2n) * sum((y_hat-y)^2)
其中:n为输入数据点的总个数
y_hat:使用从梯度下降获得的“m”和“b”值的y的预测值。
y:已经的标签数据y
梯度对参数求导:
Cost Function [J]= (1/2n) * sum(((m*X + b)-y)^2)
CostFunction对m求导:dJ/dm = (1/n) X ((m*X+b)-y)
CostFunction对b求导:dJ/db = (1/n) ((mX+b)-y) * 1
梯度更新:
m = m - alpha*(dJ/dm)
b = b - alpha*(dJ/db)
其中,alpha是斜率(Learning Rate)
code
# Import Dependencies
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inlinedf = pd.read_excel('F:/datasets/slr06.xls', index_col=u'ID')
#dataset txt format http://t.cn/RfHWAbI
#dataset Swedish Auto Insurance Dataset
#http://college.cengage.com/mathematics/brase/understandable_statistics/7e/students/datasets/slr/excel/slr06.xls# convert data to array
X = np.array(df['X'], dtype=np.float64)
y = np.array(df['Y'], dtype=np.float64)fig,ax = plt.subplots()
ax.scatter(X,y)def cost_Function(m,b,X,y):return sum(((m*X + b) - y)**2)/(2*float(len(X)))def gradientDescent(X,y,m,b,alpha,iters):# Initialize Values of Gradientsgradient_m = 0gradient_b = 0# n: Number of items in a rown = float(len(X))a = 0# Array to store values of error for analysishist = []# Perform Gradient Descent for itersfor _ in range(iters):# Perform Gradient Descentfor i in range(len(X)):gradient_m = (1/n) * X[i] * ((m*X[i] + b) - y[i])gradient_b = (1/n) * ((m*X[i] + b) - y[i])m = m - (alpha*gradient_m)b = b - (alpha*gradient_b)# Calculate the change in error with new values of "m" and "b"a = cost_Function(m,b,X,y)hist.append(a)return [m,b,hist]# Learning Rate
lr = 0.0001
# Initial Values of "m" and "b"
initial_m = 0
initial_b = 0
# Number of Iterations
iterations = 1000
print("Starting gradient descent...")# Check error with initial Values of m and b
print("Initial Error at m = {0} and b = {1} is error = {2}".format(initial_m, initial_b, cost_Function(initial_m, initial_b, X, y)))[m,b,hist] = gradientDescent(X, y, initial_m, initial_b, lr, iterations)print('Values obtained after {0} iterations are m = {1} and b = {2}'.format(iterations,m,b))y_hat = (m*X + b)
print('y_hat: ',y_hat)fig,ax = plt.subplots()
ax.scatter(X,y,c='r')
ax.plot(X,y_hat,c='y')
ax.set_xlabel('X')
ax.set_ylabel('y')
ax.set_title('Best Fit Line Plot')predict_X = 76
predict_y = (m*predict_X + b)
print('predict_y: ',predict_y)fig,ax = plt.subplots()
ax.scatter(X,y)
ax.scatter(predict_X,predict_y,c='r',s=100)
ax.plot(X,y_hat,c='y')
ax.set_xlabel('X')
ax.set_ylabel('y')
ax.set_title('Prediction Plot')fig,ax = plt.subplots()
ax.plot(hist)
ax.set_title('Cost Function Over Time')
梯度下降-单变量线性回归-理论+代码+解释相关推荐
- 吴恩达机器学习之单变量线性回归理论部分
理论部分 1.方程形式 在进行数据处理过程中,有时数据图像可拟合成单变量线性函数,即 2.如何拟合 此时,我们虽知道拟合函数的形式,但如何拟合仍是个问题,怎样拟合可以最接近实际数据情况呢? 最小二乘法 ...
- 梯度下降及一元线性回归[python代码](二)
第一章.AI人工智能入门之梯度下降及一元线性回归(2) 目录 第一章.AI人工智能入门之梯度下降及一元线性回归(2) 一.线性回归是什么? 二.线性回归的应用 三.线性回归的一般形式 四.一元线性回归 ...
- 吴恩达机器学习: 单变量线性回归 理论与实践
cost function: , where 我们的目的是找到最优的两个参数theta 0, theta 1, 来使得cost function 值最小. 方法:Gradient Descent( ...
- Tensorflow 笔记 Ⅱ——单变量线性回归
文章目录 核心步骤 (1)数据准备 (2)构建模型 (3)训练模型 (4)模型预测 单变量线性回归原理 监督式机器学习 迭代训练原理图 损失与损失函数 与损失函数相关的其中一个词汇叫收敛 与损失函数相 ...
- 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码
吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...
- 机器学习:单变量线性回归及梯度下降
***************************************** 注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的<机器学习>课程笔记.博主深感学 ...
- 【Machine Learning 二】单变量线性回归,代价函数,梯度下降
吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...
- 吴恩达机器学习1——单变量线性回归、梯度下降
目录 吴恩达机器学习第一周 一.什么是机器学习? 二.机器学习的分类 1. 监督学习 2. 非监督学习 3. 监督学习和非监督学习的举例 三.单变量线性回归(**Linear Regression w ...
- 吴恩达机器学习(一)单变量线性回归(假设函数、代价函数、梯度下降)
目录 0. 前言 1. 假设函数(Hypothesis) 2. 代价函数(Cost Function) 3. 梯度下降(Gradient Descent) 学习完吴恩达老师机器学习课程的单变量线性回归 ...
- 【视频】什么是梯度下降?用线性回归解释和R语言估计GARCH实例
全文链接:http://tecdat.cn/?p=23606 梯度下降是一种优化算法,能够为各种问题找到最佳解决方案(点击文末"阅读原文"获取完整代码数据). 梯度下降是什么? 梯 ...
最新文章
- 解读:spring-boot logging。记一次Logback在spring-boot中的使用方法
- json格式的字符串转为json对象遇到特殊字符问题解决
- 求首尾相接的数组的最大子数组和
- SAP实施不成功就像女人丰乳没效果
- Python学习笔记:常用第三方模块(1)
- 如果已经知道某一CALL的具体作用,能否把后面所有相同的CALL都改成函数名形式?
- 内存中的调用别的软件程序加密解密函数_公司加密软件哪个最好用?
- Java浮点数内存存储
- 数据挖掘—朴素贝叶斯分类算法(Java实现)
- 华为usg6000配置手册_带你了解防火墙安全区域的作用及简单的配置,小白不要错过了...
- python Django ORM ,用filter方法表示“不等于”的方法
- php复姓怎么排序,按姓氏笔画排名怎么排列了
- FreePic2PDF制作书签
- CodeMeter的功能介绍
- java action上传文件_Java struts Action +ActionForm上传文件
- FW150U构建无线局域网【模拟AP功能设置指南】
- win7系统配置时间服务器,与Internet时间服务器同步 设Win7精确时间
- [luogu3505][bzoj2088][POI2010]TEL-Teleportation【分层图】
- 新贵 轻雅 100 数字键 numlock问题
- 49 把字符串转换成整数
热门文章
- C# Asp.net 制作一个windows服务
- HCIE-Security Day12:补充包过滤和安全策略的概念
- c语言static的用法_一文轻松掌握,单片机中C语言的数据存储与程序编写
- C++ 中缀表达式转后缀表达式(两种方式:栈、二叉树)
- Cocos2d-x物理引擎概述
- 设计模式(三): FACTORY工厂模式 -- 创建型模式
- java原码、补码、反码总结
- C++ traits学习笔记(一)
- vista企业版和旗舰版中的Bitlocker功能概述
- 2.Linux下C++操作MongoDB