python中最小二乘法详细讲解
python中在实现一元线性回归时会使用最小二乘法,那你知道最小二乘法是什么吗。其实最小二乘法为分类回归算法的基础,从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法。本文向大家介绍python中的最小二乘法。
一、最小二乘法是什么
最小二乘法LeastSquareMethod,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出)。
二、最小二乘法实现原理
通过最小化误差的平方和寻找数据的最佳函数匹配。
三、最小二乘法功能
利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
四、最小二乘法两种视角描述:“多线→一点”视角与“多点→一线”视角
1、已知多条近似交汇于同一个点的直线,想求解出一个近似交点:寻找到一个距离所有直线距离平方和最小的点,该点即最小二乘解;
2、已知多个近似分布于同一直线上的点,想拟合出一个直线方程:设该直线方程为y=kx+b,调整参数k和b,使得所有点到该直线的距离平方之和最小,设此时满足要求的k=k0,b=b0,则直线方程为y=k0x+b0。
实例扩展:
最小二乘法矩阵
#!/usr/bin/envpython #-*-coding:utf-8-*- importnumpyasnp defcalc_left_k_mat(k): """ 获得左侧k矩阵 :paramk: :return: """ k_mat=[] foriinrange(k+1): now_line=[] forjinrange(k+1): now_line.append(j+i) k_mat.append(now_line) returnk_mat defcalc_right_k_mat(k): """ 计算右侧矩阵 :paramk: :return: """ k_mat=[] foriinrange(k+1): k_mat.append([i,i+1]) returnk_mat defpow_k(x,k): """ 计算x列表中的k次方和 :paramx:点集合的x坐标 :paramk:k值 :return: """ sum=0 foriinx: sum+=i**k returnsum defget_left_mat_with_x(k_mat,k): """ 将左侧k矩阵运算得到左侧新的矩阵 :paramk_mat: :paramk: :return: """ left_mat=[] forklink_mat: now_data=[] forkinkl: now_data.append(pow_k(x,k)) left_mat.append(now_data) returnleft_mat defget_right_mat_with(right_k_mat): """ 将右侧k矩阵运算得到右侧新的矩阵 :paramright_k_mat: :return: """ right_mat=[] foriinrange(len(right_k_mat)): sum=0 forxL,yLinzip(x,y): a=(xL**right_k_mat[i][0])*(yL**right_k_mat[i][1]) sum+=a right_mat.append(sum) returnright_mat deffuse_mat(left,right): """ 融合两个矩阵 :paramleft: :paramright: :return: """ new_mat=[] foriinrange(len(left)): asd=np.append(left[i],right[i]) new_mat.append(list(asd)) returnnew_mat if__name__=='__main__': k=3 x=[1,2,3] y=[1,2,3] #计算原始左侧K矩阵 left_k_mat=calc_left_k_mat(k) print("原始左侧K矩阵") print(left_k_mat) #计算原始右侧K矩阵 right_k_mat=calc_right_k_mat(k) print("原始右侧k矩阵") print(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) print("计算后左侧K矩阵") print(new_left_mat) print("计算后右侧侧K矩阵") print(new_right_mat) print("-----"*10) #融合两个矩阵左侧矩阵每一行增加右侧矩阵的对应行 new_all=fuse_mat(new_left_mat,new_right_mat) print("完整矩阵") print(new_all)
到此这篇关于python中最小二乘法详细讲解的文章就介绍到这了,更多相关python中最小二乘法如何理解内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。