线性回归:从零理解机器学习预测

机器学习入门系列 · 第3篇
在之前的两篇文章当中, 我们掌握了搭建环境这项技能, 还学会了清洗数据的方法。现如今, 我们即将去学习首个真正具备能够"预测数值"能力的算法, 也就是线性回归。
在所有机器学习算法里头, 线性回归属于那最简单的、最基础的算法之一了, 然而它同样是能够帮助理解更为复杂算法的关键所在。把线性回归掌握住之后, 此后的逻辑回归也会变得容易理解许多, 神经网络亦是如此。
一、线性回归是什么?
线性回归有着这样的目标, 这个目标是很简单的, 那就是去寻找一条直线, 使得这条直线能够尽可能地"穿过"所有的数据点。
打个比方: 你清楚某个人的身高, 打算去猜测其体重。通常来讲, 身高越高的话, 体重也就越重。你绘制一幅图, 横轴设定为身高, 纵轴设定为体重, 将众多人的数据标注上去, 你就会发觉这些点大致顺着一条直线分布。
所做之事为线性回归的, 乃是自动找寻出那条"最佳直线"。拥有了此条直线, 一旦你输入任意一个身高值, 便能够计算出与之相对应的体重预测数值。
二、单变量线性回归:用一个特征预测
首先, 我们开启预测之旅, 起始点设定为最简单的那种情景, 也就是凭借单一特征展开预测行动。在此过程当中, 所运用的数据集合乃是自带的糖尿病数据集, 而我们此次预测行动的目标明确, 那便是依据患者的BMI, 即身体质量指数, 去实现对于疾病进展指数的预测操作。
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
diabetes = load_diabetes()
# 只取BMI这一个特征(第3列)
X = diabetes.data[:, 2:3]
y = diabetes.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
model = LinearRegression()
model.fit(X_train, y_train) # 训练模型
# 模型学到的公式:y = 系数 * BMI + 截距
print(f"y = {model.coef_[0]:.2f} * BMI + {model.intercept_:.2f}")
# 输出: y = 998.58 * BMI + 152.00
极其简明!模型所掌握到的公式为: 疾病进展等于998.58乘以BMI再加上152.0句号。这表明着BMI每增添一个单位(经标准化之后), 疾病进展指数预估会增添大概999点数。
三、怎么判断模型好不好?
模型训练完成了, 然而我们究竟要通过怎样的方式去知晓它预测精确与否呢? 存在着两个经常被使用的指标:
from sklearn.metrics import r2_score, mean_squared_error
y_pred = model.predict(X_test)
r2 = r2_score(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
# R² 得分: 0.2334 (仅用BMI这一个特征,解释了约23%的变化)
# 均方误差: 4061.83
仅仅使用BMI单一个特征, 结果显示R²大约只有0.23这样的数值。这一情况表明着, BMI尽管具备一定程度的预测能力, 然而仅仅依靠它却是远远不足能够达成目标的情况。
四、多变量线性回归:用多个特征一起预测
已知一个特征不足够, 那么我们便运用全部十个特征一同进行!这便是多变量线性回归。其原理依旧相同------寻觅一条"最佳直线", 唯独到如今需要在高维空间里寻觅。
# 使用全部10个特征
X_all = diabetes.data
X_train2, X_test2, y_train2, y_test2 = train_test_split(
X_all, y, test_size=0.2, random_state=42
)
model2 = LinearRegression()
model2.fit(X_train2, y_train2)
# 多变量 R²: 0.4526 (提升了约22个百分点!)
# 多变量 MSE: 2900.19 (误差大幅下降)
在运用10个特征之后, R²的数据从0.23提升至0.45, 提升幅度近乎达到一倍!均方误差同样从4061降低至2900, 使得预测变得更加准确了。
我们能够去瞧瞧每个特征所具备的那种"影响力", 此"影响力"实际上就是系数。系数呈现出的正负状况, 表明了该特征对于结果而言是属于正向的影响趋向还是负向的影响趋向, 而系数绝对值越大, 则意味着其影响力越大。
各特征的影响(系数):
age : 37.90 (正向------年龄越大,疾病进展越快)
sex : -241.96 (负向------性别有一定影响)
bmi : 542.43 (正向------BMI影响最大!)
bp : 347.70 (正向------血压越高,进展越快)
s1 : -931.49 (负向------血清指标1影响很大)
五、小结
今天我们学习了线性回归,核心要点:
就是在找着一条所谓的"最佳直线", 以此来对数据的关系予以描述, 这就是线性回归的实质所在。单变量与多变量, 只采用一个特征的情况被称作单变量, 而采用多个特征便被叫做多变量。R²以及MSE, R²越趋近于1越为良好, MSE越小则越佳。系数方面, 正数代表着是正向影响, 负数代指的是反向影响, 绝对值越大就越具重要性。
虽则线性回归简单, 然而它却是机器学习大厦的地基。在下一篇文章之中, 我们将要去学习一种跟线性回归名字极为相像、可是用途全然不同的算法, 那便是逻辑回归。它尽管名字里面带有"回归", 但实际上却是用以做分类的!