先决条件: 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 |
让我们考虑一下,
这里面积、房间、年龄是特征/自变量,价格是目标/因变量。众所周知,多元线性回归的假设由下式给出:
在哪里,
注意:这里我们的目标是找到参数 θ 的最佳值。为了找到 θ 的最佳值,我们可以使用正规方程。因此,在找到 θ 的值后,我们的线性假设或线性模型将准备好预测新特征或输入的价格。
正规方程是:
考虑到上面的数据集我们可以写,
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))
输出 :
Value of Intercept = 305.3333333334813
Coefficients are = [236.85714286 -4.76190476 102.9047619 ]
Actual value of Test Data = [8234, 7485]
Predicted value of Test Data = [8232. 7241.52380952]
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live