excel线性拟合的斜率_邵励治的机器学习 2 / 100 天:「简单线性回归」

2023-05-16

前言

好了,我们闲言碎语不多讲,下面开始 机器学习100天:第2天 的学习!

另外,如果看官老爷喜欢我的文章,还请点个赞的说!

这是对我的认真分享最好的鼓励!

知识储备环节

今天我们学习的内容是:“简单线性回归”!!!(SIMPLE LINEAR REGRESSION)
即:我们将使用“1 个特征”来预测一个结果,回想下我们高中学的最简单函数——线性函数吧!

我们将假设“某 1 个特征”与“某 1 个标签”线性相关,
所以我们要尽可能准确的找出一个“线性函数”来描述它们之间的这种关系。

问题 0-1:什么是线性函数?

答:上过高中的都应该记得,线性函数就是传说中的「一次函数」,即:

问题 0-2:我们将通过线性函数解决什么问题?

答:我们这次解决的问题是——

我们希望通过“分析”一个学生的「学习时长 hours」,来“预测”该学生最终在考试中可以取得的「分数 score」。

我们的线性函数模型

问题 0-3:我们该怎么找到这个“线性函数”呢?

答:我们会使用一个 数据集(.csv 表格文件),其中的数据是类似于这样子的:

然后我们通过某种算法,让机器自己学习这些数据,最终得出一个线性函数————

这个线性函数将尽可能的满足这些数据。

问题 0-4:什么叫“线性函数将尽可能满足这些数据”?

答:想象我们已经找到了一个线性函数:

其中,score 是「因变量」,hours 是「自变量」,当我们将表中的所有「自变量 hours」 输入到我们的线性函数中,我们就会得到一个「因变量 k*hours + b」,故我们可以构建一个如下表格:

当我们的线性方程满足了如下条件后,即可认为该线性函数尽可能的满足了这些数据。


经过基础理论部分的内容,我想大家已经准备好了开始 Coding 了呢!

Let's Do It!!!!!!!!

第一步:数据预处理

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dataset = pd.read_csv('studentscores.csv')
X = dataset.iloc[ : ,   : 1 ].values
Y = dataset.iloc[ : , 1 ].values

from sklearn.cross_validation import train_test_split // 原文使用的方法已经被弃用
from sklearn.model_selection import train_test_split 

X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0) 

问题 1-1:我们这里做的数据预处理,为何与「第一天」不太一样?

答:做数据预处理时,就像第一天所学的知识一样,我们需要先依照如下步骤进行操作:

第一步:导入数据
我们将 Data.csv 中的数据导入为“特征值组 X”与“标签组 Y”

第二步:数据补全
我们用取平均数的方式补全了“特征值组 X”与“标签组 Y”中缺省的数据

第三步:编码数据
我们将“STRING”型的数据,编码成了“INT”型数据,以方便数学模型处理

第四步:分割数据
我们将“特征值组 X”与“标签组 Y”,以 8 : 2 的比例分割成了
“训练集 X”、“测试集 X”与“训练集 Y”、“测试集 Y”

第五步:特征缩放
为了防止“特征幅度”特别大的特征,在计算欧式距离时太占优势,
我们对特征值进行了特征缩放————让特征们的平均值为 0,标准差为 1。

上面的是数据预处理的全部流程,但是我们这次的数据:

  1. 数据完整——故不需「第二步:数据补全」
  2. 数据类型全部为“INT”——故不需「第三步:编码数据」
  3. 数据「特征幅度」相近——故不需「第五步:特征缩放」

所以我们这里只做了「导入数据」、「分割数据」两个操作。

问题 1-2:iloc [ : , : 1 ] 与 iloc [ : , 0 ] 有什么区别吗?

问题解释:
iloc [ : , : 1 ] 是取 [ 0, 1 ) 这个区间的列——也就是第 0 列。
iloc [ : , 0 ] 是取第 0 列。

答:用「切片」取出来的是「数组」,用「INT 值」取出来的是「INT值」;

所以,虽然它们都是取「所有行」和「第 0 列」,但是数据结构有所不同。

