当前位置:   article > 正文

人工智能基础与线性回归模型_ai 和回归模型

ai 和回归模型

1.人工智能、机器学习、深度学习的关系

1.1 机器学习

  • 目标:让机器具有学习的能力
  • 人类解决问题方式:根据已有的数据,归纳总结规律,然后在遇到新的问题时采用归纳总结的规律进行预测
  • 机器学习解决问题方式:根据已有的数据(历史数据),选择合适的机器学习算法,构建和训练模型,然后输入新的数据,采用刚刚训练好的模型进行预测结果

1.2 深度学习:是机器学习的其中一种方法,主要原理是神经网络

我们眼睛看到一张图片,会先提取边缘特征,再识别部件,最后再得到最高层的模式。

1.3 人工智能与机器学习、深度学习之间的区别

2.机器学习基本概念

  • 有监督学习
    • 回归
    • 分类
    • 结构化学习
  • 无监督学习
  • 如何选择算法

回归:主要用于预测目标值为连续数值型数据。常见场景有股票价格波动的预测,房屋价格的预测等。

分类:主要将数据划分到合适的类别中。比如将垃圾放入对应的垃圾桶里,湿垃圾放入湿垃圾垃圾桶;常见的应用有猫狗识别(二分类 ),手写数字的识别(多分类)

结构化学习:输入输出都是结构化数据

输入输出不是一个标量或者一个类别

一些有结构化数据的输出(比如一个序列、一个句子、一个图等),将输出结构化结果的过程叫做结构化学习或者结构化预测

无监督学习

  • 定义:对未标记的样本进行训练学习,比发现这些样本中的结构知识
  • 特点: 数据没有类别信息,也不会给定目标值

如何选择算法?

3.线性回归

回归:研究一个或者多个自变量 X 对一个因变量 Y (目标变量)的影响关系情况。

目标变量(Y)为连续数值型,如:房价、人数、降雨量、温度等

回归模型是表示输入变量到输出变量之间映射的函数。

回归问题的学习等价于函数拟合:使用一条函数曲线使其很好的拟合已知数据且能够预测未知数据

回归问题分为模型的学习和预测两个过程。基于给定的训练数据集构建一个模型,根据新的输入数据预测相应的输出。

3.1 线性回归模型

3.1.1 一元线性回归(单个特征)

那么现在有一个房屋面积为 55平方米,请问最终的租赁价格是多少比较合适?

拟合曲线公式(假设函数): y = w x + b y = wx + b y=wx+b

3.1.2 多元线性模型(多个特征)

拟合曲线公式: y = b + w 1 x 1 + w 2 x 2 y = b + w_{1}x_{1} + w_{2}x_{2} y=b+w1x1+w2x2

对于 n 维特征(feature)假设函数:

KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} …

3.2 损失函数

求解最佳参数 w w w,需要一个标准来对结果进行衡量,为此我们需要定量化一个目标函数式,使得计算机可以在求解过程中不断地优化。

针对任何模型求解问题,都是最终都是可以得到一组预测值 y ^ \hat{y} y^ ,对比已有的真实值 y y y,可以将损失函数定义如下:
L ( f ) = ∑ i = 1 n ( y − y ^ ) 2 L(f) = \sum_{i=1}^{n}(y - \hat{y})^2 L(f)=i=1n(yy^)2

即预测值与真实值之间的平均的平方距离,统计中一般称其为MSE(mean square error)均方误差。

损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异
将线性回归模型假设函数带入损失函数:

L ( w , b ) = ∑ n = i n [ y i − w x i − b ) ] 2 L(w,b) = \sum_{n=i}^{n}[y_i - wx_i - b)]^2 L(wb)=n=in[yiwxib)]2

需要求解参数 w 和 b 看作是损失函数 L 的自变量

现在的任务就是求解最小化 L 时 w 和 b 的值,即核心目标优化式为:
( w ∗ , b ∗ ) = arg ⁡ min ⁡ ( w , b ) ∑ i = 1 n ( y i − w x i − b ) 2 (w^*,b^*) = \arg \min_{(w,b)} \sum_{i=1}^{n}(y_i - wx_i - b)^2 (w,b)=arg(w,b)mini=1n(yiwxib)2

3.3 求解方式

3.3.1 最小二乘法(least square method)

在统计学中,求解 w 和 b 是使损失函数最小化的过程,称为线性回归模型的最小二乘“参数估计”(parameter estimation)。

L ( w , b ) = ∑ n = i n [ y i − w x i − b ) ] 2 L(w,b) =\sum_{n=i}^{n}[y_i-wx_i-b)]^2 L(wb)=n=in[yiwxib)]2

