快速入门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 红色圆点)

目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
2月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
109 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
61 2
|
2月前
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
52 0
|
2月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
72 0
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
21天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
105 80
|
10天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
33 14
下一篇
开通oss服务