// 切片:iloc[ : , : 1 ]
[ [2.5] [5.1] [3.2] [8.5] [3.5] [1.5]
  [9.2] [5.5] [8.3] [2.7] [7.7] [5.9]
  [4.5] [3.3] [1.1] [8.9] [2.5] [1.9]
  [6.1] [7.4] [2.7] [4.8] [3.8] [6.9]
  [7.8] ]

// INT值:iloc[ : , 0 ]
[ 2.5 5.1 3.2 8.5 3.5 1.5 
  9.2 5.5 8.3 2.7 7.7 5.9
  4.5 3.3 1.1 8.9 2.5 1.9
  6.1 7.4 2.7 4.8 3.8 6.9
  7.8 ]

问题 1-3:我们本次分割数据的比例是?

答:test_size = 1/4 的意思是,「测试集」占四分之一;

故,「训练集」占四分之三;

故,「测试集」:「训练集」= 1 : 3

第二步:将简单线性回归模型,拟合至训练集

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)

问题 2-1:什么叫拟合(FITTING)?

答:形象的说,拟合就是把平面上一系列的点,用一条光滑的曲线连接起来。

因为这条曲线有无数种可能,从而有各种拟合方法。

拟合的曲线一般可以用函数表示,根据这个函数的不同有不同的拟合名字。

问题 2-2:LinearRegression.fit() 函数在做什么?

答:它在使用「最小二乘法」对训练集进行「线性拟合」,它的运算结果是一个「线性方程」

问题 2-3:怎么用「最小二乘法」进行「线性拟合」?

答:最小二乘法的推导过程,这里就不赘述了。

我们只说最小二乘法的结论:

  1. 拟合直线的公式:

2. 拟合直线的斜率k:

3. 拟合直线的截距b:

使用 x 的平均值和 y 的平均值,以及计算出来的斜率 k, 通过待定系数法求解。

第三步:使用计算出来的「拟合直线」,预测结果

Y_pred = regressor.predict(X_test)

现在,我们将要使用我们通过 「训练集 X_train」与「训练集 Y_train」计算出来的「拟合直线 regressor」来预测结果了。

我们通过 predict 方法,将我们的「测试集 X_test」输入进「拟合直线 regressor」,得到「预测结果 Y_pred」

问题 3-1:我们可以输出「拟合直线 regressor」吗?

答:我们可以通过 LinearRegression 类的两个属性:

  • 斜率:coef_
  • 截距:intercept_

来查看我们的「拟合直线 regressor」

>> print("斜率:")
>> print(regressor.coef_)
>> print("截距:")
>> print(regressor.intercept_)
-----------------------
斜率:
[9.94167834]
截距:
1.9322042531516601

问题 3-2:我们可以输出「预测结果 Y_pred」吗?

答:可以,直接输出即可。

>> print(Y_pred)
-----------------------
[16.84472176 33.74557494 75.50062397 26.7864001  60.58810646 39.71058194
 20.8213931 ]

第四步:可视化

plt.scatter(X_train , Y_train, color = 'red')
plt.plot(X_train , regressor.predict(X_train), color ='blue')
plt.show()

训练集与拟合函数
plt.scatter(X_test , Y_test, color = 'red')
plt.plot(X_test , regressor.predict(X_test), color ='blue')
plt.show()

测试集与拟合函数

最后一步,我们要做的就是:通过绘制散点图(Scatter plot)来查看我们的「拟合函数」与「数据集」之间的关系。

问题 4-1:scatter() 函数是在做什么?

答:scatter() 函数可以帮助我们在平面坐标系中「绘制散列点」,如上图中的红点

问题 4-2:plot() 函数是在做什么?

答:plot() 函数可以帮我们在平面直角坐标系中「绘制函数图像」,如上图中的蓝线

总结

终于找到了一个周末,把第二天的博客写完了。

本章还是没有真正进入机器学习的领域,但是我们却学会了用 Python 完成一个统计学中的线性拟合问题了。

再接再厉!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

excel线性拟合的斜率_邵励治的机器学习 2 / 100 天:「简单线性回归」 的相关文章

随机推荐