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

目录
相关文章
|
1天前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
2天前
|
机器学习/深度学习 人工智能 数据挖掘
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第6天】在人工智能领域,机器学习已成为核心技术。本文指导初学者使用Python与Scikit-learn入门机器学习,涵盖基本概念、环境搭建、数据处理、模型训练及评估等环节。Python因简洁性及其生态系统成为首选语言,而Scikit-learn则提供了丰富工具,简化数据挖掘与分析流程。通过实践示例,帮助读者快速掌握基础知识,为进一步深入研究奠定坚实基础。
9 4
|
10天前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
40 3
|
10天前
|
机器学习/深度学习 数据采集 分布式计算
【Python篇】深入机器学习核心:XGBoost 从入门到实战
【Python篇】深入机器学习核心:XGBoost 从入门到实战
38 3
|
10天前
|
机器学习/深度学习 数据采集 算法
【Python篇】从零到精通:全面分析Scikit-Learn在机器学习中的绝妙应用
【Python篇】从零到精通:全面分析Scikit-Learn在机器学习中的绝妙应用
25 2
|
10天前
|
机器学习/深度学习 算法 数据可视化
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧2
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
16 1
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
7天前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
3天前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
28天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
64 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面