线性模型——(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
有多个自变量时称为多元回归,公式如下:
线性回归模型训练的目的就是使得以下残差平方和最小:
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]
一元线性回归拟合图:
3 模型评估
对于线性回归模型的评估,我们可以采用statsmodels库,代码如下所示:
# 模型评估
import statsmodels.api as sm
b = sm.add_constant(x1) # 截距
est = sm.OLS(y, b).fit() #回归方程搭建
print(est.summary()) # 打印结果
输出结果如下图所示:
对于上图中结果,我们可以做一大致的分析:
首先,图中评估标准有三: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 一元多次线性回归
公式如下:
代码如下:
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()
结果: