机器学习-10-线性回归与最小二乘法

回归是监督学习的一个重要问题,回归用于预测输入变量和输出变量之间的关系。回归模型是表示输入变量到输出变量之间映射的函数。回归问题的学习等价于函数拟合:使用一条函数曲线使其很好的拟合已知函数且很好的预测未知数据。回归问题按照输入变量的个数可以分为一元回归和多元回归;按照输入变量和输出变量之间关系的类型,可以分为线性回归和非线性回归。

再写一遍:一可以加深理解和记忆,二练习latex语法,三后面latex公式直接从这里套用。
latex符号大全

  • 求和符号、上标、下标、左括号、右括号
  • 分数、偏导符号
  • 上横线\overline{x} x ‾ \overline{x} x
  • 下划线\underline{x} x ‾ \underline{x} x
  • 帽子\hat{x} x ^ \hat{x} x^
  • 循环小数\dot{x} x ˙ \dot{x} x˙

一、 最小二乘法-公式推导

一元回归

在这里插入图片描述

  1. 设拟合直线的方程式为: y = a + b x y=a+bx y=a+bx
$y=a+bx$
  1. 现有样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x n , y n ) (x_1,y_1),(x_2,y_2)...(x_n,y_n) (x1,y1),(x2,y2)...(xn,yn)
$(x_1,y_1),(x_2,y_2)...(x_n,y_n)$
  1. d i d_i di为样本点到拟合线的距离,即误差: d i = y i − ( a + b x i ) d_i=y_i−(a+bx_i) di=yi(a+bxi)
$d_i=y_i−(a+bx_i)$
  1. D D D 为差方和(为什么要取平方 => 防止正负相互抵消)
    D = ∑ i = 1 n d i 2 = ∑ i = 1 n ( y i − a − b x i ) 2 D = \sum_{i=1}^{n} d_{i}^{2} = \sum_{i=1}^{n}\left(y_{i}-a-bx_{i}\right)^{2} D=i=1ndi2=i=1n(yiabxi)2
$$
D = \sum_{i=1}^{n} d_{i}^{2} = \sum_{i=1}^{n}\left(y_{i}-a-bx_{i}\right)^{2}
$$
  1. 我们要求 D D D最小,就是求 D D D的最小值。
  • 最小值(一阶导数等于0,二阶大于等于0)
  • 最大值(一阶导数等于0,二阶小于等于0)
  • 因为 D D D为平方和,所以求一阶导数为0时,就满足 D D D最小

解答为什么求偏导

偏差平方和,恒大于等于0.同时可以知道,这玩意是不可能达到最大值的(只要足够偏离的话,那肯定是越来越大的),因此在偏导数为0时取到的是最小值咯~(取极值的条件嘛,偏导数为0)

对a求一阶偏导
∂ D ∂ a = ∑ i = 1 n 2 ( y i − a − b x i ) ( − 1 ) = − 2 ∑ i = 1 n ( y i − a − b x i ) = − 2 ( ∑ i = 1 n y i − ∑ i = 1 n a − b ∑ i = 1 n x i ) = − 2 ( n y ˉ − n a − n b x ˉ ) \begin{aligned} \frac{\partial D}{\partial a} &=\sum_{i=1}^{n} 2\left(y_{i}-a-b x_{i}\right)(-1) \\ &=-2 \sum_{i=1}^{n}\left(y_{i}-a-b x_{i}\right) \\ &=-2\left(\sum_{i=1}^{n} y_{i}-\sum_{i=1}^{n} a-b \sum_{i=1}^{n} x_{i}\right) \\ &=-2(n \bar{y}-n a-n b \bar{x}) \end{aligned} aD=i=1n2(yiabxi)(1)=2i=1n(yiabxi)=2(i=1nyii=1nabi=1nxi)=2(nyˉnanbxˉ)

