轻松玩转 Scikit-Learn 系列 —— 线性回归及 ML 相关评价标准

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

线性回归可能是机器学习中最简单、最基础的算法了。但一定不要因为它简单就轻视它的存在,因为它也是很多更高级机器学习算法的基础,比如多项式回归、岭回归、 LASSO 回归等。线性回归的核心归结为求解正规方程(由样本特征x所得预测值y'和实际值y差的平方和,对x求偏导并使其为0所得的方程组),也就是利用最小二乘法求解方程系数。当x为一个n维向量时,方程的物理意义也被扩展为求解一个n维超平面前的系数。在介绍线性回归之前,让我们先了解下衡量线性回归预测结果好坏的指标。

1、相关评价标准

1)均方误差 MSE (Mean Squared Error) :

4eee70df58e0c96695919ac295de0c504773405e

2)均方根误差 RMSE (Root Mean Squared Error) :

c189b2e0cbd18347cf73d2ca133a19806b6c2fe7

3)平均绝对误差 MAE (Mean Absolute Error) :

8b90e3ed80ae12e7ef09707c36ebb5fcb7eb3174

4)R方误差 ( R Squared ) :

23cf004191ac8bd874151048ba247b31bef8a9f3

应根据不同的应用场景和需求来选择不同的评价指标,没有其中一个平白无故的比另一个更好。具体来说,RMSE就是MSE的平方根,但它的量纲与要预测的y值的量纲相同,更有意义,MAE 因为带有绝对值而不方便求导,而 R Squared 因为无量化而更具有通用的比较性。我们可以通过向量化计算在 Python 中很容易的实现这4中指标的计算。同时,你也可以直接在 scikit-learn 中的 metrics 中直接调用 mean_squared_error,mean_absolute_error,r2_score 方法直接计算得到 MSE、MAE、R Squared。

2、线性回归

1)小引—— kNN 回归

首先我们先回顾下上次的 kNN ,其实 kNN 不仅可以用于分类,还可以用来解决回归问题。以此来引入回归问题的鼻祖——线性回归。

Talk is cheap, let's see the code!

710a11651bb61ac026f166092a8cc7a9b11659db

结果如下:

MAE: 3.651057, MSE: 25.966010, R2 Accuracy: 0.464484
0.602674505081

准确率并不是太高呢!比我抛硬币好不了多少,是不是因为我们使用的是 kNN 回归默认的模型,而没有调整任何超参数的原因的。那我们接下来先介绍下 kNN 回归的各个超参数,再用网格搜索的方式搜索 kNN 回归的最佳超参数。

 ●  n_neighbors ——即 k 值,默认n_neighbors=5;weights:表示是否为距离加权重,默认 weights=’uniform’;
 ●  algorithm —— 用于计算距离的算法,默认algorithm=’auto’,即根据 fit 方法传入值选择合适算法;
 ●  p ——明可夫斯基距离的指数,默认p=2(欧氏距离),p=1 为曼哈顿距离;
 ●  n_jobs ——调用CPU的核心数,默认 n_jobs=None;

上次我们学习kNN分类器的时候,用到了2层 for 循环搜索最佳超参数,这次我们直接调用 scikit-learn 中的方法搜索 kNN 回归的最佳超参数。实现如下:

21f17c3ddf9880546ce94268253cfdc5c2225098

结果如下:

{'n_neighbors': 6, 'p': 1, 'weights': 'distance'}
0.735424490609

好像准确度还不是很高呢!?是不是 kNN 这个算法太简单,已经落伍了呢?

其实,我们在选择一种机器学习方法的时候是受领域限制的,不同的领域,不同种类的数据可能就适合不同的机器学习方法,没有一种机器学习方法面对各种问题而无往不利,总是得到最佳结果(暂且不谈深度学习),而且模型准确率的高低还受到数据质量的影响。那么我接下来看看线性回归在波斯顿房价数据集上表现怎样。

2)Linear Regression

cb7782a7bb9b412616095f03c932e670518a8a4b