我们分别对 w 和 b 求导,得到:

KaTeX parse error: No such environment: equation at position 7: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} …

令上述两式为 0,可得到 w 和 b 最优解的表达式:

w = ∑ i = 1 n x i y i − n x ˉ y ˉ ∑ i = 0 n x i 2 − n x ˉ 2 w = \frac{ \sum_{i=1}^{n} x_iy_i-n\bar{x} \bar{y}}{ \sum_{i=0}^{n} x_i^2-n\bar{x}^2} w=i=0nxi2nxˉ2i=1nxiyinxˉyˉ

b = y ‾ − w x ‾ = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 b = \overline{y}-w\overline{x}=\frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sum_{i=1}^{n}(x_i-\bar{x})^2} b=ywx=i=1n(xixˉ)2i=1n(xixˉ)(yiyˉ)

3.3.2 梯度下降法(Gradient Descent)
  • 梯度下降是一种迭代方法
  • 一个用来求函数最小值的方法
  • 是一种基于搜索的最优化方法

在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值

梯度下降法的流程

  • 初始化参数 w , b w,b w,b
  • 计算参数的梯度,并更新参数的值
    w i ← w i − η ∂ L ∂ w w_i\leftarrow w_i - \eta\frac{\partial L}{\partial w} wiwiηwL
  • 根据第二步反复迭代,找到损失函数最小时的参数值
    • 迭代次数
    • 梯度小于我们事先设定的一个正极小值
    • 前后 2 次迭代变量之间的差异小于一个正极小值

梯度下降法的公式:
w j = w j − η ∂ L ∂ w j w_j = w_j - \eta \frac{\partial L}{\partial w_j} wj=wjηwjL

梯度下降法的公式:
w j = w j − η ∂ L ∂ w j w_j = w_j - \eta \frac{\partial L}{\partial w_j} wj=wjηwjL

3.4 如何评价模型的好坏

误差:
E = 1 n ∑ i = 1 n e n = 1 n ∑ i = 1 n [ y ^ i − ( b + w x i ) ] 2 E =\frac{1}{n} \sum_{i=1}^{n}e^n= \frac{1}{n} \sum_{i=1}^{n}[\hat{y}^i-(b+wx^i)]^2 E=n1i=1nen=n1i=1n[y^i(b+wxi)]2

MSE:误差平方和,越趋近于0表示模型越拟合训练数据
M S E = 1 n ∑ i = 1 n ( y t r u e i − y p r e i ) 2 MSE = \frac{1}{n}\sum_{i=1}^{n}(y_{true}^i-y_{pre}^i)^2 MSE=n1i=1n(ytrueiyprei)2

RMSE:MSE的平方根,作用同MSE

MAE:平均绝对误差是绝对误差的平均值,衡量预测值和真实值之间的误差,公式如下:

M A E = 1 n ∑ i = 1 n ∣ y t r u e i − y p r e i ∣ MAE = \frac{1}{n}\sum_{i=1}^n|{y}^i_{true}-y_{pre}^{i}| MAE=n1i=1nytrueiyprei

TSS:总平方和 TSS(Total Sum of Squares),表示样本之间的差异情况

T S S = ∑ i = 1 n ( y t r u e i − y m e a n ) 2 TSS=\sum_{i=1}^{n}(y_{true}^i - y_{mean})^2 TSS=i=1n(ytrueiymean)2
y m e a n = 1 n ∑ i = 1 n y t r u e i y_{mean} = \frac{1}{n}\sum_{i=1}^{n}y_{true}^i ymean=n1i=1nytruei

RSS:残差平方和RSS(Residual Sum of Squares),表示预测值和样本值之间的差异情况
R S S = ∑ i = 1 n ( y t r u e i − y p r e i ) 2 RSS = \sum_{i=1}^{n}(y_{true}^i-y_{pre}^i)^2 RSS=i=1n(ytrueiyprei)2

R 2 R^2 R2:称为决定系数,值越大表示模型越拟合训练数据;最优解是1,表示目标变量的预测值和实际值之间相关程度平方的百分比,公式如下:

R 2 = 1 − R S S T S S = 1 − ∑ i = 1 n ( y t r u e i − y p r e i ) 2 ∑ i = 1 n ( y t r u e i − y m e a n ) 2 R^2 = 1-\frac{RSS}{TSS}=1-\frac{\sum_{i=1}^{n}(y_{true}^i-y_{pre}^i)^2}{\sum_{i=1}^{n}(y_{true}^i - y_{mean})^2} R2=1TSSRSS=1i=1n(ytrueiymean)2i=1n(ytrueiyprei)2

  • RSS 表示使用我们的模型预测产生的误差;
  • TSS 表示使用样本平均值进行预测产生的误差。

