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

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

5.4 套索回归(Lasso Regression)


5.4.1类


sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001,warm_start=False, positive=False, random_state=None, selection='cyclic')


5.4.2 参数


参数

解释

alpha

float, 默认=1.0.乘以L1项的常数。默认为1.0alpha=0相当于一个普通的最小二乘法,由线性回归对象求解。由于数值原因,不建议对套索对象使用alpha=0。鉴于此,您应该使用LinearRegression对象。


5.4.3 属性


属性

解释

coef_

ndarray of shape (n_features,) or (n_targets, n_features)参数向量(成本函数公式中的w)。

dual_gap_

float or ndarray of shape (n_targets,)给定param alpha,优化结束时的双间隙,与y的每次观测形状相同。

sparse_coef_

sparse matrix of shape (n_features, 1) or (n_targets, n_features)拟合系数的稀疏表示。

intercept_

float or ndarray of shape (n_targets,)决策函数中的独立项。

n_iter_

int or list of int由坐标下降解算器运行以达到指定公差的迭代次数。


5.4.4方法


fit(X, y[, sample_weight, check_input])

用坐标下降法拟合模型。

get_params([deep])

获取此估计器的参数。

path(*args, **kwargs)

用坐标下降法计算弹性网径。

predict(X)

用线性模型预测。

score(X, y[, sample_weight])

返回预测的确定系数R2

set_params(**params)

设置此估计器的参数。


5.4.5套索回归分析make_regression无噪音数据

from sklearn.linear_model import Lasso
def Lasso_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 = lasso().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 Lasso()回归线(无噪音)"
       myutil.draw_line(X[:,0],y,clf,title)
       myutil.plot_learning_curve(Lasso(),X,y,title)
       myutil.show_pic(title)


输出

lr.coef_: [62.99450929] 
reg.intercept_: 0.04864585261562526
训练集得分: 99.98%
测试集得分: 99.98%

image.png

image.png


5.4.6套索回归分析make_regression数据

def Lasso_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 = Lasso().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 Lasso()回归线(有噪音)"
       myutil.draw_line(X[:,0],y,clf,title)
       myutil.plot_learning_curve(Lasso(),X,y,title)
       myutil.show_pic(title)


输出

lr.coef_: [67.98691254] 
reg.intercept_: 1.2985197378140656
训练集得分: 70.20%
测试集得分: 64.14%

image.png

image.png


5.4.7套索回归分析糖尿病数据

#对套索回归进行分析糖尿病数据
def Lasso_for_for_diabetes():
       myutil = util()
       X,y = datasets.load_diabetes().data,datasets.load_diabetes().target
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
       lr = LinearRegression().fit(X_train,y_train)
       print('线性回归,糖尿病数据训练集得分: {:.2%}'.format(lr.score(X_train,y_train)))
       print('线性回归,糖尿病数据测试集得分: {:.2%}'.format(lr.score(X_test,y_test)))
       title = "线性回归 糖尿病数据"
       myutil.plot_learning_curve(LinearRegression(),X,y,title)
       myutil.show_pic(title)
       #######################################################################
       lasso = Lasso().fit(X_train,y_train)
       print('alpha=1,糖尿病数据训练集得分: {:.2%}'.format(lasso.score(X_train,y_train)))
       print('alpha=1,糖尿病数据测试集得分: {:.2%}'.format(lasso.score(X_test,y_test)))
    print('alpha=1,糖尿病数据套索回归特征数: {}'.format(np.sum(lasso.coef_!=0)))
       title = "Lasso 糖尿病数据 alpha=1"
       myutil.plot_learning_curve(Lasso(),X,y,title)
myutil.show_pic(title)
       #######################################################################
       lasso10 = Lasso(alpha=10).fit(X_train,y_train)
       print('alpha=10,糖尿病数据训练集得分: {:.2%}'.format(lasso10.score(X_train,y_train)))
       print('alpha=10,糖尿病数据测试集得分: {:.2%}'.format(lasso10.score(X_test,y_test)))
    print('alpha=10,糖尿病数据套索回归特征数: {}'.format(np.sum(lasso.coef_!=0)))
       title = "Lasso 糖尿病数据 alpha=10"
       myutil.plot_learning_curve(Lasso(alpha=10),X,y,title)
       myutil.show_pic(title)
       #######################################################################
       lasso01 = Lasso(alpha=0.1).fit(X_train,y_train)
       print('alpha=0.1,糖尿病数据训练集得分: {:.2%}'.format(lasso01.score(X_train,y_train)))
       print('alpha=0.1,糖尿病数据测试集得分: {:.2%}'.format(lasso01.score(X_test,y_test)))
    print('alpha=0.1,糖尿病数据套索回归特征数: {}'.format(np.sum(lasso.coef_!=0)))
    title = "Lasso 糖尿病数据 alpha= 0.1"
       myutil.plot_learning_curve(Lasso(alpha=0.1),X,y,title)
       myutil.show_pic(title)
####################################################################### 
       title = "Lasso 波士顿房价数据 数据分布比较"
       plt.plot(lasso01.coef_,'s',label='套索回归 alpha=1')
    plt.plot(lasso0110.coef_,'^',label='套索回归 alpha=10')
       plt.plot(lasso01.coef_,'v',label='套索回归 alpha=0.1')
       plt.plot(lr.coef_,'o',label='线性回归 Regression')
       plt.xlabel(u'系数指数')
       plt.ylabel(u'系数大小')
       plt.hlines(0,0,len(lr.coef_))
       myutil.show_pic(title)


输出

线性回归,糖尿病数据训练集得分: 53.50%
线性回归,糖尿病数据测试集得分: 45.41%
alpha=1,糖尿病数据训练集得分: 36.73%
alpha=1,糖尿病数据测试集得分: 38.28%
alpha=1,糖尿病数据套索回归特征数: 3
alpha=10,糖尿病数据训练集得分: 0.00%
alpha=10,糖尿病数据测试集得分: -0.01%
alpha=10,糖尿病数据套索回归特征数: 0
alpha=0.1,糖尿病数据训练集得分: 52.36%
alpha=0.1,糖尿病数据测试集得分: 47.71%
alpha=0.1,糖尿病数据套索回归特征数: 7


由此可见,Alpha越小,特征数越多。


  • alpha=1,特征数为3,得分低,出现欠拟合。
  • alpha=0.1,降低alpha值可以加大得分,特征数提高到7。
  • alpha=0.01,测试集得分: 0.45<alpha=0.1的测试集得分: 0.48,说明降低alpha值让模型更倾向于出现过拟合现象。

image.png

image.png

image.png

image.png

   image.png


alpha =10 (^ 橘黄色上箭头)

alpha =1 (s 蓝色方块)

alpha = 0.1 (v 绿色下箭头)

线性:(o 红色圆点)

目录
相关文章
|
4天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
18 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
6天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
17 2
|
8天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
23 1
|
8天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
25 1
|
14天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
21 3
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
25天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
54 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。