$$
\begin{aligned}
\frac{\partial D}{\partial a} &=\sum_{i=1}^{n} 2\left(y_{i}-a-b x_{i}\right)(-1) \\
&=-2 \sum_{i=1}^{n}\left(y_{i}-a-b x_{i}\right) \\
&=-2\left(\sum_{i=1}^{n} y_{i}-\sum_{i=1}^{n} a-b \sum_{i=1}^{n} x_{i}\right) \\
&=2(n \bar{y}-n a-n b \bar{x})
\end{aligned}
$$

对b求一阶偏导
∂ D ∂ b = ∑ i = 1 n 2 ( y i − a − b x i ) ( − x i ) = − 2 ∑ i = 1 n ( x i y i − a x i − b x i 2 ) = − 2 ( ∑ i = 1 n x i y i − a ∑ i = 1 n x i − b ∑ i = 1 n x i 2 ) = − 2 ( ∑ i = 1 n x i y i − a n x ‾ − b ∑ i = 1 n x i 2 ) \begin{aligned} \frac{\partial D}{\partial b} &=\sum_{i=1}^{n}2\left(y_i-a-bx_i\right)(-x_i)\\ &=-2\sum_{i=1}^{n}\left(x_iy_i-ax_i-bx_i^2\right)\\ &=-2\left(\sum_{i=1}^{n}x_iy_i-a\sum_{i=1}^{n}x_i-b\sum_{i=1}^{n}x_i^2\right)\\ &=-2\left(\sum_{i=1}^{n}x_iy_i-an\overline{x}-b\sum_{i=1}^{n}x_i^2\right) \end{aligned} bD=i=1n2(yiabxi)(xi)=2i=1n(xiyiaxibxi2)=2(i=1nxiyiai=1nxibi=1nxi2)=2(i=1nxiyianxbi=1nxi2)

$$
\begin{aligned}
\frac{\partial D}{\partial b} &=\sum_{i=1}^{n}2\left(y_i-a-bx_i\right)(-x_i)\\
&=-2\sum_{i=1}^{n}\left(x_iy_i-ax_i-bx_i^2\right)\\
&=-2\left(\sum_{i=1}^{n}x_iy_i-a\sum_{i=1}^{n}x_i-b\sum_{i=1}^{n}x_i^2\right)\\
&=-2\left(\sum_{i=1}^{n}x_iy_i-an\overline{x}-b\sum_{i=1}^{n}x_i^2\right)
\end{aligned}
$$
  1. 令偏导等于 0
    − 2 ( n y ‾ − n a − n b x ‾ ) = 0 -2(n\overline{y}-na-nb\overline{x})=0 2(nynanbx)=0 得:

= > => =>
a = y ‾ − b x ‾ (1) a=\overline{y}-b\overline{x} \tag{1} a=ybx(1)

$$
a=\overline{y}-b\overline{x} \tag{1}
$$

− 2 ( ∑ i = 1 n x i y i − a n x ‾ − b ∑ i = 1 n x i 2 ) = 0 -2\left(\sum_{i=1}^{n}x_iy_i-an\overline{x}-b\sum_{i=1}^{n}x_i^2 \right) = 0 2(i=1nxiyianxbi=1nxi2)=0,将公式(1)代入得:

= > ∑ i = 1 n x i y i − n x ˉ y ˉ + n b x ˉ 2 − b ∑ i = 1 n x i 2 = 0 =>\sum_{i=1}^{n} x_{i} y_{i}-n \bar{x} \bar{y}+n b \bar{x}^{2}-b \sum_{i=1}^{n} x_{i}^{2}=0 =>i=1nxiyinxˉyˉ+nbxˉ2bi=1nxi2=0

= > ∑ i = 1 n x i y i − n x ˉ y ˉ = b ( ∑ i = 1 n x i 2 − n x ˉ 2 ) =>\sum_{i=1}^{n} x_{i} y_{i}-n \bar{x} \bar{y}=b\left(\sum_{i=1}^{n} x_{i}^{2}-n \bar{x}^{2}\right) =>i=1nxiyinxˉyˉ=b(i=1nxi2nxˉ2)