3.5 欠拟合与过拟合

欠拟合刚刚好过拟合
模型过度简单模型过度复杂
模型无法捕获输入特征 (通常称为 X) 与目标值 (通常称为 Y) 之间的关系模型可以很好的表达训练数据与测试数据的输入输出之间的关系能够很好的表达训练数据上输入输出之间的关系,但是无法很好的表达测试数据上输入与输出之间的关系
模型在训练数据上表现比较差模型在测试数据上表现还可以,在训练数据上表现还可以模型在测试数据上表现比较差,在训练数据上表现非常好

4.线性回归实战

4.1 sklearn介绍

  • Python 语言的机器学习工具
  • Scikit-learn 包括大量常用的机器学习算法
  • Scikit-learn 文档完善,容易上手

4.2 sklearn 数据集

  • sklearn.datasets.load_*()
    • 获取小规模数据集,数据包含在 datasets
  • sklearn.datasets.fetch_*(data_home=None)
    • 获取大规模数据集,需要从网络上下载,函数的第一个参数是 data_home,表示数据集下载的目录,默认是 /scikit_learn_data/

sklearn 常见的数据集如下:

数据集名称调用方式适用算法数据规模
小数据集波士顿房价load_boston()回归506*13
小数据集鸢尾花数据集load_iris()分类150*4
小数据集糖尿病数据集load_diabetes()回归442*10
大数据集手写数字数据集load_digits()分类5620*64
大数据集Olivetti脸部图像数据集fetch_olivetti_facecs降维400*64*64
大数据集新闻分类数据集fetch_20newsgroups()分类-
大数据集带标签的人脸数据集fetch_lfw_people()分类、降维-
大数据集路透社新闻语料数据集fetch_rcv1()分类804414*47236
  • 获取数据信息
from sklearn.datasets import load_boston

# 数据集网址:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_boston.html
boston = load_boston()

