如何在python项目中实现一个最小二乘法

  介绍

这篇文章给大家介绍如何在python项目中实现一个最小二乘法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

一、最小二乘法是什么

最小二乘法最小二乘法,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出)。

二,最小二乘法实现原理

通过最小化误差的平方和寻找数据的最佳函数匹配。

三,最小二乘法功能

利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

四,最小二乘法两种视角描述:“多线→一点“视角与“多点→一线”视角

1,已知多条近似交汇于同一个点的直线,想求解出一个近似交点:寻找到一个距离所有直线距离平方和最小的点,该点即最小二乘解;

2,已知多个近似分布于同一直线上的点,想拟合出一个直线方程:设该直线方程为y=kx + b,调整参数k和b,使得所有点到该直线的距离平方之和最小,设此时满足要求的k=k0, b=b0,则直线方程为y=k0x + b0。

实例扩展:

最小二乘法矩阵

# !,/usr/bin/env  python   #,- *安康;编码:utf-8  - * -   import  numpy  as  np   def  calc_left_k_mat (k):   ,“““   ,获得左侧k矩阵   ,:param  k:   ,返回:   ,“““=,k_mat  []   ,for 小姐:拷贝范围(时间+ k  1):   时间=now_line 才能;[]   for 才能;j 拷贝范围(时间+ k  1):   ,,now_line.append (j  +,我)   k_mat.append才能(now_line)   return  k_mat   def  calc_right_k_mat (k):   ,“““   ,计算右侧矩阵   ,:param  k:   ,返回:   ,“““=,k_mat  []   ,for 小姐:拷贝范围(时间+ k  1):   k_mat.append才能([我,小姐:+,1])   return  k_mat   def  pow_k (x), k):   ,“““   ,计算x列表中的k次方和   ,:param  x:点集合的x坐标   ,:param  k: k值   ,返回:   ,“““   sum =, 0   ,for 小姐:x:拷贝   sum 才能+=,小姐:* *,k   return 总和   def  get_left_mat_with_x (k_mat, k):   ,“““   ,将左侧k矩阵运算得到左侧新的矩阵   ,:param  k_mat:   ,:param  k:   ,返回:   ,“““=,left_mat  []   ,for  kl  k_mat拷贝:   时间=now_data 才能;[]   for 才能;k  kl:拷贝   ,,now_data.append (pow_k (x), k))   left_mat.append才能(now_data)   return  left_mat   def  get_right_mat_with (right_k_mat):   ,“““   ,将右侧k矩阵运算得到右侧新的矩阵   ,:param  right_k_mat:   ,返回:   ,“““=,right_mat  []   ,for 小姐:拷贝范围(len (right_k_mat)):   sum 才能=0   for 才能,xL, yL 拷贝zip (x, y):   ,,a =, (xL  * *, right_k_mat[我][0]),*,(yL  * *, right_k_mat[我][1])   ,,sum  +=,   right_mat.append才能(总和)   return  right_mat   def  fuse_mat(左,右):   ,“““   ,融合两个矩阵   ,:param 左:   ,:param 右:   ,返回:   ,“““=,new_mat  []   ,for 小姐:拷贝范围(len(左)):   asd 才能=,np.append(左[我],[我])   new_mat.append才能(列表(asd))   return  new_mat   if  __name__ ==, & # 39; __main__ # 39;:   k =, 3=,x  [1, 2, 3]=,y  [1, 2, 3]   ,#计算原始左侧K矩阵=,,left_k_mat  calc_left_k_mat (k)   ,打印(“原始左侧K矩阵“)   ,打印(left_k_mat)   ,#计算原始右侧K矩阵=,,right_k_mat  calc_right_k_mat (k)   ,打印(“原始右侧k矩阵“)   ,打印(right_k_mat)   ,#计算左侧,k 矩阵=,,new_left_mat  get_left_mat_with_x (k_mat=left_k_mat, k=k)   ,#计算右侧,k 矩阵=,,new_right_mat  get_right_mat_with (right_k_mat=right_k_mat)   ,打印(“计算后左侧K矩阵“)   ,打印(new_left_mat)   ,打印(“计算后右侧侧K矩阵“)   ,打印(new_right_mat)   ,打印(“——产生绯闻,*,10)   ,#融合两个矩阵,左侧,矩阵每一行增加,右侧矩阵的对应行=,,new_all  fuse_mat (new_left_mat, new_right_mat)   ,打印(“完整矩阵“)   ,print (new_all)

关于如何在python项目中实现一个最小二乘法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

如何在python项目中实现一个最小二乘法