= > b = ∑ i = 1 n x i y i − n x ˉ y ˉ ∑ i = 1 n x i 2 − n x ˉ 2 (2) =>b=\frac{\sum_{i=1}^{n} x_{i} y_{i}-n \bar{x} \bar{y}}{\sum_{i=1}^{n} x_{i}^{2}-n \bar{x}^{2}} \tag{2} =>b=i=1nxi2nxˉ2i=1nxiyinxˉyˉ(2)

$$
b=\frac{\sum_{i=1}^{n} x_{i} y_{i}-n \bar{x} \bar{y}}{\sum_{i=1}^{n} x_{i}^{2}-n \bar{x}^{2}} \tag{2}
$$

实在是,想偷个懒,还有这个斜杠删除线是怎么敲出来的
在这里插入图片描述

二、线性回归-公式推导

多元回归

1. 拟合平面

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2 hθ(x)=θ0+θ1x1+θ2x2
h θ ( x ) = ∑ i = 0 n θ i x i = θ T x h_\theta(x)=\sum_{i=0}^{n}\theta_ix_i=\theta^Tx hθ(x)=i=0nθixi=θTx

θ 0 \theta_0 θ0是偏置项, x = ( x 0 , x 1 , x 2 . . . x n ) x=(x_0,x_1,x_2 ... x_n) x=(x0,x1,x2...xn),为了满足 θ 0 \theta_0 θ0起作用, x 0 = 1 x_0=1 x0=1(相当于1式中省略了)。

在这里插入图片描述
红色的点表示真实值, 垂线与平面交点为预测值,高度差代表误差

2. 误差分析

真实值与预测值之间一定存在误差(用 ε \varepsilon ε 来表示误差)

$\varepsilon$ 

对于每一个样本 y ( i ) = θ T x ( i ) + ε ( i ) y^{(i)}=\theta^Tx^{(i)}+\varepsilon^{(i)} y(i)=θTx(i)+ε(i)

  • y ( i ) y^{(i)} y(i) 为真实值
  • θ T \theta^T θT 为参数矩阵
  • x ( i ) x^{(i)} x(i) 为第i条数据的属性矩阵
  • ε ( i ) \varepsilon^{(i)} ε(i) 为第i条数据所产生的误差,服从均值为 0 0 0 方差为 θ 2 \theta^2 θ2 的高斯分布(正太分布)
$y^{(i)}=\theta^Tx^{(i)}+\varepsilon^{(i)}$

高斯分布: 在高斯分布中, 越靠近0的位置, 产生的偏差越小, 出现的概率就越大; 越远离0的位置, 产生的偏差越 大, 出现的概率就越小。(最大似然估计就是从此处的概率得出, 此处越接近0, 概率p越大)
在这里插入图片描述

3. 误差与高斯分布-公式代换

在这里插入图片描述

4. 似然函数与对数似然

似然函数: 似然函数是根据样本去估计参数的值的一个函数, 即是由数据去计算参数的大小为多大时, 参数和我们的数据组合后更接近真实值。(总而言之, 似然函数就是为了求解参数的函数)

对数似然: 对数似然相对于似然函数的有点在于运算方便。似然函数求取的方法是迭乘, 数字较大时会很不方便;对数似然求取的方法是迭加。(相比于似然函数而言, 对数似然较为实用)
在这里插入图片描述
在这里插入图片描述

5. 极大似然估计

极大似然估计: 极大似然估计即 L ( θ ) L(θ) L(θ) 或 log L ( θ ) L(θ) L(θ) 越大越好, 那么下式越小越好,这就是最小二乘法的工作。
J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 J(θ)=21i=1m(hθ(x(i))y(i))2

矩阵转置公式:

  • ( A T ) T = A (A^T)^T=A (AT)T=A
  • ( A + B ) T = A T + B T (A+B)^T=A^T+B^T (A+B)T=AT+BT
  • ( λ A ) T = λ A T (\lambda A)^T=\lambda A^T (λA)T=λAT
  • ( A B ) T = B T A T (AB)^T=B^TA^T (AB)T=BTAT
  • B T A T = ( A B ) T B^TA^T=(AB)^T BTAT=(AB)T

