资讯详情

机器学习:线性回归1(基本概念和基本api)

📅 2026/11/5 6:39:28 | 华诺云谱 👁 阅读
机器学习:线性回归1(基本概念和基本api)
目录标题一、线性回归概念和公式二、损失函数前置概括回归模型评估三种方法是不够的1.为啥不能单独看MSE来评估模型2.MAE 和 RMSE组合能看出模型好坏3.mae和rmse结合还是看数值没有意义都没法拿到真实值。还是没法判断模型好坏啊4.R²和mape从那来三、损失函数四、误差和残差(理解一下)五、api一、线性回归概念和公式二、损失函数前置概括回归模型评估三种方法,分类模型评估用精准率Mean Absolute Error: 平均绝对误差Mean Square Error:均方误差Root Mean Square Error : 均方根误差图中例子验证RMSE MAE 两个样本误差分别是13 用MAE 就是2 用RMSE就是2.236回归模型评估三种方法是不够的1.为啥不能单独看MSE来评估模型缺乏基准没有对比就没有伤害假设你预测房价算出来 MSE 是 10 万。如果房价本身是 100 万误差 10 万说明模型勉强能用。如果房价本身是 15 万比如买车误差 10 万说明模型简直是灾难。单独看 MSE 的数值你根本不知道这个 10 万是“好”还是“坏”。必须要有基准线比如用均值预测的 MSE或者行业公认的合理误差范围做对比才知道模型的价值。掩盖了极端的错误异常值陷阱MSE 的公式是( E r r o r 2 (Error^2(Error2)。因为平方的存在它会极其严厉地惩罚大误差。假设有 5 个预测4 个样本预测得非常准误差都是 0。1 个样本预测极其离谱误差是 10。MSE 算下来是( 10 2 5 20 (\frac{10^2}{5} 20(5102​20)。单看 MSE 好像还能接受但实际上你的模型在某个特定样本上犯了灾难性的错误。在医疗、金融风控等领域“平均误差小但偶尔犯一次大错”是绝对不被允许的。MSE 无法体现这种“极端错误”的分布。受数据量纲量级影响不直观MSE 的单位是原单位的平方。比如预测身高米MSE 算出来可能是 0.04 平方米。“平方米”这个单位对人来说毫无直观感受你没发跟业务方解释“0.04 平方米的误差”到底意味着什么。这就是为什么我们通常会把 MSE 开根号变成 RMSE均方根误差这样单位就变回了米能直观对比。忽略了误差的方向MSE 平方之后正误差和负误差都变成了正数。预测值比真实值高 5。预测值比真实值低 5。在 MSE 眼里是一样的。但在某些业务中比如库存预测“预测多了导致库存积压”和“预测少了导致断货”的代价是完全不一样的。MSE 无法区分这个方向。掩盖了模型的过拟合你只盯着 MSE可能会发现它在训练集上无限趋近于 0。但这并不代表模型好反而可能说明它把训练集的噪声都背下来了过拟合。这时候必须结合验证集/测试集的误差、以及( R 2 (R^2(R2)决定系数等指标综合看。2.MAE 和 RMSE组合能看出模型好坏一个极端的例子假设你有两个模型预测了 5 个样本的真实值真实值都是 100模型 A偶尔犯大错4 次预测极准误差为 0但 1 次预测严重翻车预测了 1000误差 900。模型 B稳定但平庸5 次预测都差一点每次误差都是 100。我们来算算它们的 MAE 和 RMSEMAE算平均绝对值模型 A(0000900) / 5 180模型 B(100100100100100) / 5 100RMSE先平方求平均再开根号模型 A( ( 0 2 0 2 0 2 0 2 900 2 ) / 5 162000 ≈ 402.5 (\sqrt{(0^2 0^2 0^2 0^2 900^2)/5} \sqrt{162000} \approx 402.5((020202029002)/5​162000​≈402.5)模型 B( ( 100 2 × 5 ) / 5 10000 100 (\sqrt{(100^2 \times 5)/5} \sqrt{10000} 100((1002×5)/5​10000​100)怎么通过这两个数字看模型好坏看 RMSE 和 MAE 的“差距”诊断模型有没有大错你看模型 AMAE 是 180但 RMSE 飙升到了 402.5。RMSE 远大于 MAE。诊断因为 RMSE 有平方操作它会极其严厉地惩罚那个 900 的大误差。这说明模型 A 极不稳定虽然大部分时候准但偶尔会犯致命大错这在医疗、金融领域是致命的。你看模型 BMAE 是 100RMSE 也是 100。两者相等。诊断因为每个样本的误差都一样没有平方惩罚的放大效应。说明模型 B 没有犯大错只是整体上偏了 100。看具体数值的量级评估整体水平单看数值没有意义必须结合真实值。如果你的真实值是一千万误差 100 那叫极好如果真实值只有 10误差 100 那就是灾难。因为 RMSE 开过根号它的单位和真实值一样比如都是“万元”。如果 RMSE 50 万元你能直接跟老板说“我们的预测平均偏离了 50 万”。而 MAE 也是一样的单位。这两个数值可以互相参考。️实战中怎么综合判断MAE 偏低RMSE 也偏低好模型。预测又准又稳定。MAE 很低但 RMSE 极高“神经刀”模型。大部分准但极其容易出极端离群点大错。需要排查数据里的异常值或者换模型。MAE 和 RMSE 都很高且差不多平庸模型。整体误差都很大系统性偏差可能特征没选好或者模型根本没学到东西。MAE 很高RMSE 更高糟糕的模型。不仅整体偏差大还经常犯离谱的错。3.mae和rmse结合还是看数值没有意义都没法拿到真实值。还是没法判断模型好坏啊单看 MAE 和 RMSE 的绝对数值比如算出来 MAE 15如果不知道真实背景确实毫无意义根本没法判断模型好不好在实际工程和业务中我们从来不指望只看 MAE 和 RMSE 的裸数字就能判断模型好坏。为了判断它我们通常依靠以下三种“参照物”拿“傻瓜模型”做参照Baseline如果老板问你“你这个模型预测出来的 RMSE 是 15到底行不行”你通常会说“老板如果我们不搞这个 AI直接把历史平均值当成预测值算出来的 RMSE 是 30。我们现在做到了 15误差降低了一半”看数值的意义在于“对比”。只要你的模型指标比“瞎猜模型如用平均数预测”或者“上一版旧模型”好它就是好模型。拿“业务容忍度”做参照在真实业务里好不好不是看数学而是看“这错得起吗”。如果是预测明天的气温RMSE 是 1.5 度那非常完美。如果是预测外卖送到的时间RMSE 是 15 分钟那顾客要饿死了这模型就是垃圾。如果是预测全国明年 GDP 总额单位万亿元RMSE 是 0.5 万亿元这可能已经是极高精度的神级模型了。所以模型的评估必须由业务人员设定一条“及格线”。引入自带“标准范围”的指标这才是解药为了摆脱“绝对数值”的困扰我们其实有自带评价标准的指标( R 2 (R^2(R2)决定系数它的数值通常在 0 到 1 之间。如果( R 2 (R^2(R2) 0.85意思是“我的模型能解释真实数据 85% 的波动”。这就自带了一把尺子1 就是满分0 就是不及格跟瞎猜没区别。看这个指标你不需要知道房价到底是多少。MAPE平均绝对百分比误差它是百分比比如算出 MAPE 8%。意思是“我的预测误差平均在 8% 左右”。这也自带尺子通常低于 10% 就算相当不错的商业模型了。回到你最开始的提问那为啥还要把 MAE 和 RMSE 结合看虽然它们不能单独告诉你“模型及格没”但把两者放在一起能告诉你“模型患了什么病”。因为有了( R 2 (R^2(R2) 或者 MAPE你已经知道这个模型“及格了”。这时候如果MAE 10, RMSE 10说明误差很均匀模型很稳定。MAE 10, RMSE 50说明模型虽然及格了但“偶尔会犯大错”。你马上就知道接下来要去数据里清理极端的“异常值”了而不是继续无脑调模型。4.R²和mape从那来( R 2 (R^2(R2)决定系数R-Squared从哪来( R 2 (R^2(R2) 的诞生是为了回答一个灵魂拷问“我这个模型比起直接瞎猜用平均值猜到底强了多少”它的推导逻辑是一场“比烂大会”大傻瓜基准SST如果我什么模型都不用直接拿所有真实值的平均数去预测每个人。算一下这会有多大误差总平方和。我们的模型SSE用我们辛苦训练出来的模型去预测算一下残差平方和就是 MSE 乘上样本数。公式( R 2 1 − S S E S S T (R^2 1 - \frac{SSE}{SST}(R21−SSTSSE​)怎么理解这个公式如果我们的模型跟“用平均数瞎猜”一样烂SSE SST那( R 2 1 − 1 0 (R^2 1 - 1 0(R21−10)。如果我们的模型完美预测一点误差都没有SSE 0那( R 2 1 − 0 1 (R^2 1 - 0 1(R21−01)。所以( R 2 (R^2(R2) 的满分是 1及格线是 0。它自带刻度你不需要知道房价是几百万还是几万看( R 2 (R^2(R2) 就能知道模型解释了数据多少的波动。MAPE平均绝对百分比误差从哪来MAPE 的诞生是为了回答另一个痛点“在不同的量级下我到底错了百分之几”毕竟预测 100 万误差 1 万和预测 10 块误差 1 块前者误差大但后者更离谱。它的推导极其简单粗暴就是在 MAE平均绝对误差的基础上除以了真实值公式( M A P E 100 % n ∑ ∣ 真实值 − 预测值 真实值 ∣ (MAPE \frac{100\%}{n} \sum \left| \frac{\text{真实值} - \text{预测值}}{\text{真实值}} \right|(MAPEn100%​∑​真实值真实值−预测值​​)本质把误差变成了一个百分比。怎么理解如果算出 MAPE 5%意思是不管你卖的是几百万的豪车还是几块钱的辣条我的模型平均都会偏离真实价格的 5%。它直接消除了单位把误差归一化了。它们和 MAE/RMSE 的终极区别在哪MAE 和 RMSE 是“物理刻度”。它们保留了原始数据的单位比如元、米、千克。就像用尺子量身高量出来是 1.7 米。但这个 1.7 米到底算高还是矮取决于你量的是姚明还是潘长江。不知道真实背景(缺乏基准)( R 2 (R^2(R2) 和 MAPE 是“比例刻度”。它们没有单位自带评价标准。( R 2 (R^2(R2) 越接近 1 越好MAPE 越小比如小于 10%越好。⚠️补充一个坑实战必备虽然这两个指标很好但都有致命的软肋**( R 2 (R^2(R2) 的陷阱**如果你用非线性模型把训练集背得滚瓜烂熟( R 2 (R^2(R2) 可能会在测试集上变成负数说明模型比瞎猜平均值还要烂。MAPE 的致命伤公式里“除以真实值”如果真实值等于 0比如预测明天会不会下雨真实降雨量是 0那 MAPE 会直接除以 0 报错爆炸。所以在真实值可能为 0 的场景里通常会用 SMAPE对称平均绝对百分比误差来替代。总结MAE/RMSE 告诉你“偏了多远”( R 2 (R^2(R2)/MAPE 告诉你“偏得有多离谱”。这四个凑在一起才是评估回归模型的完整拼图。插曲在api中测试拟合中使用查看( R 2 (R^2(R2)/MAPEimportmatplotlibfromsklearn.linear_modelimportLinearRegression matplotlib.use(TkAgg)# 强制使用 TkAgg 后端importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.metricsimportmean_squared_error,root_mean_squared_error,mean_absolute_error,mean_absolute_percentage_error# 均方误差评估#固定随机数np.random.seed(6)#生成 -3 到3 之间的100个随机数 均匀分布xnp.random.uniform(-3,3,100)#模拟真实值 增加噪音y0.5*x**2x2np.random.normal(0,1,100)Xx.reshape(-1,1)# 一维转二维,因为线性回归需要二维数据estimatorLinearRegression()estimator.fit(X,y)print(权重,estimator.coef_)print(偏置,estimator.intercept_)#基于原始数据X 得出预测y_predestimator.predict(X)#评估print(均方误差,mean_squared_error(y,y_pred))print(均方根误差,root_mean_squared_error(y,y_pred))print(平均绝对误差,mean_absolute_error(y,y_pred))print(R^2分数,estimator.score(X,y))print(MAPE,mean_absolute_percentage_error(y,y_pred))plt.scatter(x,y)# 散点图 原始数据X 和真实yplt.plot(x,y_pred,colorred)plt.show()三、损失函数下面这个截图解释啥是损失函数和后面要学的怎么让损失函数最小下面这图里公式就是 损失函数前置概括 的三种方法四、误差和残差(理解一下)五、api准备数据时候注意点:(多个特征项,要二维即使目前只有一个特征也要写二维)# 导包fromsklearn.linear_modelimportLinearRegression# 案例演示线性回归API入门。# 1. 准备数据。(多个特征项,要二维即使目前只有一个特征也要写二维)x_train[[160],[166],[172],[174],[180]]# 训练集的特征y_train[56.3,60.6,65.1,68.5,75]# 训练集的标签x_test[[176]]# 测试集的特征# 2. 数据的基本处理这里不需要,没有null或缺省一类的。# 3. 特征工程(特征提取特征预处理特征降维特征选择特征组合)这里不需要。# 4. 模型训练# 4.1 创建模型对象。estimatorLinearRegression()# 4.2 具体的训练动作。estimator.fit(x_train,y_train)# 4.3 因为是线性回归模型我们可以查看下斜率(w权重)截距(b偏置)print(f权重:{estimator.coef_})# 0.92942177print(f偏置:{estimator.intercept_})# -93.27346938775514# 5. 模型预测。y_preestimator.predict(x_test)print(f预测值为:{y_pre})# 70.3047619# 6. 模型评估。(后面用 mse均方误差 rmse 均方根误差 mae 平均绝对误差)
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