Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 771|回复: 0

20171028机器学习之线性回归过拟合问题的解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-6-20 22:48:10 | 显示全部楼层 |阅读模式

    在函数中加入一个正则项:

     

    三种方式:

    一、Ridge回归(岭回归):

      优点:具有较高的准确性、鲁棒性以及稳定性

      缺点:求解速度慢

    二、Lasso回归:

      优点:求解速度快(原理降维计算,把数据维度中存在的噪音和冗余去除)

      缺点:相比Ridge回归没有较高的准确性、鲁棒性以及稳定性

    三、弹性网络:

      特点:综合了以上两种回归算法的特性。计算效率以及鲁棒性兼备。

     

     

    几种回归解决拟合问题的综合比较:

    GIthub:代码

    https://github.com/chenjunhaolefa/AI/blob/master/MachineLearning/LinearRegression03.py

    # coding=utf-8
    '''
    下面的代码是用一个小例子解决线性回归过拟合问题
    '''
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import pandas as pd
    import warnings
    import sklearn
    from sklearn.linear_model import LinearRegression, LassoCV, RidgeCV, ElasticNetCV
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline
    from sklearn.linear_model.coordinate_descent import ConvergenceWarning
    
    #解决画图产生的中文乱码问题
    mpl.rcParams['font.sans-serif']=[u'simHei']
    mpl.rcParams['axes.unicode_minus']=False
    
    #生成一段数据来测试一下拟合问题
    np.random.seed(100)
    np.set_printoptions(linewidth=1000, suppress=True)
    N = 10
    x = np.linspace(0, 6, N) + np.random.randn(N)
    y = 1.8*x**3 + x**2 - 14*x - 7 + np.random.randn(N)
    x.shape = -1, 1
    y.shape = -1, 1
    
    #模型
    models = [
        Pipeline([
                ('Poly', PolynomialFeatures()),
                ('Linear', LinearRegression(fit_intercept=False))
            ]),
        Pipeline([
                ('Poly', PolynomialFeatures()),
                ('Linear', RidgeCV(alphas=np.logspace(-3,2,50), fit_intercept=False))
            ]),
        Pipeline([
                ('Poly', PolynomialFeatures()),
                ('Linear', LassoCV(alphas=np.logspace(-3,2,50), fit_intercept=False))
            ]),
        Pipeline([
                ('Poly', PolynomialFeatures()),
                ('Linear', ElasticNetCV(alphas=np.logspace(-3,2,50), l1_ratio=[.1, .5, .7, .9, .95, 1], fit_intercept=False))
            ])
    ]
    
    plt.figure(facecolor='W')
    degree = np.arange (1, N, 2)  # 定义函数的阶数  X^2代表2阶函数 N表示N阶
    dm = degree.size
    colors = []  # 颜色
    for c in np.linspace (16711680, 255, dm):
        colors.append ('#%06x' % c)
    titles = [u'线性回归', u'Ridge回归', u'Lasso回归', u'ElasticNet']
    
    for t in range(4):
        model = models[t]
        plt.subplot(2, 2, t + 1)
        plt.plot(x, y, 'ro', ms=5, zorder=N)
    
        for i, d in enumerate(degree):
            model.set_params(Poly__degree=d)
    
            model.fit(x, y.ravel())
    
            lin = model.get_params('Linear')['Linear']
    
            output = u'%s:%d阶,系数为:' % (titles[t], d)
            print output, lin.coef_.ravel()
    
            x_hat = np.linspace(x.min(), x.max(), num=100)
            x_hat.shape = -1, 1
    
            y_hat = model.predict(x_hat)
    
            s = model.score(x, y)
    
            z = N - 1 if (d == 2) else 0
            label = u'%d阶, 正确率=%.3f' % (d, s)
            plt.plot(x_hat, y_hat, color=colors, lw=2, alpha=0.75, label=label, zorder=z)
    
        plt.legend(loc='upper left')
        plt.grid(True)
        plt.title(titles[t])
        plt.xlabel('X', fontsize=16)
        plt.ylabel('Y', fontsize=16)
    
    plt.tight_layout(1, rect=(0, 0, 1, 0.95))
    plt.suptitle(u'各种不同线性回归过拟合显示', fontsize=22)
    plt.show()
    

      

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-25 16:12 , Processed in 0.063487 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表