精华内容
下载资源
问答
  • Ax = b 表示一个多项式 A: n * m x: m * 1 b: n * 1A的列向量的长度是n,代表一个在n维空间中的向量,m表示有m个这样的向量, x的各个元素和A的列向量相乘,比如x1 和 A1 相乘表示把向量A1的向量扩展为原来的x1...

    Ax = b 表示一个多项式
    A: n * m
    x: m * 1
    b: n * 1

    A的列向量的长度是n,代表一个在n维空间中的向量,m表示有m个这样的向量,
    x的各个元素和A的列向量相乘,比如x1 和 A1 相乘表示把向量A1的向量扩展为原来的x1倍,得到一个新的向量,这些向量相加就得到最终的结果b,b也是n维空间的一个向量。

    如果希望Ax能表示这个n维空间的所有向量的话,那么m必须大于等于n,就是说,在n维空间中,至少有n个线性无关的向量才能表示。

    和多项式的解联系起来,m = n ,而且m个向量线性无关的时候,Ax 正好可以表示一个b,如果 m 小于 n ,那么无解,如果m 大于 n , 而且A中线性无关的列向量小于n, 那么无解,如果A中线性无关的列向量等于n,那么无穷多解,不存在A中线性无关的列向量大于n的情况。

    展开全文
  • 在状态空间方程中引入输入和状态的多项式函数, 以此多项式函数表示非线性因素. 为了辨识多项式线性系统中的各系统矩阵, 对于矢量化各系统矩阵组成的未知参数矢量, 分别在无约束和有约束条件下采用两并行分布算法...
  • 在有限域上非线性多元多项式的解集可以是任意向量集,在该向量集所属的空间上能够找到最小数量的陪集,并覆盖该向量集,用该最小数量的陪集来线性化原有多项式成为了可能。文章以《有限域上向量子集中的陪集及最小陪集...
  • 得到了多项式平方型分拆和1次方分拆的算法和Maple应用程序;...发现了平方型多项式线性空间的维数与同元同次半正定多项式线性空间的维数总是相等的:差分代换缺项多项式总可以进行平方分拆;提出了待解决的问题。
  • 一.线性变换的不变子空间与Hamilton−CayleyHamilton-CayleyHamilton−Cayley定理 1.不变子空间 (1)概念: (2)性质与判定: 命题1:VVV上线性变换ᎯᎯᎯ的核与象,ᎯᎯᎯ...推论1:设ᎯᎯᎯ是域FFF上线性空间VVV上的线性

    一.不变子空间与HamiltonCayleyHamilton-Cayley定理(9.5)
    在这里插入图片描述
    1.不变子空间
    (1)概念:
    在这里插入图片描述
    (2)性质与判定:

    命题1:VV上线性变换的核与象,的特征子空间都是Ꭿ-子空间
    在这里插入图片描述

    命题2:设,BᎯ,ℬ都是VV上的线性变换,如果,BᎯ,ℬ可交换,那么KerB,ImB,BKer\,ℬ,Im\,ℬ,ℬ的特征子空间都是Ꭿ-子空间
    在这里插入图片描述
    推论1:设是域FF上线性空间VV上的线性变换,f(x)F[x]f(x)∈F[x],则Kerf(),Imf(),f()Ker\,f(Ꭿ),Im\,f(Ꭿ),f(Ꭿ)的特征子空间都是Ꭿ-子空间
    在这里插入图片描述

    命题3:VV上线性变换的不变子空间的和与交仍是的不变子空间
    在这里插入图片描述

    命题4:设是域FF上线性空间VV上的1个线性变换,W=<α1,α2...αs>W=<α_1,α_2...α_s>VV的1个子空间,则WWᎯ-子空间当且仅当αiW(i=1,2...s)Ꭿα_i∈W\,(i=1,2...s)
    在这里插入图片描述

    命题5:设是域FF上线性空间VV上的1个线性变换,ξV\xi∈Vξ0\xi≠0,则<ξ><\xi>Ꭿ-子空间当且仅当ξ\xi的1个特征向量
    在这里插入图片描述

    (3)将线性变换限制到不变子空间或其商空间上:
    在这里插入图片描述
    在这里插入图片描述
    2.用不变子空间研究线性变换的矩阵表示
    在这里插入图片描述
    (1)将线性变换表示成分块上三角矩阵:

    定理1:设A\mathcal{A}是域FFnn维线性空间VV上的1个线性变换,WWA\mathcal{A}的1个非平凡的不变子空间WW中取1个基α1...αrα_1...α_r,把它扩充成VV的1个基α1...αr,αr+1...αnα_1...α_r,α_{r+1}...α_n,则A\mathcal{A}在此基下的矩阵AA为1个分块上三角矩阵A=[A1A30A2]A=\left[\begin{matrix}A_1&A_3\\0&A_2\end{matrix}\right]其中A1A_1AW\mathcal{A}\,|\,WWW的1个基α1...αrα_1...α_r下的矩阵,A2A_2A\mathcal{A}诱导的商空间V/WV/W上的线性变换A~\tilde{\mathcal{A}}V/WV/W的1个基αr+1+W...αn+Wα_{r+1}+W...α_n+W下的矩阵;设A,AW,A~\mathcal{A},\mathcal{A}\,|\,W,\tilde{\mathcal{A}}的特征多项式分别为f(λ),f1(λ),f2(λ)f(λ),f_1(λ),f_2(λ),则f(λ)=f1(λ)f2(λ)f(λ)=f_1(λ)f_2(λ)
    在这里插入图片描述
    在这里插入图片描述

    定理2:设A\mathcal{A}是域FFnn维线性空间VV上的1个线性变换,如果A\mathcal{A}VV的1个基α1...αr,αr+1...αnα_1...α_r,α_{r+1}...α_n下的矩阵AA为分块上三角矩阵A=[A1A30A2]A=\left[\begin{matrix}A_1&A_3\\0&A_2\end{matrix}\right]W=<α1...αr>W=<α_1...α_r>,那么WWA\mathcal{A}的1个非平凡不变子空间,且AW\mathcal{A}\,|\,WWW的1个基α1...αrα_1...α_r下的矩阵是A1A_1
    在这里插入图片描述

    (2)将线性变换表示成分块对角矩阵:

    定理3:设A\mathcal{A}是域FFnn维线性空间VV上的1个线性变换,则A\mathcal{A}VV的1个基下的矩阵为分块对角矩阵(3)当且仅当VV能分解成A\mathcal{A}的非平凡不变子空间的直和:V=W1W2...WsV=W_1\oplus W_2\oplus...\oplus W_s,并且AiA_iAWi\mathcal{A}\,|\,W_iWiW_i的1个基下的矩阵
    在这里插入图片描述
    在这里插入图片描述

    (3)寻找线性变换的非平凡不变子空间:
    在这里插入图片描述

    引理:设VV是域FF上的线性空间(可以是有限维的,也可以是无限维的),A\mathcal{A}VV上的1个线性变换,在F[x]F[x]中,f(x)=f1(x)f2(x)f(x)=f_1(x)f_2(x),且(f1(x),f2(x))=1(f_1(x),f_2(x))=1,则Kerf(A)=Kerf1(A)Kerf2(A)(5)Ker\,f(\mathcal{A})=Ker\,f_1(\mathcal{A})\oplus Ker\,f_2(\mathcal{A})\qquad(5)
    在这里插入图片描述

    定理4:设VV是域FF上的线性空间(可以是有限维的,也可以是无限维的),A\mathcal{A}VV上的1个线性变换,在F[x]F[x]中:f(x)=f1(x)f2(x)...fs(x)(9)f(x)=f_1(x)f_2(x)...f_s(x)\qquad(9)其中f1(x),f2(x)...fs(x)f_1(x),f_2(x)...f_s(x)两两互素,则Kerf(A)=Kerf1(A)Kerf2(A)...Kerfs(A)(10)Ker\,f(\mathcal{A})=Ker\,f_1(\mathcal{A})\oplus Ker\,f_2(\mathcal{A})\oplus...\oplus Ker\,f_s(\mathcal{A})\qquad(10)
    在这里插入图片描述
    在这里插入图片描述

    3.零化多项式:

    4.哈密顿-凯莱定理(Hamilton-Cayley Theorem)
    在这里插入图片描述
    (1)整环上的矩阵:
    在这里插入图片描述
    (2)HamiltonCayleyHamilton-Cayley定理:

    定理5:设AA是域FF上的nn级矩阵,则AA的特征多项式f(λ)f(λ)AA的1个零化多项式,从而域FFnn维线性空间VV上的线性变换A\mathcal{A}的特征多项式f(λ)f(λ)A\mathcal{A}的1个零化多项式
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    (3)利用HamiltonCayleyHamilton-Cayley定理分解线性变换:
    在这里插入图片描述
    二.最小多项式(9.6)
    在这里插入图片描述
    1.定义与性质
    (1)线性变换的最小多项式:
    在这里插入图片描述

    FF上线性空间VV上的线性变换A\mathcal{A}的最小多项式通常记为m(λ)m(λ)

    (2)线性变换的最小多项式的性质:

    命题6:线性空间VV上的线性变换A\mathcal{A}的最小多项式是唯一的
    在这里插入图片描述

    命题7:设A\mathcal{A}是域FF上线性空间VV上的线性变换,F[λ]F[λ]中的多项式g(λ)g(λ)A\mathcal{A}的零化多项式当且仅当g(λ)g(λ)A\mathcal{A}的最小多项式m(λ)m(λ)的倍式
    在这里插入图片描述

    命题8:设A\mathcal{A}是域FF上线性空间VV上的线性变换,则A\mathcal{A}的最小多项式m(λ)m(λ)A\mathcal{A}的特征多项式f(λ)f(λ)FF中有相同的根(但重数可以不同)
    在这里插入图片描述
    推论1:设A\mathcal{A}是域FFnn维线性空间VV上的线性变换,域EFE\supe F,则A\mathcal{A}的最小多项式m(λ)m(λ)A\mathcal{A}的特征多项式f(λ)f(λ)EE中有相同的根(但重数可以不同)
    在这里插入图片描述

    (3)矩阵的最小多项式:
    在这里插入图片描述

    命题8’:域FFnn级矩阵AA的最小多项式m(λ)m(λ)AA的特征多项式f(λ)f(λ)FF中有相同的根(但重数可以不同)
    在这里插入图片描述
    推论1:相似的矩阵有相同的最小多项式
    在这里插入图片描述
    推论2:设AA是域FF上的nn级矩阵,域EFE\supe F,则AA的最小多项式m(λ)m(λ)AA的特征多项式f(λ)f(λ)EE中有相同的根(但重数可以不同)
    在这里插入图片描述

    (4)矩阵的最小多项式不随域的扩大而改变:
    在这里插入图片描述

    命题9:设AA是域FF上的矩阵,域EFE\supe F,则如果m(λ)m(λ)AA的最小多项式,那么把AA看成域EE上的矩阵,其最小多项式仍是m(λ)m(λ)
    在这里插入图片描述

    2.几类特殊线性变换或矩阵的最小多项式
    (1)几类特殊的最小多项式:
    在这里插入图片描述
    在这里插入图片描述
    (2)约当块(Jordan Block):

    命题10:设A\mathcal{A}是域FFll维线性空间WW上的线性变换,如果A=kI+B\mathcal{A}=k\mathcal{I}+\mathcal{B},其中B\mathcal{B}是幂零指数为ll的幂零变换,那么WW中存在1个基使得A\mathcal{A}在此基下的矩阵AAA=[k10...0000k1...00000k...000.....................000...k10000...0k1000...00k](5)A=\left[\begin{matrix}k&1&0&...&0&0&0\\0&k&1&...&0&0&0\\0&0&k&...&0&0&0\\...&...&...&...&...&...&...\\0&0&0&...&k&1&0\\0&0&0&...&0&k&1\\0&0&0&...&0&0&k\end{matrix}\right]\qquad(5)把(5)式中的矩阵称为1个ll约当块,记作Jl(k)J_l(k),其中kk是主对角线上的元素;于是Jl(k)J_l(k)的最小多项式是(λk)l(λ-k)^l
    在这里插入图片描述
    在这里插入图片描述
    推论1:域FF上的ll级矩阵AA相似于Jl(k)J_l(k)当且仅当AA的最小多项式为(λk)l(λ-k)^l
    在这里插入图片描述

    (3)线性变换在线性空间与不变子空间上的最小多项式间的关系:

    定理6:设A\mathcal{A}是域FF上线性空间VV上的线性变换,如果VV能分解成A\mathcal{A}的一些非平凡不变子空间的直和:V=W1W2...Ws(6)V=W_1\oplus W_2\oplus...\oplus W_s\qquad(6)那么A\mathcal{A}的最小多项式m(λ)m(λ)m(λ)=[m1(λ),m2(λ)...ms(λ)](7)m(λ)=[m_1(λ),m_2(λ)...m_s(λ)]\qquad(7)其中mi(λ)(i=1,2...s)m_i(λ)\,(i=1,2...s)Wj(j=1,2...s)W_j\,(j=1,2...s)上的线性变换AWj\mathcal{A}\,|\,W_j的最小多项式;[m1(λ),m2(λ)...ms(λ)][m_1(λ),m_2(λ)...m_s(λ)]m1(λ),m2(λ)...ms(λ)m_1(λ),m_2(λ)...m_s(λ)的最小公倍式
    在这里插入图片描述
    推论1:设AA是域FF上的1个nn级分块对角矩阵,即A=diag{A1,A2...As}A=diag\{A_1,A_2...A_s\},设AjA_j的最小多项式是mj(λ)(j=1,2...s)m_j(λ)\,(j=1,2...s),则AA的最小多项式m(λ)m(λ)m(λ)=[m1(λ),m2(λ)...ms(λ)]m(λ)=[m_1(λ),m_2(λ)...m_s(λ)]
    在这里插入图片描述
    在这里插入图片描述

    (4)约当形矩阵(Jordan Matrix):
    在这里插入图片描述
    3.用最小多项式研究线性变换的矩阵表示
    (1)线性变换可对角化的条件:

    定理7:设A\mathcal{A}是域FFnn维线性空间VV上的线性变换,则A\mathcal{A}可对角化当且仅当A\mathcal{A}的最小多项式m(λ)m(λ)F[λ]F[λ]中能分解成不同的1次因式的乘积
    在这里插入图片描述
    推论1:域FF上的nn级矩阵AA可对角化当且仅当AA的最小多项式m(λ)m(λ)F[λ]F[λ]中能分解成不同的1次因式的乘积
    在这里插入图片描述
    定理7及其推论使许多特殊类型的线性变换和矩阵是否可对角化的判定变得非常简洁

    (2)最小多项式与可对角化的线性变换:

    命题11:设VV是域FF上的线性空间,则
    VV上的幂等变换A\mathcal{A}一定可对角化
    VV上的幂零指数l>1l>1的幂零变换A\mathcal{A}一定不可对角化
    ③当域FF的特征不等于2时,VV上的对合变换A\mathcal{A}一定可对角化;当域FF的特征等于2时,不等于I\mathcal{I}的对合变换A\mathcal{A}一定不可对角化
    ④当FF是复数域时,VV上的周期变换一定可对角化
    在这里插入图片描述

    命题12:域FF是级数r>1r>1的约当块Jr(a)J_r(a)一定不可对角化;包含级数大于1的约当块的约当形矩阵一定不可对角化
    在这里插入图片描述
    推论1:设A\mathcal{A}是域FFnn维线性空间VV上的线性变换,如果A\mathcal{A}可对角化,那么对于A\mathcal{A}的任意1个非平凡不变子空间WW都有AW\mathcal{A}\,|\,W可对角化
    在这里插入图片描述

    (3)最小多项式与不可对角化的线性变换:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    \quad\\\quad
    附录.利用命题12的推论1确定可对角化的线性变换的不变子空间的结构

    命题13:设A\mathcal{A}是域FFnn维线性空间VV上的线性变换,如果A\mathcal{A}可对角化,且λ1,λ2...λsλ_1,λ_2...λ_sA\mathcal{A}的所有不同的特征值,那么A\mathcal{A}的任一非平凡不变子空间WWW=(Vλj1W)(Vλj2W)...(VλjrW)W=(V_{λ_{j_1}}∩W)\oplus(V_{λ_{j_2}}∩W)\oplus...\oplus(V_{λ_{j_r}}∩W)其中λj1,λj2...λjrλ_{j_1},λ_{j_2}...λ_{j_r}A\mathcal{A}rr个不同的特征值,并且对于Vλji(i=1,2...s)V_{λ_{j_i}}\,(i=1,2...s),存在A\mathcal{A}的不变子空间UjrU_{j_r},使得Vλji=(VλjiW)UλjiV_{λ_{j_i}}=(V_{λ_{j_i}}∩W)\oplus U_{λ_{j_i}}
    在这里插入图片描述

    在这里插入图片描述
    命题14:设A\mathcal{A}是域FFnn维线性空间VV上的线性变换,则A\mathcal{A}可对角化当且仅当A\mathcal{A}的特征多项式在包含FF的代数封闭域中的全部nn个根(重根按重数计算)都在FF中,且对于A\mathcal{A}的任一不变子空间WW,都存在A\mathcal{A}的不变子空间作为WWVV中的补空间
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 针对称重仪表检测电路中输入与输出值之间存在非线性关系的特性,在比较了几种非线性校正方法的基础上,给出了一种易于微处理器实现的正交多项式的非线性校正方法,求取称重仪表检测电路的非线性特征,实现了称重仪表...
  • 1. 多项式扩展 解决欠拟合(代码) 我们可以使用线性回归模型来拟合数据,然而,在现实中,数据未必总是线性(或接近线性)的。当数据并非线性时,直接使用LinearRegression的效果可能会较差,产生欠拟合。 import...

    1. 尝试线性回归模型解决欠拟合(with codes)

    • 尝试用线性回归模型,来解决欠拟合问题,效果不好
      我们可以使用线性回归模型来拟合数据,然而,在现实中,数据未必总是线性(或接近线性)的。当数据并非线性时,直接使用LinearRegression的效果可能会较差,产生欠拟合。
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    
    mpl.rcParams["font.family"] = "SimHei"
    mpl.rcParams["axes.unicode_minus"] = False
    
    x = np.linspace(0, 10, 50)
    # 真实的数据分布。该分布是非线性的。
    y = x * np.sin(x)
    # np.newaxis 表示进行维度的扩展,可以认为是增加一个维度,该维度为1。
    # 此种方式也可以通过reshape方法来实现。
    X = x[:, np.newaxis]
    lr = LinearRegression()
    lr.fit(X, y)
    # 输出在训练集上的分值。查看线性回归LinearRegression在非线性数据集上的拟合效果。
    print(lr.score(X, y))
    # 将样本数据以散点图进行绘制。
    plt.scatter(x, y, c="g", label="样本数据")
    # 绘制预测值(模型的回归线)
    plt.plot(X, lr.predict(X), "r-", label="拟合线")
    plt.legend()
    plt.show()
    # 结果:R ^ 2值为0.05908132146396671,模型在训练集上表现非常不好,产生欠拟合。
    

    在这里插入图片描述

    程序解释

    是真实线,还没有加噪声。就是想看,非线性再线性上表现怎么样。
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    表示要进行维度的扩展
    可以认为是增加一个维度,该维度为1
    Why要增加一个维度?
    意味着x能否送到fit?不能
    一维不能
    在这里插入图片描述
    X要变成二维
    现在是 50,
    变成50,1
    之前是reshape
    现在变成
    在这里插入图片描述

    # x = np.linspace(0, 10, 50)
    # print(x.shape)
    # print(x[:, np.newaxis].shape)
    

    在这里插入图片描述

    习惯大写
    在这里插入图片描述
    欠拟合 是不涉及未知数据的,欠拟合是训练集相关
    跟未知数据无关

    Eg. 模拟题都做不好

    看下效果
    在这里插入图片描述
    将样本数据以散点图进行绘制

    真实值
    在这里插入图片描述
    还差一个预测值,就是一条回归线,模型的回归线。
    在这里插入图片描述
    Show()在jupyter里面可以不加,pycharm里面得加,这也是 sinx x

    综上看,这个拟合效果不好。所以线性回归 对非线性 拟合效果不好。相当于蒙。

    因为线性回归是直的,在训练集上表现不好,产生欠拟合现象,R2R^{2} 值很低。

    2. 欠拟合怎么办?引入多项式扩展

    此时,我们可以尝试使用多项式扩展来进行改进。
    多项式扩展,可以认为是对现有数据进行的一种转换,通过将数据映射到更高维度的空间中,该模型就可以拟合更广泛的数据。
    假设,我们有如下的二元线性模型:

    y^=w0+w1x1+w2x2\hat{y} = w_{0} + w_{1}x_{1} + w_{2}x_{2}

    如果该模型的拟合效果不佳,我们就可以对该模型进行多项式扩展。例如,我们进行二项式扩展(也可以进行更高阶的扩展),结果为:

    y^=w0+w1x1+w2x2+w3x1x2+w4x12+w5x22\hat{y} = w_0 + w_1 x_1 + w_2 x_2 + w_3 x_1 x_2 + w_4 x_1^2 + w_5 x_2^2

    当进行多项式扩展后,我们就可以认为,模型由以前的直线变成了曲线。从而可以更灵活的去拟合数据。

    3 多项式拟合的应用,仍然变为线性模型

    经过多项式扩展后,我们依然可以使用之前的线性回归模型去拟合数据。这是因为,我们可以假设:
    z=[x1,x2,x1x2,x12,x22]z = [x_1, x_2, x_1 x_2, x_1^2, x_2^2]

    这样,之前的模型就会变成:
    y^=w0+w1z1+w2z2+w3z3+w4z4+w5z5\hat{y} = w_0 + w_1 z_1 + w_2 z_2 + w_3 z_3 + w_4 z_4 + w_5 z_5
    从而,我们依然可以认为,这还是一种线性模型

    线性回归本身解决不了,可以多项式扩展
    多元线性回归 是直的 是一个面
    在这里插入图片描述

    怎么进行多项式扩展?扩展到几阶?
    回顾什么是线性回归模型?

    1. 图像是直的
    2. 特征的最高次项是1
      先进行直接的多项式扩展:

    在这里插入图片描述
    二维变为五维,在空间中张开了,想象…

    一维 线
    二维 平面
    三维 超平面

    多项式扩展,把它由一维的线变为面,再变为超平面。

    扩展是怎么来的?扩展到几阶?
    所有的特征任意组合:

    在这里插入图片描述

    w是几不重要,b就是w

    4. 多项式转换规则 PolynomialFeatures

    我们可以使用sklearn中提供的PolynomialFeatures类来实现多项式扩展。通过powers_属性可以获取扩展之后每个输入特征的指数矩阵。指数矩阵的形状为[输出特征数, 输入特征数]。powers_[i, j]表示第i个输出特征中,第j个输入特征的指数值。

    例如,如果输入样本的特征数为2,多项式扩展阶数为2,则指数矩阵为:
    powers=[001001201102]powers_ = \begin{bmatrix} 0 &amp; 0\\ 1 &amp; 0\\ 0 &amp; 1\\ 2 &amp; 0\\ 1 &amp; 1\\ 0 &amp; 2 \end{bmatrix}

    多项式转换,其实就是将输入特征转换成输出特征。矩阵的每行对应每个输出特征,每列对应每个输入特征的指数,例如,对于两个输入特征x1x2x_1与x_2来讲,多项式转换之后的值为:

    [x10x20, x11x20, x10x21, x12x20, x11x21, x10x22][x_1^0x_2^0,\ x_1^1x_2^0,\ x_1^0x_2^1,\ x_1^2x_2^0,\ x_1^1x_2^1,\ x_1^0x_2^2]

    即:

    [1, x1, x2, x12, x1x2, x22][1,\ x_1,\ x_2,\ x_1^2,\ x_1 x_2,\ x_2^2]

    以前的非线性回归,还能适用吗?将Z1 = x1 … Z5,带入上面的公式。如下图:
    在这里插入图片描述
    y_hat又变成线性模型了,之前的线性回归模型,对多项式扩展之后的方程同样能够适用。
    尽管是最高次项,只要经过转换,仍然能够进行适用。
    可以假设,所以可以用linearregresstion处理多项式。
    以前2个特征,现在是5个特征的超平面,拟合能力更强。

    多项式特征,这样一个类 ,可以实现一个多项式扩展,在以前的特征上转换。
    从低维的空间映射到高维的空间。

    拟合之后,有powers属性,下划线。得到一个矩阵,输出的特征的数量。以及每一个输入特征的,扩展的时候没有必要自己去数,如何扩展咱么得知道细节是如何扩展。

    Powers 扩展后 每一个特征的 指数;Power_可以看成二维数组
    形状。
    每一个输入特征都会带指数;每一列 特征的指数值。
    在这里插入图片描述
    输入特征: 转换之前的特征数,因为我们现在要实现多项式转换。
    在这里插入图片描述
    在这里插入图片描述
    其实转换规则就是:多项式扩展
    以前 2个特征 现在扩展到5个特征 不考虑截距
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    化简 第一个是1

    二维 输入特征 变成 五维输出特征
    在这里插入图片描述

    5. 多项式扩展的规则(with codes)

    每个输入特征分别带有一个指数(指数值为非负整数),然后让指数之间进行任意可能的组合,但要保证所有的指数之和不能大于扩展的阶数。

    
    # 类似PolynomialFeatures这样功能的类(数据预处理),所有的转换方法都叫做transform。
    # 拟合与转换可以同时进行,方法名称都叫做fit_transform。
    
    import numpy as np
    # sklearn.preprocessing 该模块提供数据预处理的相关功能。
    # PolynomialFeatures多项式扩展类,可以对模型进行n阶扩展。从而可以解决欠拟合问题。
    from sklearn.preprocessing import PolynomialFeatures
    
    X = np.array([[1, 2], [3, 4]])
    # X = np.array([[1, 2, 3], [3, 4, 5]])
    # 定义多项式扩展类,参数指定要扩展的阶数。
    poly = PolynomialFeatures(2)
    # 拟合模型,计算power_的值。
    # poly.fit(X)
    # 对数据集X进行多项式扩展,即进行多项式转换。
    # r = poly.transform(X)
    # 我们可以令fit与transofrm两步一起完成。
    r = poly.fit_transform(X)
    
    print("转换之后的结果:")
    print(r)
    print("指数矩阵:")
    # 指数矩阵,形状为(输出特征数,输入特征数)。
    print(poly.powers_)
    print(f"输入的特征数量:{poly.n_input_features_}")
    print(f"输出的特征数量:{poly.n_output_features_}")
    
    # 根据power_矩阵,自行计算转换结果。
    # 循环获取X中的每一个样本。
    for x1, x2 in X:
        for e1, e2 in poly.powers_:
            print(x1 ** e1 * x2 ** e2, end="\t")
        print()
    

    在这里插入图片描述

    程序解释

    新的 模块 sklern.preprocessing 数据预处理的模块
    多项式扩展 相当于 数据转换 相当于 数据预处理
    Metics类: 提供 模型评估 的类
    多项式扩展类

    2行2列 1,2是一个样本
    1 x1 2 x2
    一列是一个特征
    在这里插入图片描述
    定义了一个多项式对象
    不要用predict, 这个模型不是负责预测的 Poly
    把转换的结果交给别的模型进行预测

    只有x没有y
    拟合 是干什么 试求powers
    扩展的阶数不同 powers数量不一样
    Fit就是根据传递额阶数 计算powers的值
    在这里插入图片描述
    有两个样本
    转换成两个
    根据
    在这里插入图片描述

    在这里插入图片描述
    指数矩阵就是 形状为
    在这里插入图片描述
    在这里插入图片描述
    换成3阶
    在这里插入图片描述
    优化:
    合二为一
    在这里插入图片描述
    poly.fit(X)
    r = poly.fit_transform(X)

    再来,根据power矩阵,自行计算转换结果

    拆包
    X1 x2

    对powers矩阵循环
    在这里插入图片描述
    e1次幂,还是指数后,乘积,只不过使用循环
    结合性,乘方有优先性
    通用上的预处理规则,Fit就是计算转换的规则
    没有powers数组,是转换不了的;而这个数组,是通过数组拟合出来的

    多项式如何进行转换?
    扩展就是多项式转换?

    6. 应用多项式扩展解决欠拟合问题(with codes)

    对之前未解决的欠拟合问题,应用多项式扩展来解决
    现在,就让我们对之前的程序来进行多项式扩展,尝试解决欠拟合问题。

    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    from sklearn.preprocessing import PolynomialFeatures
    
    mpl.rcParams["font.family"] = "SimHei"
    mpl.rcParams["axes.unicode_minus"] = False
    
    x = np.linspace(0, 10, 50)
    y = x * np.sin(x)
    X = x[:, np.newaxis]
    figure, ax = plt.subplots(2, 3)
    figure.set_size_inches(18, 10)
    ax = ax.ravel()
    
    # n为要进行多项式扩展的阶数。
    for n in range(1, 7):
        # 注意:多项式1阶扩展,相当于没有扩展(没有变化)。
        poly = PolynomialFeatures(degree=n)
        X_transform = poly.fit_transform(X)
        # 注意:多项式扩展之后,我们依然可以将数据视为线性的,因此,我们还是可以通过之前的
        # LinearRegression来求解问题。
        lr = LinearRegression()
        # 使用多项式扩展之后的数据集来训练模型。
        lr.fit(X_transform, y)
        ax[n - 1].set_title(f"{n}阶,拟合度:{lr.score(X_transform, y):.3f}")
        ax[n - 1].scatter(x, y, c="g", label="样本数据")
        ax[n - 1].plot(x, lr.predict(X_transform), "r-", label="拟合线")
        ax[n - 1].legend()
    

    在这里插入图片描述
    在这里插入图片描述

    程序解释

    生成数据集 50个点
    创建y 非线性
    把x变成二维的,使用np.newaxis
    50,
    50,1

    接下来进行可视化的绘图操作
    看一下多项式扩展的效果好不好
    R^2值怎么样
    数据如何进行的分布,线靠的近不近

    阶数很关键,画6个子图 每个阶数的拟合情况
    每一个阶的r^2
    Subplots子绘图区域
    画布大小 figure.set 因为2 3 宽
    Ravel() 变成一层循环,之前是二维
    N表示要扩展的阶数
    在这里插入图片描述
    在这里插入图片描述
    N=1 1阶 数组是0开始 所以n-1
    标题
    拟合度 score求解
    把x_transform放进去
    把样本数据画一下,看拟合情况
    散点画完了,画预测线, x传进来,需要有一个对应的y值

    特征多了,也就是复杂度越来越多

    通过多项式扩展 解决了欠拟合的问题

    Why能这么做?
    输入的时候特征比较少,所以咱么就给它映射到更高维的空间(超平面)
    咱们拟合的能力就会变强

    维度越高,越能捕获更多的数据
    二维图来看,线的弯曲程度越高

    7. 引入流水线方法(with codes)

    在上例中,我们使用多项式对训练数据进行了转换(扩展),然后使用线性回归类(LinearRegression)在转换后的数据上进行拟合
    可以说,这是两个步骤。我们虽然可以分别去执行这两个步骤,然而,当数据预处理的工作较多时,可能会涉及更多的步骤(例如标准化,编码等),此时再去一一执行会显得过于繁琐。

    流水线(Pipeline类)可以将每个评估器视为一个步骤,然后将多个步骤作为一个整体而依次执行,这样,我们就无需分别执行每个步骤。流水线中的所有评估器(除了最后一个评估器外)都必须具有转换功能(具有transform方法)。

    流水线具有最后一个评估器的所有方法。当调用某个方法f时,会首先对前n - 1个(假设流水线具有n个评估器)评估器执行transform方法(如果调用的f是fit方法,则n-1个评估器会执行fit_transform方法),对数据进行转换,然后在最后一个评估器上调用f方法。

    例如,当在流水线上调用fit方法时,将会依次在每个评估器上调用fit方法,然后再调用transform方法,接下来将转换之后的结果传递给下一个评估器,直到最后一个评估器调用fit方法为止(最后一个评估器不会调用transform方法)。而当在流水线上调用predict方法时,则会依次在每个评估器上调用transform方法,最后在最后一个评估器上调用predict方法。

    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    from sklearn.preprocessing import PolynomialFeatures
    # sklearn库提供的流水线类,作用就是将多个评估器打包成一个整体,这样,当我们对流水线进行某些操作时,
    # 流水线内的所有评估器都会执行相关的操作。这样,就可以作为一个整体而执行,无需我们分别对每个评估器
    # 单独进行执行。
    from sklearn.pipeline import Pipeline
    
    mpl.rcParams["font.family"] = "SimHei"
    mpl.rcParams["axes.unicode_minus"] = False
    
    x = np.linspace(0, 10, 50)
    y = x * np.sin(x)
    X = x[:, np.newaxis]
    # 定义流水线中的每一个评估器。
    # 格式为一个含有元组的列表。每个元组定义流水线中的一个步骤。
    # 元组中含有两个元素。前面的元素为流水线步骤的名称,后面的
    # 元素为该流水线步骤处理的对象。
    estimators = [("poly", PolynomialFeatures()), ("lr", LinearRegression())]
    # 创建流水线对象,将评估器数组传递给流水线类。
    pipeline = Pipeline(estimators)
    # 流水线的steps属性,可以返回流水线所有的步骤。包括步骤名与该步骤的处理对象。
    # pipeline.steps
    # 流水线的named_steps属性,与steps属性相似,只是类型不同(字典类型)。
    # pipeline.named_steps
    # 设置流水线对象的参数信息。
    # 如果需要为流水线的某个步骤处理对象设置相关的参数,则参数名为:步骤名__处理对象参数。
    pipeline.set_params(poly__degree=8)
    # 获取流水线支持设置的所有参数。
    # print(pipeline.get_params())
    
    # 在流水线对象上调用fit方法,相当于对除了最后一个评估器之外的所有评估器调用fit_transform方法,
    # 然后最后一个评估器调用fit方法。
    pipeline.fit(X, y)
    # 流水线对象具有最后一个评估器的所有方法。
    # 当通过流水线对象,调用最后一个评估器的方法时,会首先调用之前所有评估器的transform方法。
    score = pipeline.score(X, y)
    plt.title(f"8阶,拟合度:{score:.3f}")
    plt.scatter(X, y, c="g", label="样本数据")
    # 当调用流水线对象的predict方法时,除最后一个评估器外,其余评估器会调用transform方法,然后,最后
    # 一个评估器调用predict方法。
    plt.plot(X, pipeline.predict(X), "r-", label="拟合线")
    

    在这里插入图片描述

    程序解释

    第一步:
    使用多项式进行扩展。

    第二步:
    使用线性回归类,对多项式扩展之后的结果,进行训练,
    预测结果。

    但是再实际的机器学习过程中,可能更复杂
    数据预处理,很多步骤
    流水线 封罐头 很多步 都能作为一个整体进行操作

    在这里插入图片描述

    这个操作太繁琐
    直接打包进 流水线,然后流水线调用fit就行了,流水线除了最后一个调用fit其他都会调用fit transform

    最后是predict,不是fit
    哪怕不是进行流水线,我们永远都是在训练集上进行fit,
    我们现在调用predict的,实在测试集上,不要再训练集上fit

    测试

    在这里插入图片描述

    看一下流水线的程序
    之前是分成2步的,现在我们分成一步实现
    新库
    在这里插入图片描述

    执行什么操作呢?
    定义流水线 里面的 每一个评估器
    是一个含有元组的列表
    后面是评估期的对象
    名字 步骤要处理的对象
    创建流水线对象 把相关评估器数组 传递给流水线内

    步骤
    在这里插入图片描述

    名字 对象 顺便把默认的参数也显示出来
    单独的想看流水线的处理对象,用这种 字典的方法
    在这里插入图片描述

    每个步骤有了,获得相关步骤就很简单
    在这里插入图片描述

    在这里插入图片描述

    两部一起完成了
    在这里插入图片描述

    在这里插入图片描述

    之前是 转换之后的
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    流水线的类 pipeline 很有用,放到一起,统一执行。
    优势:
    1.放到一起
    2. 可以设置参数

    展开全文
  • 给出两个多项式: 大家都很清楚多项式相加,即为相同指数项对应相加。那我们如何使用程序来描述两个多项式相加呢?大家首先想到的是用数组描述,...这种形式的话,0项太多,上面的这种办法就会很冗余,白白浪费空间...

    给出两个多项式:

    大家都很清楚多项式相加,即为相同指数项对应相加。那我们如何使用程序来描述两个多项式相加呢?大家首先想到的是用数组描述,多项式的指数使用下标来表示,前面的系数为对应数组中的值。f1(x)表示如下:

    f2(x)表示如下:

    其实只要写个for循环,相同下标的相加即可,非常简单。下面问题来了,如果面对的多项式是类似

    这种形式的话,0项太多,上面的这种办法就会很冗余,白白浪费空间。因此需要采取另外的办法来描述。上面的方式问题出在我们使用数组下标用来描述指数,当指数很大的时,就会出现很多系数为0项,我们的想法是不要0项,只将非0项存储起来进行描述。因此我们可以将系数和指数绑定到一起作为一个整体,类似这种方式(系数,指数)。还是上面两个多项式,采用结构体+数组的方式进行描述。f1(x)表示如下:


    f2(x)表示如下:

    其中指数是按照由大到小的顺序存储。大家可以看到指数很大的时候,也不会浪费存储空间。下面我们用C程序来实现

    #include<stdio.h>
    #define F1_LENGTH 3
    #define F2_LENGTH 3
    struct Node
    {
    	int coef;
    	int expon;
    
    };
    struct Node f1_nodes[3];
    struct Node f2_nodes[3];
    void main(){
    	f1_nodes[0].coef = 3;
    	f1_nodes[0].expon = 4;
    
    	f1_nodes[1].coef = 4;
    	f1_nodes[1].expon = 2;
    
    	f1_nodes[2].coef = 1;
    	f1_nodes[2].expon = 0;
    
    	f2_nodes[0].coef = 5;
    	f2_nodes[0].expon = 3;
    
    	f2_nodes[1].coef = 4;
    	f2_nodes[1].expon = 2;
    
    	f2_nodes[2].coef = 8;
    	f2_nodes[2].expon = 0;
    	size_t i = 0, j = 0;
    	for (; i < F1_LENGTH && j < F2_LENGTH;)
    	{
    		if (f1_nodes[i].expon > f2_nodes[j].expon){
    
    			printf("(%d,%d) ", f1_nodes[i].coef, f1_nodes[i].expon);
    			i++;
    		
    		}else if (f1_nodes[i].expon < f2_nodes[j].expon){
    			printf("(%d,%d) ", f2_nodes[j].coef, f2_nodes[j].expon);
    			j++;
    		}else
    		{
    			printf("(%d,%d) ", f1_nodes[i].coef+f2_nodes[j].coef, f2_nodes[j].expon);
    			i++;
    			j++;
    		}
    	}
    	while (i<F1_LENGTH)
    	{
    		printf("(%d,%d) ", f1_nodes[i].coef, f1_nodes[i].expon);
    		i++;
    	}
    	while (j<F2_LENGTH)
    	{
    		printf("(%d,%d) ", f2_nodes[j].coef, f2_nodes[j].expon);
    		j++;
    	}
    	getchar();
    }
    

      通过上面的方式即可完成多项式的计算,但是上面的方式依然不是特别好,因为数组的大小是固定的,没办法动态改变,接下来我们使用链表的方式来存储非零项,定义如下数据类型:

    typedef struct Node *PolyLink;
    struct Node
    {
    int coef;
    int expon;
    PolyLink link;
    
    };
    

      f1和f2链表存储形式为:

    C语言实现如下:

    #include<stdio.h>
    #include <malloc.h>
    typedef struct Node *PolyLink;
    struct Node
    {
    	int coef;
    	int expon;
    	PolyLink link;
    };
    void main(){
    	PolyLink p,p1;
    	PolyLink head1 = (PolyLink)malloc(sizeof(struct Node));
    	p = head1;
    	p->coef = 3;
    	p->expon = 4;
    	p->link = (PolyLink)malloc(sizeof(struct Node));
    
    	p = p->link;
    	p->coef = 4;
    	p->expon = 2;
    	p->link = (PolyLink)malloc(sizeof(struct Node));
    
    	p = p->link;
    	p->coef = 1;
    	p->expon = 0;
    	p->link = NULL;
    
    	PolyLink head2 = (PolyLink)malloc(sizeof(struct Node));
    	p = head2;
    	p->coef = 5;
    	p->expon = 3;
    	p->link = (PolyLink)malloc(sizeof(struct Node));
    
    	p = p->link;
    	p->coef = 4;
    	p->expon = 2;
    	p->link = (PolyLink)malloc(sizeof(struct Node));
    
    	p = p->link;
    	p->coef = 8;
    	p->expon = 0;
    	p->link = NULL;
    
    	while(head1 != NULL && head2 != NULL){
    
    		if (head1->expon > head2->expon){
    			printf("(%d,%d) ", head1->coef, head1->expon);
    			p1 = head1;
    			head1 = head1->link;
    			free(p1);
    		}
    		else if (head1->expon < head2->expon){
    
    			printf("(%d,%d) ", head2->coef, head2->expon);
    			p1 = head2;
    			head2 = head2->link;
    			free(p1);
    		
    		}
    		else{
    			printf("(%d,%d) ", head1->coef+head2->coef, head2->expon);
    			p1 = head1;
    			head1 = head1->link;
    			free(p1);
    			p1 = head2;
    			head2 = head2->link;
    			free(p1);
    		
    		}
    	
    	}
    	while (head1 != NULL){
    		printf("(%d,%d) ", head1->coef, head1->expon);
    		p1 = head1;
    		head1 = head1->link;
    		free(p1);
    	}
    	while (head2 != NULL){
    		printf("(%d,%d) ", head2->coef, head2->expon);
    		p1 = head2;
    		head2 = head2->link;
    		free(p1);
    
    	}
    	getchar();
    
    }
    

    今天的分享就到这里,下一篇继续分析。如果大家觉得还可以呀,记得推荐呦。

    欢迎大家支持我公众号:

     

    展开全文
  • 详见邱维声《高等代数(下)》第267页
  • 尝试用线性回归模型,来解决欠拟合问题,效果不好 我们可以使用线性回归模型来拟合数据,然而,在现实中,数据未必总是线性(或接近线性)的。当数据并非线性时,直接使用LinearRegression的效果可能会较差,产生欠...
  • 线性空间与线性变换

    2021-02-22 22:07:19
    1.1线性空间(广义的概念) 如何证明一个向量集合是线性空间? 1.首先问下什么是线性空间? 2.如何表示该集合中的全部向量? 知识点1 首先我们需要知道什么是空间?空间其实就是向量的集合,而什么是线性空间呢? ...
  • 寻找零化多项式的一种方法 摘自邱维声《高等代数(下)》Chapter 10.1, Page 270 的最小多项式 分块多角化矩阵线
  • 线性空间和线性变换基本概念

    千次阅读 2016-09-09 13:58:28
    线性空间的元素统称为“向量”,但它可以是通常的向量(有序数组),也可以是矩阵、多项式、函数等。 线性空间对所定义的加法及数乘运算封闭,且满足八条规则中的任意一条; 欧式空间的引入:  线性空间中,向量...
  • 第三章-3.2多项式空间多项式

    千次阅读 2018-06-05 15:01:42
    一,有序齐次单项式空间2阶有序齐次单项式: 由此推广,可以得到d阶的有序齐次单项式: 由上式可知,如果n和d数据过大时,内积的运算量将会非常大。我们观察二阶有序齐次单项式,在H中做内积有: 我们定义函数:...
  • 高等代数研究的主要对象是线性空间,数域$\mathbb{F}$上所有次数小于等于$n-1$的一元多项式构成一个线性空间,记为$V=\mathbb{F}[x]_{n}$,那么显然$\dim V=n$,并且容易知道已有一组基为$$1,x,x^{2},\dots,x^{n-1}$$ ...
  • 前两篇博客介绍的是线性回归,线性回归的一个问题是有可能出现欠拟合现象,解决欠拟合其中的一个方法是本文的多项式扩展,还有一个是后面的博客会介绍的局部加权线性回归(Locally Weighted Linear Regression,LWLR...
  • 多项式扩展,可以认为是对现有数据进行的一种转换,通过将数据映射到更高维度的空间中,该模型就可以拟合更广泛的数据。 需注意:多项式拟合的应用,仍然变为线性模型 下面是多项式拓展的实现 # 引入所需要的全部包 ...
  • 【将线性回归模型转换为曲线——多项式回归】 之前都是将解释变量和目标值之间的关系假设为线性的,如果假设不成立,可以添加多项式选项,转换为多项式回归。 【sklearn实现多项式回归】 1、PoltnomialFeatures...
  • 《矩阵论》学习笔记:第一章 线性空间与线性变换 文章目录《矩阵论》学习笔记:第一章 线性空间与线性变换一、线性空间二、线性变换及其性质 第一章 线性空间与线性变换一. 线性空间二. 线性变换及其性质三. 两个...
  • 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出...
  • 【矩阵论】线性空间与线性变换(1)

    千次阅读 多人点赞 2020-09-30 16:53:31
    《矩阵论》东南大学公开课随课笔记-线性空间与变换(1)
  • scikit-learn : 线性回归,多元回归,多项式回归

    万次阅读 多人点赞 2016-06-17 23:36:53
    使用scikit-learn学习线性回归,多元回归,多项式回归
  • 在一个月之前我已经对有限元方法数学理论之分片一次多项式空间逼近理论进行了讲解,由于中间有点事情所以对二次多项式情况没有进行解说,下面开始正文. 其实思想跟一次多项式的情况一样,只不过这里在一个小区间上...
  • 原文链接:线性代数的本质–对线性空间、向量和矩阵的直觉描述 作者:JustDoIT:博客rss订阅地址 在网上看到的一篇文章,看了以后感触颇深。 线性代数课程,无论你从行列式入手还是直接从矩阵入手,从一开始就充斥着...
  • 有关线性空间的基、维数、坐标的相关定义,以及引出的一些定理。
  • 5 多项式

    2020-12-16 19:53:41
    文章目录5.1一元多项式代数 5.1一元多项式代数 ...这章暂时中止对线性空间、线性变换的讨论转而研究多项式 多项式理论仅对进一步研究线性代数是必要的, 且在数学的其他分支领域也有极其重要的应用 ...
  • 多项式 什么是多项式 满足如下条件的表达式才是多项式: ...线性多项式 多项式中的每一项总次数要么是1,要么是0 3x + 7y //是线性的 5x + 8y + 2 //线性的 7xy + 9x + 10y + 3 //非线性...
  • 广义线性模型.多项式分布.softmax

    千次阅读 2016-07-28 15:28:27
    从而得到不同的模型,广义线性模型正式将指数分布族中的所有成员(每个成员正好有一个这样的联系)都作为线性模型的扩展,通过各种非线性的连接函数将线性函数映射到其它空间从而大大扩大了线性模型可解决的问题。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,698
精华内容 9,079
关键字:

多项式线性空间