📜  具有正态方程的多元线性回归模型

📅  最后修改于: 2021-09-05 11:37:43             🧑  作者: Mango

先决条件: NumPy

考虑一个数据集,

area (x1) rooms (x2) age (x3) price (y)
23 3 8 6562
15 2 7 4569
24 4 9 6897
29 5 4 7562
31 7 6 8234
25 3 10 7485

让我们考虑一下,

这里面积、房间、年龄是特征/自变量,价格是目标/因变量。众所周知,多元线性回归假设由下式给出:

$h_{\theta}(x)=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}$

Parameters: $\theta=\left\{\theta_{0}, \theta_{1}, \theta_{2}, \ldots \theta_{n}\right\}$ \\ Features: $x=\left\{x_{0}, x_{1}, x_{2}, \ldots x_{n}\right\}$

在哪里, $x_{0} = 1$

注意:这里我们的目标是找到参数 θ 的最佳值。为了找到 θ 的最佳值,我们可以使用正规方程。因此,在找到 θ 的值后,我们的线性假设或线性模型将准备好预测新特征或输入的价格。

正规方程是:

$\theta=\left(X^{T} X\right)^{-1} X^{\mathrm{T}} y$

考虑到上面的数据集我们可以写,

X:大小为 ( nxm ) 的所有独立特征的数组,其中m是训练样本的总数, n是包括 (x 0 = 1) 在内的特征总数

X T:数组 X 的转置

y: y是大小为m的目标/因变量的一维数组/列数组/向量,其中m是训练样本的总数。

所以对于上面的例子,我们可以写:

X = [[ 1, 23, 3, 8],

[ 1, 15, 2, 7],

[ 1, 24, 4, 9],

[ 1, 29, 5, 4],

[ 1, 31, 7, 6],

[ 1, 25, 3, 10]]

X T = [[ 1, 1, 1, 1, 1, 1],

[23, 15, 24, 29, 31, 25],

[ 3, 2, 4, 5, 7, 3],

[ 8, 7, 9, 4, 6, 10]]

y= [6562, 4569, 6897, 7562, 8234, 7485]

代码:用正态方程实现线性回归模型

Python
import numpy as np
  
class LinearRegression:
    def __init__(self):
        pass
  
    def __compute(self, x, y):
        try:
            '''
            # multiline code
            var = np.dot(x.T,x)
            var = np.linalg.inv(var)
            var = np.dot(var,x.T)
            var = np.dot(var,y)
            self.__thetas = var
            '''
            # one line code
            self.__thetas = np.dot(np.dot(np.linalg.inv(np.dot(x.T,x)),x.T),y)
        except Exception as e:
            raise e
          
    def fit(self, x, y):
        x = np.array(x)
        ones_ = np.ones(x.shape[0])
        x = np.c_[ones_,x]
        y = np.array(y)
        self.__compute(x,y)
  
    @property
    def coef_(self):
        return self.__thetas[0]
  
    @property
    def intercept_(self):
        return self.__thetas[1:]
  
    def predict(self, x):
        try:
            x = np.array(x)
            ones_ = np.ones(x.shape[0])
            x = np.c_[ones_,x]
            result = np.dot(x,self.__thetas)
            return result            
        except Exception as e:
            raise e
  
# testing of code...
  
# datasets
x_train = [[2,40],[5,15],[8,19],[7,25],[9,16]]
y_train = [194.4, 85.5, 107.1, 132.9, 94.8]
x_test = [[12,32],[2,40]]
y_test = []
  
# testing the model...
lr = LinearRegression()
lr.fit(x,y)
print(lr.coef_,lr.intercept_)
print(lr.predict(x_t))


输出 :

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live