栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

线性模型——(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()

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341307.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号