目录

1.最小二乘法:

2.梯度下降法:

3.理论加实践:

4.python代码:

4.1梯度下降法:

4.2最小二乘法


学习引入:机器学习中的参数模型(线性回归,逻辑回归)等。在这里我们只进行一元线性回归的学习,求一元线性回归有两种方法:梯度下降法,最小二乘法

     梯度下降法:通过建模找到一个最大程度拟合数据的模型,通过确定损失函数,最优化目标函数来进行学习

回归分析:

最下二乘法:利用已知的数据(线性回归中需要找到一条直线)最大程度的拟合样本与输出标记,即产生拟合方程,从而对未知的数据进行估预测.

如何判断是否选用线性模型处理问题?

使用相关系数r衡量特征与标记之间的相关性强弱,判断是否适合用直线进行拟合,r为0到1的值,越接近1,相关性越强

如果x与y有较强的相关的模型,则有y=ax+b

寻找合适的参数a,b,使得误差即损失最小

1.最小二乘法:

最小二乘法求解最小值:

2.梯度下降法:

一元线性回归公式:

求解的方法:首先构造损失函数,然后对损失函数进行求偏导,之后利用前面讲过的梯度下降进行更新迭代,求得最后的一元线性方程。下面有一些简单的模型

3.理论加实践:

                下面通过分析pizza模型,分析披萨的直径与价格的线性关系,来预测任一直径的披萨的价格。

将上面的值在图像上以坐标点显示:

import matplotlib.pyplot as plt
def runplt():plt.figure()#自定义图像plt.title("Diameter and price")plt.xlabel("Diameter/inch")plt.ylabel("Cost/dollar")plt.axis([0, 25, 0, 30])#用来设置图像边框X到25,y到30plt.grid(True)return plt
plt = runplt()
X = [[6], [8], [10], [14], [18]]#x代表pizza的直径
y = [[7], [9], [13], [17.5], [18]]#代表pizza的价格
plt.plot(X, y, 'k.')#绘制点图,‘k,’的作用是画出点
# #plt.show()#用来显示图像

图形如下

可以看出pizza的价格与pizza的直径是有一定关系的,是随着直径增大而增大,但又不是线性关系,所以需要构建模型,下面会以梯度下降法和最小二乘法进行求解。

4.python代码:

4.1梯度下降法:

t1和t2是两组数据,代表着直径数据和价格数据,假设函数(def h(x))是首先进行一个初始赋值,通过梯度下降的方法不断对k和b进行更新,最后拟合出一元线性回归方程。

# 通过分析披萨的直径与价格的线性关系,来预测任一直径的披萨的价格。
# author gyh
# 一元线性回归
import matplotlib.pyplot as plt
import numpy as np
t1=np.array([6,8,10,14,18])#x代表pizza的直径
t2=np.array([7,9,13,17.5,18])#代表pizza的价格
#定义一个数组,用来存放损失值
result=list()
#初值
x_i0=np.ones(len(t1))
k,b=0,0
alpha=0.12
#假设函数
def h(x):return k*x+b
#损失函数
def error(x,y):return np.sum(np.power((h(x)-y),2))/10
#损失函数求导对b
def error_b(x,y):return alpha*np.sum((h(x)-y)*x_i0)/5
#损失函数求导对斜率k
def error_k(x,y):return alpha*np.sum((h(x)-y)*x)/5
#不断更新
cnt=0#循环次数限制
for i in range(5):b0=error_b(t1[i],t2[i])k0=error_k(t1[i],t2[i])b=b-b0k=k-k0errors=error(t1[i],t2[i])result.append(errors)cnt=cnt+1if(cnt>20 or errors <100):break
if __name__ == "__main__":plt.figure()plt.title("change")#标题plt.xlabel("price")#坐标x轴plt.ylabel("amount")#坐标y轴x = np.arange(6, 18, 0.001)  # 起点为1,终点为2.5,步长为0.01Y = k * x + bplt.plot(t1, t2, 'k.')  # 绘制点图,‘k,’的作用是画出点plt.plot(x,Y)plt.grid(linestyle='--')  # 画出网格线plt.show()print("h(x)=%f+%f * x" % (b, k))

代码运行的结果:

h(x)=0.840000+1.008000 * x

图示:

4.2最小二乘法

由最小二乘法的公式可得python代码如下:

# 通过分析披萨的直径与价格的线性关系,来预测任一直径的披萨的价格。
#最小二乘法
# author gyh
import matplotlib.pyplot as plt
import numpy as npdef runplt():plt.figure()#自定义图像plt.title("Diameter and price")plt.xlabel("Diameter/inch")plt.ylabel("Cost/dollar")plt.axis([0, 25, 0, 30])#用来设置图像边框X到25,y到30plt.grid(True)return plt
plt = runplt()
X1 =np.linspace(6, 18)
Y1 =np.linspace(7, 18)
X=[6,8,10,14,18]#x代表pizza的直径
y=[7,9,13,17.5,18]#代表pizza的价格
plt.plot(X, y, 'k.')#绘制点图,‘k,’的作用是画出点
plt.plot(X1,Y1)#画出直线
plt.show()#用来显示图像
sum1,sum2=0,0
for i in range(len(X)):sum1 +=X[i]
t1=sum1/len(X)#x求平均
print("直径的平均值为:",t1)
for i in range(len(y)):sum2 +=y[i]
t2=sum2/len(y)#y求平均
print("价格的平均值为:",t2)
lxx=0
for i in range(len(X)):lxx +=(X[i]-t1)*(X[i]-t1)
print("lxx= ",lxx)
lxy=0
for i in range(len(y)):lxy +=(X[i]-t1)*(y[i]-t2)
print("lxy= %.2f"%lxy)
#由最小二乘法b=Lxy/lxx得
b=lxy/lxx
print("一元线性方程的斜率b=%.2f"%b)
a=t2-b*t1
print("一元线性回归方程")
print("y=%.2f+"%a,'%.2fx'%b)

