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

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

五种线性模型,它们分别是:
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()

结果:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值