快速入门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数据结果是非常不理想的。

目录
相关文章
|
5天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
16 3
|
10天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
20 1
|
16天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
21天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
16 1
|
22天前
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
18 2
|
23天前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
195 3
|
22天前
|
机器学习/深度学习 存储 算法
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
24 1
|
23天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
45 2
|
23天前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
44 1
|
24天前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
49 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练