线性模型——(1)线性回归


文章目录

  • 线性模型——(1)线性回归
  • 1 模型介绍
  • 2 代码实现
  • 2.1 代码
  • 2.2 运行结果
  • 3 模型评估
  • 4 补充
  • 4.1 sklearn.metrics
  • 4.2 一元多次线性回归


五种线性模型,它们分别是:
1.线性回归;
2.逻辑回归(logistic回归);
3.softmax回归;
4.感知机(perceptron);
5.支持向量机(SVM)。

1 模型介绍

在本文中,我们先只展开线性回归的部分,线性回归是机器学习中一个基础的模型,它的目的是对自变量和因变量间的关系做回归分析。当只有一个自变量时称为一元线性回归,公式如下:

y=ax+b

有多个自变量时称为多元回归,公式如下:

spark 线性回归 房屋 线性回归方程公式spss_斜率


线性回归模型训练的目的就是使得以下残差平方和最小:

spark 线性回归 房屋 线性回归方程公式spss_python_02

2 代码实现

以下使用python的 scikit-learn库进行代码举例,例子为一个一元线性回归和一个二元线性回归,二者的区别只有自变量的维度不同,代码如下所示:

2.1 代码

import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression

x1 = [[1], [2], [3], [4], [5]]
x2 = [[np.random.randint(1, 5) for j in range(1, 3)] for i in range(1, 6)] # 二维数组
y = [2, 5, 7, 8, 11]

# 一元线性回归
model = LinearRegression()
model.fit(x1, y)
pred1 = model.predict(x1)
print("一元线性回归:")
print(x1)
print(pred1)
print("斜率为:" + str(model.coef_))
print("截距为:" + str(model.intercept_))
# 二元线性回归
model.fit(x2, y)
pred2 = model.predict(x2)
print("--------------------------------------------")
print("二元线性回归:")
print(x2)
print(pred2)

# 拟合曲线可视化
plt.scatter(x1, y)
plt.plot(x1, pred1)
plt.show()

# 拟合曲线可视化
plt.scatter(x1, y)
plt.plot(x1, pred1)
plt.show()

2.2 运行结果

一元线性回归:
[[1], [2], [3], [4], [5]]
[ 2.4  4.5  6.6  8.7 10.8]
斜率为:[2.1]
截距为:0.3000000000000007
--------------------------------------------
二元线性回归:
[[1, 4], [1, 4], [3, 2], [2, 4], [2, 1]]
[4.50746269 4.50746269 9.01492537 5.31343284 9.65671642]

一元线性回归拟合图:

spark 线性回归 房屋 线性回归方程公式spss_spark 线性回归 房屋_03

3 模型评估

对于线性回归模型的评估,我们可以采用statsmodels库,代码如下所示:

# 模型评估
import statsmodels.api as sm
b = sm.add_constant(x1)  # 截距
est = sm.OLS(y, b).fit()  #回归方程搭建
print(est.summary())  # 打印结果

输出结果如下图所示:

spark 线性回归 房屋 线性回归方程公式spss_python_04


对于上图中结果,我们可以做一大致的分析:

首先,图中评估标准有三:R-squared、Adj. R-squared和P值

R-squared和Adj. R-squared:是用来评价线性拟合的好坏,它们的取值范围为0~1,越接近1表示模型的拟合程度越好。

P值:用来评价特征变量的显著性,取值范围为0~1,越接近0表示特征变量的显著性越高,即该特征变量与目标变量具有相关性。

其次,在图中的三个红色框中我们可以观察到R-squared:为0.976,R-squared为0.968,说明此模型的拟合程度高。

这里的coef这一栏表示系数,const对应0.3000为截距,x1对应2.1000为斜率。const和x1对应的P值分别为:0.669和0.002,可以看出截距(const)与因变量y相关性低(即此特征变量的显著性低),x1与因变量y具有较强的相关性(即其显著性高)。

4 补充

4.1 sklearn.metrics

对于R-squared值我们还可以通过sklearn.metrics获得(在metrics里涵盖了多种机器学习评价指标),如下所示:

from sklearn.metrics import r2_score
r2 = r2_score(y, model.predict(x1))
print(r2)

结果为:0.9756637168141593

4.2 一元多次线性回归

公式如下:

spark 线性回归 房屋 线性回归方程公式spss_线性回归_05


代码如下:

from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

model = LinearRegression()
x1 = [[1], [2], [3], [4], [5]]
y = [2, 5, 7, 8, 11]

# 模型优化:一元二次线性回归模型
model_poly = PolynomialFeatures(degree=2)  # degree=2:设定最高次项为2
x1_ = model_poly.fit_transform(x1)
print(x1_)
model.fit(x1_, y)
plt.scatter(x1, y)
plt.plot(x1, model.predict(x1_), color='red')

model.fit(x1, y)
pred1 = model.predict(x1)
plt.scatter(x1, y)
plt.plot(x1, pred1)
plt.show()

结果:

spark 线性回归 房屋 线性回归方程公式spss_拟合_06