用梯度下降实现线性回归

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. 吴恩达机器学习之单变量线性回归理论部分

    理论部分 1.方程形式 在进行数据处理过程中,有时数据图像可拟合成单变量线性函数,即 2.如何拟合 此时,我们虽知道拟合函数的形式,但如何拟合仍是个问题,怎样拟合可以最接近实际数据情况呢? 最小二乘法 ...

  2. 梯度下降及一元线性回归[python代码](二)

    第一章.AI人工智能入门之梯度下降及一元线性回归(2) 目录 第一章.AI人工智能入门之梯度下降及一元线性回归(2) 一.线性回归是什么? 二.线性回归的应用 三.线性回归的一般形式 四.一元线性回归 ...

  3. 吴恩达机器学习: 单变量线性回归 理论与实践

    cost function: , where  我们的目的是找到最优的两个参数theta 0,  theta 1, 来使得cost function 值最小. 方法:Gradient Descent( ...

  4. Tensorflow 笔记 Ⅱ——单变量线性回归

    文章目录 核心步骤 (1)数据准备 (2)构建模型 (3)训练模型 (4)模型预测 单变量线性回归原理 监督式机器学习 迭代训练原理图 损失与损失函数 与损失函数相关的其中一个词汇叫收敛 与损失函数相 ...

  5. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  6. 机器学习:单变量线性回归及梯度下降

    ***************************************** 注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的<机器学习>课程笔记.博主深感学 ...

  7. 【Machine Learning 二】单变量线性回归,代价函数,梯度下降

    吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...

  8. 吴恩达机器学习1——单变量线性回归、梯度下降

    目录 吴恩达机器学习第一周 一.什么是机器学习? 二.机器学习的分类 1. 监督学习 2. 非监督学习 3. 监督学习和非监督学习的举例 三.单变量线性回归(**Linear Regression w ...

  9. 吴恩达机器学习(一)单变量线性回归(假设函数、代价函数、梯度下降)

    目录 0. 前言 1. 假设函数(Hypothesis) 2. 代价函数(Cost Function) 3. 梯度下降(Gradient Descent) 学习完吴恩达老师机器学习课程的单变量线性回归 ...

  10. 【视频】什么是梯度下降?用线性回归解释和R语言估计GARCH实例

    全文链接:http://tecdat.cn/?p=23606 梯度下降是一种优化算法,能够为各种问题找到最佳解决方案(点击文末"阅读原文"获取完整代码数据). 梯度下降是什么? 梯 ...

最新文章

  1. 解读:spring-boot logging。记一次Logback在spring-boot中的使用方法
  2. json格式的字符串转为json对象遇到特殊字符问题解决
  3. 求首尾相接的数组的最大子数组和
  4. SAP实施不成功就像女人丰乳没效果
  5. Python学习笔记:常用第三方模块(1)
  6. 如果已经知道某一CALL的具体作用,能否把后面所有相同的CALL都改成函数名形式?
  7. 内存中的调用别的软件程序加密解密函数_公司加密软件哪个最好用?
  8. Java浮点数内存存储
  9. 数据挖掘—朴素贝叶斯分类算法(Java实现)
  10. 华为usg6000配置手册_带你了解防火墙安全区域的作用及简单的配置,小白不要错过了...
  11. python Django ORM ,用filter方法表示“不等于”的方法
  12. php复姓怎么排序,按姓氏笔画排名怎么排列了
  13. FreePic2PDF制作书签
  14. CodeMeter的功能介绍
  15. java action上传文件_Java struts Action +ActionForm上传文件
  16. FW150U构建无线局域网【模拟AP功能设置指南】
  17. win7系统配置时间服务器,与Internet时间服务器同步 设Win7精确时间
  18. [luogu3505][bzoj2088][POI2010]TEL-Teleportation【分层图】
  19. 新贵 轻雅 100 数字键 numlock问题
  20. 49 把字符串转换成整数

热门文章

  1. C# Asp.net 制作一个windows服务
  2. HCIE-Security Day12:补充包过滤和安全策略的概念
  3. c语言static的用法_一文轻松掌握,单片机中C语言的数据存储与程序编写
  4. C++ 中缀表达式转后缀表达式(两种方式:栈、二叉树)
  5. Cocos2d-x物理引擎概述
  6. 设计模式(三): FACTORY工厂模式 -- 创建型模式
  7. java原码、补码、反码总结
  8. C++ traits学习笔记(一)
  9. vista企业版和旗舰版中的Bitlocker功能概述
  10. 2.Linux下C++操作MongoDB