矩阵(向量)求导公式:
∂ A x ⃗ ∂ x ⃗ = A T ∂ A x ⃗ ∂ x ⃗ T = A ∂ ( x ⃗ T A ) ∂ x ⃗ = A ∂ y ∂ x ⃗ = ∂ ( x ⃗ T A x ⃗ ) ∂ x ⃗ = ( A T + A ) x ⃗ = A x ⃗ + A T x ⃗ A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] x ⃗ = ( x 1 x 2 ⋮ x n ) A ⋅ x ⃗ = ( a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n ⋮ a m 1 x 1 + a m 2 x 2 + ⋯ + a m n x n ) ∂ y ⃗ ∂ x ⃗ = ∂ A x ⃗ ∂ x ⃗ = [ a 11 a 21 ⋯ a m 1 a 12 a 22 ⋯ a m 2 ⋮ ⋮ ⋱ ⋮ a 1 n a 2 n ⋯ a m n ] = A T \begin{aligned} \frac{\partial A\vec{x}}{\partial \vec{x}}&=A^T\\ \\ \frac{\partial A\vec{x}}{\partial \vec{x}^T}&=A\\ \\ \frac{\partial (\vec{x}^T A)}{\partial \vec{x}}&=A\\ \\ \frac{\partial y}{\partial \vec{x}}=\frac{\partial(\vec{x}^TA\vec{x})}{\partial\vec{x}}&=(A^T+A)\vec{x}=A\vec x+A^T \vec x \end{aligned} \\ A=\left[\begin{array}{cccc} a_{11} & a_{12} & \cdots & a_{1 n} \\ a_{21} & a_{22} & \cdots & a_{2 n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m 1} & a_{m 2} & \cdots & a_{m n} \end{array}\right] \quad \vec{x}=\left(\begin{array}{c} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{array}\right) \quad A \cdot \vec{x}=\left(\begin{array}{c} a_{11} x_{1}+a_{12} x_{2}+\cdots+a_{1 n} x_{n} \\ a_{21} x_{1}+a_{22} x_{2}+\cdots+a_{2 n} x_{n} \\ \vdots \\ \\ a_{m 1} x_{1}+a_{m 2} x_{2}+\cdots+a_{m n} x_{n} \end{array}\right)\\ \frac{\partial\vec{y}}{\partial\vec{x}}= \frac{\partial A\vec{x}}{\partial\vec{x}}= \left[\begin{array}{cccc} a_{11} & a_{21} & \cdots & a_{m1}\\ a_{12} & a_{22} & \cdots & a_{m2}\\ \vdots & \vdots & \ddots & \vdots\\ a_{1n} & a_{2n} & \cdots & a_{mn} \end{array}\right]= A^T x Ax x TAx x (x TA)x y=x (x TAx )=AT=A=A=(AT+A)x =Ax +ATx A=a11a21am1a12a22am2a1na2namnx =x1x2xnAx =a11x1+a12x2++a1nxna21x1+a22x2++a2nxnam1x1+am2x2++amnxnx y =x Ax =a11a12a1na21a22a2nam1am2amn=AT