结果为 0.800891619952 。

80% 好像还不错,毕竟是默认模型嘛。让我们看下线性回归都有哪些超参数呢!

 ●  fit_intercept ——默认 fit_intercept=True,决定是否计算模型截距;
 ●  normalize ——默认 normalize=False,如果fit_intercept=True,X 会在被减去均值并除以 L2 正则项之前正则化;

 ●  n_jobs——计算时所使用的CPU核心数;

00485c806dc7d087b685186beab991658ab2fb90

结果为:

array([ -1.14235739e-01, 3.12783163e-02, -4.30926281e-02,
-9.16425531e-02, -1.09940036e+01, 3.49155727e+00,
-1.40778005e-02, -1.06270960e+00, 2.45307516e-01,
-1.23179738e-02, -8.80618320e-01, 8.43243544e-03,
-3.99667727e-01])

线性回归的特征系数是具有实际意义的,系数为负说明 y 值与该特征负相关,系数为正说明该特征与 y 值正相关,且值越大,相关度越高。我们拿波斯顿房价数据集举例说明,通过查找官方文档,我们得到这13个特征(按顺序排列)的实际意义:

Attribute Information (in order)

 ●   CRIM——per capita crime rate by town
 ●   ZN——proportion of residential land zoned for lots over 25,000 sq.ft.
 ●   INDUS——proportion of non-retail business acres per town
 ●   CHAS——Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
 ●   NOX——nitric oxides concentration (parts per 10 million)
 ●   RM——average number of rooms per dwelling
 ●   AGE——proportion of owner-occupied units built prior to 1940
 ●   DIS——weighted distances to five Boston employment centres
 ●   RAD——index of accessibility to radial highways
 ●   TAX——full-value property-tax rate per $10,000
 ●   PTRATIO——pupil-teacher ratio by town
 ●   B——1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
 ●   LSTAT——% lower status of the population
 ●   MEDV——Median value of owner-occupied homes in $1000's

为方便对应,我们将这13个特征的名字按其系数大小排下序:

bf492a6483f6b90d7f03f46dc2f87425bffc84ba

结果为

array(['NOX', 'DIS', 'PTRATIO', 'LSTAT', 'CRIM', 'CHAS', 'INDUS', 'AGE',
'TAX', 'B', 'ZN', 'RAD', 'RM'], 

由此可知特征 'NOX' 与房价的负相关度最高,查看官方文档说明可知,其代表———房子附近的氮氧化物的浓度,我们根据常识就知道,氮氧化物有毒,房子附近氮氧化物浓度高的,价钱肯定便宜。特征 'RM' 代表房子的平均房间数,同样的,根据我们的生活经验,房间数越多的房子一般也越贵,大家想想是不是。

今天的分享就到这里了,关于 Linear Regression 还有很多超参数的调整,请小伙伴们自己在下面亲手操作下,会收获更多哦。还是那句话,如果你们中有大神路过,还请高抬贵脚,勿踩勿喷,嘻嘻。期待与小伙伴们共同进步!


原文发布时间为:2018-11-22

本文作者:蜉蝣扶幽

本文来自云栖社区合作伙伴“小詹学Python”,了解相关信息可以关注“小詹学Python”。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
4月前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
200 3
|
4月前
|
机器学习/深度学习 数据采集 算法
深入调查研究Scikit-learn
【11月更文挑战第11天】
87 1
|
1月前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
58 9
Python与机器学习:使用Scikit-learn进行数据建模
|
4月前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
125 3
|
4月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
53 1
|
5月前
|
机器学习/深度学习 数据可视化 Python
使用最小二乘法进行线性回归(Python)
【10月更文挑战第28天】本文介绍了使用Python实现最小二乘法进行线性回归的步骤,包括数据准备、计算均值、计算斜率和截距、构建线性回归方程以及预测和可视化结果。通过示例代码展示了如何从创建数据点到最终绘制回归直线的完整过程。
161 2
|
4月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
144 0
|
5月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
53 1
|
5月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
148 2
|
5月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
254 1