1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > excel线性拟合的斜率_邵励治的机器学习 2 / 100 天:「简单线性回归」

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

时间:2024-07-15 09:00:14

相关推荐

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

前言

好了,我们闲言碎语不多讲,下面开始 机器学习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 pdimport numpy as npimport matplotlib.pyplot as pltdataset = pd.read_csv('studentscores.csv')X = dataset.iloc[ : , : 1 ].valuesY = dataset.iloc[ : , 1 ].valuesfrom 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。

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

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

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

问题 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.94.5 3.3 1.1 8.9 2.5 1.96.1 7.4 2.7 4.8 3.8 6.97.8 ]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

拟合直线的公式:

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.7105819420.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 完成一个统计学中的线性拟合问题了。

再接再厉!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。