\begin{aligned}
\frac{\partial A\vec{x}}{\partial \vec{x}}&=A^T\\
\\
\frac{\partial A\vec{x}}{\partial \vec{x}^T}&=A\\
\\
\frac{\partial (\vec{x}^T A)}{\partial \vec{x}}&=A\\
\\
\frac{\partial y}{\partial \vec{x}}=\frac{\partial(\vec{x}^T\cdot{A}\cdot\vec{x})}{\partial\vec{x}}&=(A^T+A)\cdot \vec{x}
\end{aligned}
\\
A=\left[\begin{array}{cccc}
a_{11} & a_{12} & \cdots & a_{1 n} \\
a_{21} & a_{22} & \cdots & a_{2 n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m 1} & a_{m 2} & \cdots & a_{m n}
\end{array}\right] \quad \vec{x}=\left(\begin{array}{c}
x_{1} \\
x_{2} \\
\vdots \\
x_{n}
\end{array}\right) \quad A \cdot \vec{x}=\left(\begin{array}{c}
a_{11} x_{1}+a_{12} x_{2}+\cdots+a_{1 n} x_{n} \\
a_{21} x_{1}+a_{22} x_{2}+\cdots+a_{2 n} x_{n} \\
\vdots \\
\\
a_{m 1} x_{1}+a_{m 2} x_{2}+\cdots+a_{m n} x_{n}
\end{array}\right)\\
\frac{\partial\vec{y}}{\partial\vec{x}}=
\frac{\partial A\vec{x}}{\partial\vec{x}}=
\left[\begin{array}{cccc}
a_{11} & a_{21} & \cdots & a_{m1}\\
a_{12} & a_{22} & \cdots & a_{m2}\\
\vdots & \vdots & \ddots & \vdots\\
a_{1n} & a_{2n} & \cdots & a_{mn}
\end{array}\right]=
A^T

latex 矩阵写法
0 1 1 0 ( 0 − i i 0 ) [ 0 − 1 1 0 ] { 1 0 0 − 1 } ∣ a b c d ∣ ∥ i 0 0 − i ∥ \begin{gathered} \begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix} \quad \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix} \quad \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \quad \begin{Bmatrix} 1 & 0 \\ 0 & -1 \end{Bmatrix} \quad \begin{vmatrix} a & b \\ c & d \end{vmatrix} \quad \begin{Vmatrix} i & 0 \\ 0 & -i \end{Vmatrix} \end{gathered} 0110(0ii0)[0110]{1001}acbdi00i

$$
\begin{gathered}
\begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix}
\quad
\begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}
\quad
\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}
\quad
\begin{Bmatrix} 1 & 0 \\ 0 & -1 \end{Bmatrix}
\quad
\begin{vmatrix} a & b \\ c & d \end{vmatrix}
\quad
\begin{Vmatrix} i & 0 \\ 0 & -i \end{Vmatrix}
\end{gathered}
$$

矩阵式求解:
当我们的数据集含有m个样本,每个样本有n个特征时,数据x可以写成m*(n+1)维的矩阵(+1是添加一列1,用于与截断b相乘),θ则为n+1维的列向量(+1是截断b),y为m维的列向量代表每m个样本结果的预测值。则矩阵式的推导如下所示:
J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = 1 2 ( X θ − y ) T ( X θ − y ) = 1 2 ( θ T X T − y T ) ( X θ − y ) = 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) 求导: ∂ J ( θ ) ∂ θ = 1 2 ( 2 X T X θ − X T y − ( y T X ) T ) = X T X θ − X T y 偏导等于0: θ = ( X T X ) − 1 X T y \begin{aligned} J(\theta)&=\frac{1}{2}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2\\ &=\frac{1}{2}(X\theta-y)^T(X\theta-y)\\ &=\frac{1}{2}(\theta^TX^T-y^T)(X\theta-y)\\ &=\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty)\\ \textbf{求导:}\\ \frac{\partial J(\theta)}{\partial\theta}&=\frac{1}{2}(2X^TX\theta-X^Ty-(y^TX)^T)\\ &=X^TX\theta-X^Ty\\ \textbf{偏导等于0:}\\ \theta&=(X^TX)^{-1}X^Ty \end{aligned} J(θ)求导:θJ(θ)偏导等于0:θ=21i=1m(hθ(x(i))y(i))2=21(Xθy)T(Xθy)=21(θTXTyT)(Xθy)=21(θTXTXθθTXTyyTXθ+yTy)=21(2XTXθXTy(yTX)T)=XTXθXTy=(XTX)1XTy