print(boston.keys())
print("数据特征名称",boston.feature_names)
print("数据特征:",boston.data[0])
print("数据标签:",boston.target[:10])
print("数据类型:",type(boston.data), type(boston.target))
print("数据维数:",boston.data.shape)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
dict_keys(['feature_names', 'data', 'DESCR', 'target', 'filename'])
数据特征名称 ['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
数据特征: [6.320e-03 1.800e+01 2.310e+00 0.000e+00 5.380e-01 6.575e+00 6.520e+01
 4.090e+00 1.000e+00 2.960e+02 1.530e+01 3.969e+02 4.980e+00]
数据标签: [24.  21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9]
数据类型: <class 'numpy.ndarray'> <class 'numpy.ndarray'>
数据维数: (506, 13)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
序号特征名称特征含义
1CRIM城市人均犯罪率
2ZN住宅用地所占比例
3INDUS城市中非商业用地所占尺寸
4CHAS查尔斯河虚拟变量
5NOX环保指数
6RM每栋住宅的房间数
7AGE1940年以前建成的自建单位比例
8DIS距离5个波士顿就业中心的加权距离
9RAD距离高速公路的便利指数
10TAX每一万元的不动产税率
11PTRATIO城市中教师学生比例
12B城市中黑人比例
13LSTAT城市中有多少百分比的房东属于低收入阶层
import pandas as pd

data_pd = pd.DataFrame(boston.data,columns=boston.feature_names)
data_pd['price'] = boston.target
data_pd.head()
  • 1
  • 2
  • 3
  • 4
  • 5
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTATprice
00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.9824.0
10.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.1421.6
20.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.0334.7
30.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.9433.4
40.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.3336.2
# 查看数据类型
data_pd.info()
  • 1
  • 2
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 506 entries, 0 to 505
Data columns (total 14 columns):
CRIM       506 non-null float64
ZN         506 non-null float64
INDUS      506 non-null float64
CHAS       506 non-null float64
NOX        506 non-null float64
RM         506 non-null float64
AGE        506 non-null float64
DIS        506 non-null float64
RAD        506 non-null float64
TAX        506 non-null float64
PTRATIO    506 non-null float64
B          506 non-null float64
LSTAT      506 non-null float64
price      506 non-null float64
dtypes: float64(14)
memory usage: 55.4 KB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
# 查看数据类型
data_pd.get_dtype_counts()
  • 1
  • 2
float64    14
dtype: int64
  • 1
  • 2
# 查看数据描述
data_pd.describe()
  • 1
  • 2
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTATprice
count506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000
mean3.61352411.36363611.1367790.0691700.5546956.28463468.5749013.7950439.549407408.23715418.455534356.67403212.65306322.532806
std8.60154523.3224536.8603530.2539940.1158780.70261728.1488612.1057108.707259168.5371162.16494691.2948647.1410629.197104
min0.0063200.0000000.4600000.0000000.3850003.5610002.9000001.1296001.000000187.00000012.6000000.3200001.7300005.000000
25%0.0820450.0000005.1900000.0000000.4490005.88550045.0250002.1001754.000000279.00000017.400000375.3775006.95000017.025000
50%0.2565100.0000009.6900000.0000000.5380006.20850077.5000003.2074505.000000330.00000019.050000391.44000011.36000021.200000
75%3.67708312.50000018.1000000.0000000.6240006.62350094.0750005.18842524.000000666.00000020.200000396.22500016.95500025.000000
max88.976200100.00000027.7400001.0000000.8710008.780000100.00000012.12650024.000000711.00000022.000000396.90000037.97000050.000000

一列数据全是“number”

count:一列的元素个数;
mean:一列数据的平均值;
std:一列数据的均方差;(方差的算术平方根,反映一个数据集的离散程度:越大,数据间的差异越大,数据集中数据的离散程度越高;越小,数据间的大小差异越小,数据集中的数据离散程度越低)
min:一列数据中的最小值;
max:一列数中的最大值;
25%:一列数据中,前 25% 的数据的平均值;
50%:一列数据中,前 50% 的数据的平均值;
75%:一列数据中,前 75% 的数据的平均值;

# 计算每一个特征之间的相关系数
corr = data_pd.corr()
corr
  • 1
  • 2
  • 3
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTATprice
CRIM1.000000-0.2004690.406583-0.0558920.420972-0.2192470.352734-0.3796700.6255050.5827640.289946-0.3850640.455621-0.388305
ZN-0.2004691.000000-0.533828-0.042697-0.5166040.311991-0.5695370.664408-0.311948-0.314563-0.3916790.175520-0.4129950.360445
INDUS0.406583-0.5338281.0000000.0629380.763651-0.3916760.644779-0.7080270.5951290.7207600.383248-0.3569770.603800-0.483725
CHAS-0.055892-0.0426970.0629381.0000000.0912030.0912510.086518-0.099176-0.007368-0.035587-0.1215150.048788-0.0539290.175260
NOX0.420972-0.5166040.7636510.0912031.000000-0.3021880.731470-0.7692300.6114410.6680230.188933-0.3800510.590879-0.427321
RM-0.2192470.311991-0.3916760.091251-0.3021881.000000-0.2402650.205246-0.209847-0.292048-0.3555010.128069-0.6138080.695360
AGE0.352734-0.5695370.6447790.0865180.731470-0.2402651.000000-0.7478810.4560220.5064560.261515-0.2735340.602339-0.376955
DIS-0.3796700.664408-0.708027-0.099176-0.7692300.205246-0.7478811.000000-0.494588-0.534432-0.2324710.291512-0.4969960.249929
RAD0.625505-0.3119480.595129-0.0073680.611441-0.2098470.456022-0.4945881.0000000.9102280.464741-0.4444130.488676-0.381626
TAX0.582764-0.3145630.720760-0.0355870.668023-0.2920480.506456-0.5344320.9102281.0000000.460853-0.4418080.543993-0.468536
PTRATIO0.289946-0.3916790.383248-0.1215150.188933-0.3555010.261515-0.2324710.4647410.4608531.000000-0.1773830.374044-0.507787
B-0.3850640.175520-0.3569770.048788-0.3800510.128069-0.2735340.291512-0.444413-0.441808-0.1773831.000000-0.3660870.333461
LSTAT0.455621-0.4129950.603800-0.0539290.590879-0.6138080.602339-0.4969960.4886760.5439930.374044-0.3660871.000000-0.737663
price-0.3883050.360445-0.4837250.175260-0.4273210.695360-0.3769550.249929-0.381626-0.468536-0.5077870.333461-0.7376631.000000
# 将相关系数绝对值大于 0.5 的特征画图显示出来
corr = corr['price']
corr[abs(corr)>0.5].sort_values().plot.bar()
  • 1
  • 2
  • 3
<matplotlib.axes._subplots.AxesSubplot at 0x7fe8a9912358>
  • 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-plJUUTnP-1604113495451)(output_91_1.png)]