结果为:

直径的平均值为: 11.2
价格的平均值为: 12.9
lxx=  92.8
lxy= 90.60
一元线性方程的斜率b=0.98
一元线性回归方程
y=1.97+ 0.98x

图示:

说明:由于刚开始写的有点乱,现在又重新梳理了一下,会继续改进的。

一元线性回归python代码相关推荐

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

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

  2. 一元线性回归-python代码

    1.一元回归分析的步骤 1.绘制散点图,确定回归模型类型 2.估计模型参数,建立回归模型类型 3.模型校核 2. Sklearn包 pip install sklearn 说明:使用sklearn库中 ...

  3. 机器学习(二)-一元线性回归算法(代码实现及数学证明)

    解决回归问题 思想简单,实现容易 许多强大的非线性模型的基础 结果具有很好的可解释性 蕴含机器学习中的很多重要思想 回归问题:连续值 如果样本 特征 只有一个 称为简单线性回归 y=ax + b 通过 ...

  4. 一元线性回归python示例——房价预测

    假设房价只有面积一个影响因素,根据下列数据集建立线性回归模型,并预测面积为700平方英尺的房子价格. No square_feet price 1 150 6450 2 200 7450 3 250 ...

  5. 多元线性回归-python代码

    引言 求解多个自变量和一个因变量之间的线性关系 y=a1x1+a2x2+a3x3+b (y为因变量,x为自变量,a为权重,b为截距.) 数据类型: 1.读数据 ''' y=a1x1+a2x2+a3x3 ...

  6. 线性回归python代码实现

    import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签 ...

  7. python 曲线回归_线性回归——Python代码实现

    import numpy as np def computer_error_for_give_point(w, b, points): # 计算出 观测值与计算值 之间的误差, 并累加,最后返回 平均 ...

  8. 一元线性回归模型及其Python案例

    回归的概念:(其实就是用曲线拟合的方式探索数据规律) 回归问题的分类: 一元线性回归: 线性回归模型是利用线性拟合的方式探寻数据背后的规律.如下图所示,先通过搭建线性回归模型寻找这些散点(也称样本点) ...

  9. 解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

    目录 [1]解析法实现一元线性回归 python列表实现 利用Numpy实现 利用TensorFlow实现 数据和模型可视化 [2]解析法实现多元线性回归 利用Numpy实现 需要用到的NumPy数组 ...

最新文章

  1. 2016年第二季度全球以太网交换机销量破60亿美元
  2. nginx+keepalived高可用及双主模式
  3. ICCV 2019 | Lifelong GAN:基于持续学习的条件图像生成模型
  4. 多核编程与单核多线程编程
  5. mysql 组合索引
  6. 酸了酸了,BAT过六一的这些礼物都想要
  7. dataframe数组做元素_数组 array 矩阵 list 数据框 dataframe
  8. java hexbin_bin文件转换为hex文件操作步骤解析 - 全文
  9. java 注解的实例化
  10. 阿里巴巴大数据竞赛-天池
  11. Tilera吴晓东:2013年要做成三百多个核
  12. 迅雷前副总裁李金波:我的创业感悟
  13. Balanced Multimodal Learning via On-the-fly Gradient Modulation论文笔记
  14. 哈工大人工智能暑期课实践项目——手写体识别四则运算(项目计划)
  15. 计算机名和DNS域名的关系,域名、DNS、IP地址的对应关系
  16. 让dropout在图像超分辨领域大放异彩![2022 CVPR]
  17. 服务器开启防火墙后无法登录系统,客户端连不上,服务器防火墙服务启动不了...
  18. [译] Deep Residual Learning for Image Recognition (ResNet)
  19. 2022秋招蚂蚁金服面试
  20. Flink-flink原理解读

热门文章

  1. tars 的基本使用——使用 tars 发布服务
  2. Libiconv移植到Hi3536
  3. CVPR 2020 论文总结:Weakly Supervised Semantic Point Cloud Segmentation: Towards 10×Fewer Labels
  4. UDS协议-0x10(诊断会话控制)
  5. vue index.html 缓存,解决vue单页面 回退页面 keeplive 缓存问题
  6. 四甲基环四硅氧烷D4H
  7. 大学物理 复习指导、公式推导精简过程、结论归纳(物理学教程 第三版 上册 马文蔚 周雨青)
  8. iOS应用内打开App Store应用详情界面
  9. 重邮大学计算机基础考试试题及答案,重庆邮电大学《大学计算机基础(2015》考试试卷.pdf...
  10. 检测到不兼容的键盘驱动程序的解决