scikit-learn线性回归模型实例
一、理论知识
什么是线性回归?
线性回归是一种基础的机器学习算法,它试图通过建立一个线性方程来描述输入特征(自变量)与输出结果(因变量)之间的关系。
在最简单的情况下,一元线性回归可以表示为:
y = wx + b
其中:
- y 是预测值
- x 是输入特征
- w 是权重(系数)
- b 是偏置(截距)
在多元线性回归中,公式扩展为:
y = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
线性回归的目标
线性回归的目标是找到最佳的系数(w)和截距(b),使得预测值与实际值之间的误差最小。通常使用均方误差(MSE)作为评价标准:
MSE = (1/n) * Σ(y实际 - y预测)²
二、详细步骤
1. 导入必要的库
我们可以自己从0开始写代码去实现线性回顾,但是完全没必要!因为它是一个非常成熟的算法,已经有现成的工具可以供我们使用,比如scikit-learn库中的LinearRegression类,它就是一个实现线性回归的工具。
要使用它,我们首先要导入它。
from sklearn.linear_model import LinearRegression
2. 准备数据
机器学习是要从数据中学习,因此我们必须首先准备一些数据。
假设你从老师的积分表中看到了老师记录的8个同学的平时成绩,和期末考试成绩,以及他们的最终得分。
如A同学:平时分80,期末考试86,最终得分84.2
B同学:平时分82,期末考试80,最终得分80.6
…
那么我可以用如下的方式构造这些数据。
# 注意x是多维数组,每行代表一个同学的平时分和考试分,一共八行,对应8个同学
x = [[80, 86],
[82, 80],
[85, 78],
[90, 90],
[86, 82],
[82, 90],
[78, 80],
[92, 94]]
# y是一维数组,每个数代表一个同学的最终评分,与x的每行对应。
y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]
这里我们准备了训练数据:
- x 是输入特征,每一行代表一个样本,每个样本有两个特征(代表平时成绩和期末成绩)
- y 是目标值,代表该同学该课程的最终评分
假设你只看到了上面8个同学的分数,那么你如何根据你自己的平时分和期末考试得分推断你的最终得分呢?
这就是一个机器学习问题。
我们并不清楚老师在最终分数计算的时候,各个成绩是如何计算比重的,因此我们可以假设老师采用的是下面这样的模型:
最终得分 = w1*平时分 + w2*期末考试得分 + 截距
数学模型即:
y = w1*x1 + w2*x2 + b
其中,w1和w2就是各部分所占的权重,或者说是系数,反应了不同部分的重要程度
b则为截距,当x1=x2=0时,b的值。例如,可能你平时分和考试得分全是0分,但是老师为了你的面子,把b设置为30分!
如果我们知道了系数w1和w2,以及截距b,那么上面的公式就是一个已知的模型
我们只要带入任意同学的平时成绩x1和期末成绩x2,就可以求出ta的最终得分。
接下来,我们构建一个线性回归模型,让它从数据中去学习这个规律,试图求解出系数w1和w2,以及截距b
3. 实例化估计器
# 实例化一个估计器,该估计器实际上就是一个线性回归对象
estimator = LinearRegression()
这行代码只是创建了一个LinearRegression对象,它将用于训练模型,但是暂时还没开始训练(学习)。
4. 模型训练
# 模型训练
estimator.fit(x, y)
fit
方法使用训练数据来学习模型参数(系数w和截距b)。在这个过程中,算法会寻找最佳的系数值w和截距b,使得预测误差最小。
这行代码运行完成后,就已经获得了系数和截距的具体数字。
5. 使用模型进行预测
假设你的平时成绩是80,期末成绩是100,那么你的最终成绩是多少分呢?
这时候,我们就可以利用刚训练的模型来进行预测。
# 调用函数进行预测
print("预测值是:\n", estimator.predict([[80, 100]]))
注意,这里我们虽然只预测了一个人的最终成绩,但是输入x也必须以多维数组的方式输入。
6. 查看模型系数
# 查看一下第4步训练得到的系数值
coef = estimator.coef_
print("系数是:\n", coef)
coef_
属性包含了模型学习到的系数(权重)。这些系数表示每个特征对预测结果的影响程度。
三、总结
在这个例子中,我们可能是在预测学生的综合成绩:
- 我们有8个学生的数据,每个学生有平时成绩和期末成绩(x)和一个最终的综合评分(y)
- 我们训练了一个线性回归模型,学习不同成绩部分与最终评分之间的关系
- 然后我们使用这个模型来预测一个新学生(你)的综合评分
- 最后,我们查看了模型的系数,这些系数告诉我们平时成绩和期末成绩对最终评分的影响程度
例如,如果系数是[0.3, 0.7],这意味着:
- 平时成绩每提高1分,预计最终评分会提高0.3分
- 期末考试每提高1分,预计最终评分会提高0.7分
这表明期末考试对最终评分的影响更大。
通过这种方式,线性回归不仅可以用于预测,还可以帮助我们理解不同特征的重要性。
四、完整代码
# 导入LinearRegression类,这是scikit-learn库中实现线性回归的工具
from sklearn.linear_model import LinearRegression
# 准备训练数据
x = [[80, 86], # 第1个样本的两个特征值
[82, 80], # 第2个样本的两个特征值
[85, 78], # 第3个样本的两个特征值
[90, 90], # 第4个样本的两个特征值
[86, 82], # 第5个样本的两个特征值
[82, 90], # 第6个样本的两个特征值
[78, 80], # 第7个样本的两个特征值
[92, 94]] # 第8个样本的两个特征值
# y是目标值数组,对应每个样本的输出值(可能代表最终的综合评分)
y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]
# 创建线性回归模型的实例,这一步只是创建了模型对象,还没有进行训练
estimator = LinearRegression()
# 使用fit方法训练模型,这一步会根据提供的x和y数据,计算出最佳的系数w和截距b
estimator.fit(x, y)
# 获取模型的系数(权重),coef_属性是一个系数数组,coef_ = [w1,w2...wn]
coef = estimator.coef_
print("系数是:\n", coef)
# 获取截距b
intercept = estimator.intercept_
print("截距是:", intercept)
# 使用训练好的模型进行预测,这里预测特征值为[80, 100]的样本的目标值
print("预测值是:\n", estimator.predict([[80, 100]]))
评论 (0)
暂无评论,来发表第一条评论吧!