绘制 LSTAT 特征与价格的散点图

import matplotlib.pyplot as plt
#设置图表大小
plt.figure(figsize=(6,4),dpi=100)
plt.scatter(data_pd['LSTAT'],data_pd['price'])
plt.ylabel('price')
plt.xlabel('LSTAT')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Text(0.5, 0, 'LSTAT')
  • 1

在这里插入图片描述

4.3 划分数据集

把数据拆分为训练集和测试集,可以利用测试集对训练的模型进行量化地评估,衡量模型的好坏。

机器学习一般的数据集会划分为两个部分:

  • 训练数据:用于训练,构建模型
  • 测试数据:在模型检验时使用,用于评估模型是否有效

划分比例:

  • 训练集:70% 80% 75%
  • 测试集:30% 20% 25%

sklearn.model_selection.train_test_split(x, y, test_size, random_state )

  • x:数据集的特征值
  • y: 数据集的标签值
  • test_size: 如果是浮点数,表示测试集样本占比;如果是整数,表示测试集样本的数量。
  • random_state: 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
  • return 训练集的特征值 x_train 测试集的特征值 x_test 训练集的目标值 y_train 测试集的目标值 y_test
from sklearn.model_selection import train_test_split
import numpy as np

# 制作训练集和测试集的数据
y = np.array(data_pd['price'])
# data_pd=data_pd.drop(['price'],axis=1)
X = np.array(data_pd[['LSTAT']])

# 对数据集进行切分
# 训练集的特征值x_train 测试集的特征值x_test 训练集的目标值y_train 测试集的目标值y_test
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2, random_state=22)

print("x_train:", X_train.shape)
print("y_train:", y_train.shape)
print("x_test:", X_test.shape)
print("y_test:", y_test.shape)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
x_train: (404, 1)
y_train: (404,)
x_test: (102, 1)
y_test: (102,)
  • 1
  • 2
  • 3
  • 4

4.4 训练模型

4.4.1 LinearRegression 接口介绍
  • 调用方法

from sklearn.linear_model import LinearRegression
lr = sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)

  • 参数详解

fit_intercept:默认True,是否计算模型的截距,为 False 时,则数据中心化处理
normalize:默认 False,是否中心化,或者使用 sklearn.preprocessing.StandardScaler()
copy_X:默认 True,这个一般都采用默认值。
n_jobs:默认为 1,表示使用 CPU 的个数。当 -1 时,代表使用全部 CPU

  • 获取结果

coef_:训练后的输入端模型系数,如果特征个数有两个,即 x 值有两列。那么是一个2维的数组
intercept_:截距
predict(x):预测数据
score:R2 得分

4.4.2 训练模型
from sklearn.linear_model import LinearRegression

# 创建模型
LR = LinearRegression()
#训练模型
LR.fit(X_train,y_train)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
  • 1
# 模型截距 b 的值
LR.intercept_
  • 1
  • 2
34.471323014406394
  • 1
# 模型特征系数的值
LR.coef_
  • 1
  • 2
array([-0.93877786])
  • 1

得到的模型为:
y = 34.47 − 0.939 ∗ L S T A T y = 34.47 -0.939*LSTAT y=34.470.939LSTAT

4.5 评估模型

from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score

# 输出类别数据
y_pre = LR.predict(X_test)
# print("预测值:",y_pre)
# 评估误差 
print("r2_score:", LR.score(X_test,y_test))
print("r2_score:", r2_score(y_test,y_pre))
print("MSE:", mean_squared_error(y_test,y_pre))
print("RMSE:", np.sqrt(mean_squared_error(y_test,y_pre)))
print("MAE:", sum(abs(y_test-y_pre))/len(y_test))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
r2_score: 0.5149044976402835
r2_score: 0.5149044976402835
MSE: 43.012248817534875
RMSE: 6.558372421381304
MAE: 5.097310907109813
  • 1
  • 2
  • 3
  • 4
  • 5

4.6 绘制结果

import matplotlib.pyplot as plt
#设置图表大小
plt.figure(figsize=(8,6),dpi=100)
#绘制预测值
plt.scatter(X_test,y_test,label="真实值")
y = LR.coef_[0]*X_test + LR.intercept_
plt.plot(X_test,y,'r',label='预测值')
plt.title("测试数据预测值与真实值对比")
plt.xlabel("LSTAT")
plt.ylabel("预测房价")
plt.legend()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
<matplotlib.legend.Legend at 0x7fe8a7c414a8>
  • 1

加粗样式
**

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/378315?site
推荐阅读
相关标签
  

闽ICP备14008679号