快速入门Python机器学习(六)(上)

简介: 快速入门Python机器学习(六)(上)

5.2 岭(Ridge)回归、套索(Lasso)回归与弹性网络(Elastic Net)的基本概念


有些数据是不太符合线性关系的,但是我们还是希望使用线性回归,在这里数学家加入了正则化Regularization的概念。


5.2.1 岭回归(Ridge Regression)

正则化Regularization为所有系数的平方和,即L2范数,对应的回归方法叫做Ridge回归,岭回归。


image.png


岭回归(英文名:Ridge Regression, Tikhonov Regularization)由前苏联安德烈·季霍诺夫 20世纪40年代提出。它是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。岭回归牺牲训练集得分,获得测试集得分。适合密集矩阵


5.2.2 套索回归(Lasso Regression)

所有系数绝对值之和,即L1范数,对应的回归方法叫做套索(Lasso)回归。

image.png


在实践中,岭回归与套索回归首先岭回归。如果特征特别多,而某些特征更重要,具有选择性,那就选择套索(Lasso)回归可能更好。它适合稀疏矩阵。套索(Lasso)回归由加拿大学者罗伯特·提布什拉尼 1996年提出。


5.2.3 弹性网络(Elastic Net)

l弹性网络 是一种使用 L1, L2 范数作为先验正则项训练的线性回归模型。

l这种组合允许学习到一个只有少量参数是非零稀疏的模型,就像 Lasso 一样,但是它仍然保持 一些像 Ridge 的正则性质。我们可利用 L1_ratio 参数控制 L1 和 L2 的凸组合。

l弹性网络在很多特征互相联系的情况下是非常有用的。Lasso 很可能只随机考虑这些特征中的一个,而弹性网络更倾向于选择两个。

l在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge 的稳定性。


5.3 岭(Ridge)回归


Sklearn类的岭(Ridge)回归以sklearn.linear_model.Ridge来实现。


sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto')


属性


属性

解释

alpha

{float, ndarray of shape (n_targets,)}, 默认=1.0

正则化强度;必须是正浮点数。正则化改进了问题的条件,减少了估计的方差。值越大,正则化越强。Alpha对应于其他线性模型中的1/(2C),如logisticsregressionLinearSVC。如果传递了数组,则假定惩罚是特定于目标的。因此它们在数量上必须一致。

solver

{'auto','svd','cholesky','lsqr','sparse_cg','sag','saga'}, 默认='auto'

在计算例程中使用的解算器:

'auto'根据数据类型自动选择解算器。

'svd'使用X的奇异值分解来计算岭系数。对于奇异矩阵,比'cholesky'更稳定。

'cholesky'使用标准scipy.linalg.solve解决方案函数以获得闭式解。

'sparse_cg'使用共轭梯度解算器,如中所示scipy.sparse.linalg.cg。作为一种迭代算法,该求解器比'cholesky'更适用于大规模数据(可以设置tolmax iter)

'lsqr'使用专用的正则化最小二乘例程scipy.sparse.linalg.lsqr。它是最快的,并且使用迭代过程。

'sag'使用随机平均梯度下降,'sag'使用改进的无偏版本saga。这两种方法也都使用迭代过程,并且当n_samplesn_features都很大时,通常比其他解算器更快。

coef_

ndarray of shape

(1, n_features) or (n_classes, n_features).权重向量。

intercept_

float or ndarray of shape (n_targets,)决策函数中的独立项。如果fit_intercept=False,则设置为0.0

n_iter_

None or ndarray of shape (n_targets,).每个目标的实际迭代次数。仅适用于saglsqr解算器。其他解算器将不返回任何值。


方法

fit(X, y[, sample_weight])

拟合岭回归模型。

get_params([deep])

获取此估计器的参数。

predict(X)

用线性模型预测。

score(X, y[, sample_weight])

返回预测的确定系数R2

set_params(**params)

设置此估计器的参数。


5.3.1 对无噪音make_regression数据进行岭回归

from sklearn.linear_model import Ridge
def Ridge_for_make_regression():
       myutil = util()
       X,y = make_regression(n_samples=100,n_features=1,n_informative=2,random_state=8)
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
       clf = Ridge().fit(X,y)
       print('lr.coef_: {} '.format(clf.coef_[:]))
       print('reg.intercept_: {}'.format(clf.intercept_))
       print('训练集得分: {:.2%}'.format(clf.score(X_train,y_train)))
       print('测试集得分: {:.2%}'.format(clf.score(X_test,y_test)))
       title = "make_regression Ridge()回归线(无噪音)"
       myutil.draw_line(X[:,0],y,clf,title)
       cv = ShuffleSplit(n_splits=100,test_size=0.2,random_state=0)
       myutil.plot_learning_curve(clf,title,X,y,ylim=(0.9,1.01),cv=cv)


输出

lr.coef_: [63.7840862] 
reg.intercept_: 4.440892098500626e-15
训练集得分: 100.00%
测试集得分: 100.00%

image.png

image.png


5.3.2 对有噪音make_regression数据进行岭回归

def Ridge_for_make_regression_add_noise():
       myutil = util()
       X,y = make_regression(n_samples=100,n_features=1,n_informative=2,noise=50,random_state=8)
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
       clf = Ridge().fit(X,y)
       print('lr.coef_: {} '.format(clf.coef_[:]))
       print('reg.intercept_: {}'.format(clf.intercept_))
       print('训练集得分: {:.2%}'.format(clf.score(X_train,y_train)))
       print('测试集得分: {:.2%}'.format(clf.score(X_test,y_test)))
       title = "make_regression LinearRegression()回归线(有噪音)"
       myutil.draw_line(X[:,0],y,clf,title)
       cv = ShuffleSplit(n_splits=100,test_size=0.2,random_state=0)
       myutil.plot_learning_curve(clf,title,X,y,ylim=(0.9,1.01),cv=cv)


输出

lr.coef_: [68.77648945] 
reg.intercept_: 1.2498738851984426
训练集得分: 70.18%
测试集得分: 64.27%

image.png

image.png


由此可见,使用岭回归,对有噪音make_regression数据结果是非常不理想的。

目录
相关文章
|
11月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
441 7
|
9月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
1152 12
Scikit-learn:Python机器学习的瑞士军刀
|
8月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
378 1
|
12月前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
11月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
11月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
245 0
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
507 0
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练

热门文章

最新文章

推荐镜像

更多