$$
\begin{aligned}
J(\theta)&=\frac{1}{2}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2\\
&=\frac{1}{2}(X\theta-y)^T(X\theta-y)\\
&=\frac{1}{2}(\theta^TX^T-y^T)(X\theta-y)\\
&=\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty)\\
\textbf{求导:}\\
\frac{\partial J(\theta)}{\partial\theta}&=\frac{1}{2}(2X^TX\theta-X^Ty-(y^TX)^T)\\
&=X^TX\theta-X^Ty\\
\textbf{偏导等于0:}\\
\theta&=(X^TX)^{-1}X^Ty
\end{aligned}
$$

6. 梯度下降算法

如果X的特征数 n n n 不是很大,通常情况下 X T X X^TX XTX是可以求逆的,但是如果 n n n 非常大, X T X X^TX XTX 不可逆,则用梯度下降法求解参数 θ θ θ

在一元函数中叫做求导,在多元函数中就叫做求梯度。梯度下降是一个最优化算法,通俗的来讲也就是沿着梯度下降的方向来求出一个函数的极小值。比如一元函数中,加速度减少的方向,总会找到一个点使速度达到最小。通常情况下,数据不可能完全符合我们的要求,所以很难用矩阵去求解,所以机器学习就应该用学习的方法,因此我们采用梯度下降,不断迭代,沿着梯度下降的方向来移动,求出极小值。梯度下降法包括批量梯度下降法和随机梯度下降法(SGD)以及二者的结合mini批量下降法(通常与SGD认为是同一种,常用于深度学习中)

梯度下降一般过程

  1. 初始化 θ \theta θ (随机)

  2. J ( θ ) J(\theta) J(θ) θ \theta θ 的偏导
    在这里插入图片描述

  3. 更新 θ \theta θ

在这里插入图片描述
其中α为学习率,沿着负梯度方向迭代,更新后的θ使得J(θ)更小。因为J(θ)是凸函数,所以GD求出的最优解是全局最优解。

批量梯度下降法 是求出整个数据集的梯度,再去更新θ,所以每次迭代都是在求全局最优解。
在这里插入图片描述
随机梯度下降法 是求一个样本的梯度后就去跟新θ,所以每次迭代都是求局部最优解,但是总是朝着全局最优解前进,最后总会到达全局最优解。
在这里插入图片描述

7. 使用正则项防止过拟合

在机器学习中,有时为了防止模型太复杂容易过拟合,通常会在模型上加入正则项,抑制模型复杂度,防止过拟合。在线性回归中有两种常用的正则,一个是L1正则,一个是L2正则。
一般L2的效果更好一些。L1能够产生稀疏模型,能够帮助我们去除某些特征,因此可以用于特征选择。

加入 L1正则 的称为 Lasso回归
在这里插入图片描述
加入 L2正则 的成为 Ridge回归 也叫 岭回归

在这里插入图片描述

三、代码实现

import numpy as np
class LinearRegression(object):
    def __init__(self):
        self.theta = [0]
        self.loss = []
    
    def fit(self,x_data,y_data,alpha=0.01,iters=1):
        x_data = np.array(x_data)
        y_data = np.array(y_data)

        feat_n = x_data.shape[1] #特征数量
        print(x_data)
        print(x_data.shape)
        x_data = np.insert(x_data,feat_n-1,1,axis=1) #插入一列1
        self.theta = self.theta*(feat_n+1)
        print(x_data)
        print(x_data.shape)
        #随机梯度下降
        for i in range(iters):
            for x,y in zip(x_data,y_data):
                predict = self.__pre(x)
                err = y-predict
                self.theta = self.theta + np.multiply(alpha*err,x)
                self.loss.append(self.cost(x[:-1].reshape(-1,feat_n),y))

    def __pre(self,x):
        return np.dot(x,self.theta)

    def predict(self,x):
        x = np.array(x)
        x = np.insert(x,x.shape[1]-1,1,axis=1)
        return self.__pre(x)

    def cost(self,x,y):
        return (1/2.0)*sum(np.power(self.predict(x)-y,2))

    def get_weight(self):
        return self.theta[:-1]

    def get_loss(self):
        return self.loss

    def get_intercept(self):
        return self.theta[-1]
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页