python怎么拟合散点图 python散点图拟合直线_Python 散点图线性拟合


本文包含以下内容:

  • 机器学习
  • 简述线性回归

一、机器学习

1.定义:将普通计算机的算法,通过数据模型后输出结果,可以随着学习时长模型优化越来越好。

2.机器学习的步骤:提出问题——理解数据——数据清洗——构建模型——评估预测,其中最重要的就是机器学习算法(即模型),最后需要对模型进行评估预测。

3.理解数据特征及其标签:特征是数据的一些属性,标签是通过机器学习对数据的预测结果

二、简述线性回归

1.准备工作:安装sklearn(全名Scikit-learn)

Scikit-learn 是开源的 Python 库,通过统一的界面实现机器学习、预处理、交叉验证及可视化算法。

scikit-learn 网站:https://scikit-learn.org

2.相关性分析

创建一个具有线性相关的数据集


from


python怎么拟合散点图 python散点图拟合直线_数组_02


以学习时间为X轴,分数为Y轴画出数据散点图


#提取特征和标签
#特征features
exam_X=examDf.loc[:,'学习时间']
#标签labes
exam_y=examDf.loc[:,'分数']
#绘制散点图
import matplotlib.pyplot as plt

#散点图
plt.scatter(exam_X, exam_y, color="b", label="exam data")

#添加图标标签
plt.xlabel("Hours")
plt.ylabel("Score")
#显示图像
plt.show()


python怎么拟合散点图 python散点图拟合直线_python怎么拟合散点图_03


可以看出分数会随着学习时间增加而变大,两者之间有线性相关关系

  • 三种线性相关性


python怎么拟合散点图 python散点图拟合直线_Python 散点图线性拟合_04


  • 如何相关性程度:我们需要设计一个统计量,这个统计量应该具有以下两个功能


python怎么拟合散点图 python散点图拟合直线_数据_05


(1)协方差:cov(X,Y)=E[(X-E[X])(Y-E[Y])]


python怎么拟合散点图 python散点图拟合直线_python怎么拟合散点图_06

其中E[]W为期望

缺点:数据的变化幅度会很大的影响协方差

(2)相关系数:是标准化后的协方差,消除了数据变化幅度影响,反映的是数据每单位变化的相似程度


python怎么拟合散点图 python散点图拟合直线_线性回归方程b保留几位小数_07


具有以下两个功能:


python怎么拟合散点图 python散点图拟合直线_数据_08


相关系数的意义:

1)两个变量的相关性方向。r<0 为负线性相关,r>0 为正线性相关。相关系数r的三个极值:r=1,r=-1,r=0。

2)相关性大小:表示两个单位的相关性程度。r=0.6~1:强相关;r=0.3~0.6:中等程度相关;r=0~0.3:弱相关

相关系数的Python实现:pandas下的corr()函数


python怎么拟合散点图 python散点图拟合直线_数组_09


3.最佳拟合线:是指找到一条最佳的回归直线对观测值的拟合程度最好。

y = bx + a 其中b是回归系数,a是截距


python怎么拟合散点图 python散点图拟合直线_数组_10

让散点尽可能的落到直线上

如何求得a和b?


python怎么拟合散点图 python散点图拟合直线_数据_11


最小二乘法就是使得误差平方和的值最小即:误差=实际值-预测值

4.线性回归的实现

(1)提取特征和标签


python怎么拟合散点图 python散点图拟合直线_Python 散点图线性拟合_12


(2)建立训练数据和测试数据


python怎么拟合散点图 python散点图拟合直线_Python 散点图线性拟合_13


绘制数据散点图


python怎么拟合散点图 python散点图拟合直线_python怎么拟合散点图_14


(3)用训练数据训练模型


python怎么拟合散点图 python散点图拟合直线_python怎么拟合散点图_15


python怎么拟合散点图 python散点图拟合直线_数据_16


通过搜索引擎发现,报错原因是训练数据只输入了一个特征,需要用array.reshape(-1, 1)来改变数组的形状。

补充知识:reshape行的参数是-1表示什么呢?例如reshape(-1,列数)如果行的参数是-1,就会根据所给的列数,自动按照原始数组的大小形成一个新的数组。例如reshape(-1,1)就是改变成1列的数组,这个数组的长度是根据原始数组的大小来自动形成的。


python怎么拟合散点图 python散点图拟合直线_Python 散点图线性拟合_17


python怎么拟合散点图 python散点图拟合直线_线性回归方程b保留几位小数_18

原始数据是2行*3列,改变后为6行*1列

修改bug后:

step1:将训练数据导入sklearn的线性模型训练模型


python怎么拟合散点图 python散点图拟合直线_数组_19


step2:求出线性回归方程,其中intercept为截距、coef为回归系数


python怎么拟合散点图 python散点图拟合直线_数据_20


step3:绘图查看最佳拟合线和散点


python怎么拟合散点图 python散点图拟合直线_线性回归方程b保留几位小数_21


(4)模型评估(使用测试数据)

评估模型精准度:决定系数R平方


python怎么拟合散点图 python散点图拟合直线_python怎么拟合散点图_22


python怎么拟合散点图 python散点图拟合直线_python怎么拟合散点图_23


代码实现


python怎么拟合散点图 python散点图拟合直线_线性回归方程b保留几位小数_24


(5)把训练数据集(图中蓝色的点),和测试数据集(图中红色的点)放到一张图上来比较看


python怎么拟合散点图 python散点图拟合直线_python怎么拟合散点图_25