实验楼机器学习挑战赛-----线性回归拟合并绘图

def linear_plot():
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    data = [[5.06, 5.79], [4.92, 6.61], [4.67, 5.48], [4.54, 6.11], [4.26, 6.39],
            [4.07, 4.81], [4.01, 4.16], [4.01, 5.55], [3.66, 5.05], [3.43, 4.34],
            [3.12, 3.24], [3.02, 4.80], [2.87, 4.01], [2.64, 3.17], [2.48, 1.61],
            [2.48, 2.62], [2.02, 2.50], [1.95, 3.59], [1.79, 1.49], [1.54, 2.10]]
    data=np.array(data)
    x=np.array(data[:,0])
    y=np.array(data[:,1])
    fig=plt.figure()
    plt.scatter(x,y)
    x_mean = np.mean(x)
    y_mean = np.mean(y)

    up = np.sum((x - x_mean) * (y- y_mean))
    down = np.sum((x - x_mean) * (x - x_mean))
    w= up / down
    w=np.round(w,2)
    b= y_mean - w* x_mean
    b=np.round(b,2)
    plt.plot(x,w*x+b,c='red')
    fig.show()
    return w,b,fig

def linear_plot1():
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression
    data = [[5.06, 5.79], [4.92, 6.61], [4.67, 5.48], [4.54, 6.11], [4.26, 6.39],
            [4.07, 4.81], [4.01, 4.16], [4.01, 5.55], [3.66, 5.05], [3.43, 4.34],
            [3.12, 3.24], [3.02, 4.80], [2.87, 4.01], [2.64, 3.17], [2.48, 1.61],
            [2.48, 2.62], [2.02, 2.50], [1.95, 3.59], [1.79, 1.49], [1.54, 2.10]]
    data=np.array(data)
    x = np.array(data[:, 0])

    y=np.array(data[:,1])

    l=LinearRegression()

    l.fit(x.reshape(-1,1),y.reshape(-1,1))
    w=l.coef_
    b=l.intercept_
    w = np.round(w, 2)
    b = np.round(b, 2)

    y_predict = l.predict(x.reshape(-1,1))
    fig=plt.figure()
    plt.scatter(x,y)
    plt.plot(x,y_predict,c='r')
    plt.axis([0,7,0,8])
    plt.show()
    return w,b,fig

介绍

线性回归是机器学习中最基础、最重要的方法之一。接下来,你需要根据题目提供的数据点,完成线性拟合,并绘制出图像。

目标

题目给出一个二维数组如下,共计 20 个数据样本。

data = [[5.06, 5.79], [4.92, 6.61], [4.67, 5.48], [4.54, 6.11], [4.26, 6.39],
        [4.07, 4.81], [4.01, 4.16], [4.01, 5.55], [3.66, 5.05], [3.43, 4.34],
        [3.12, 3.24], [3.02, 4.80], [2.87, 4.01], [2.64, 3.17], [2.48, 1.61],
        [2.48, 2.62], [2.02, 2.50], [1.95, 3.59], [1.79, 1.49], [1.54, 2.10], ]

你需要根据这 20 个样本,使用线性回归拟合,得到自变量系数及截距项。

\displaystyle y(x, w) = wx + by(x,w)=wx+b

其中,ww 即为自变量系数,bb 则为常数项。

最后,需要使用 Matplotlib 将数据样本绘制成散点图,并将拟合直线一并绘出。

要求

  • 全部代码写在 linear_plot() 函数内部。

  • 计算出自变量系数 ww 及截距项 bb 的数值,保留两位小数(浮点数类型)并返回。

  • 绘制出样本散点图,并根据参数将拟合直线绘于图中,最后返回绘图对象。

  • 代码保存在 linear_regression.py 文件中,并将该文件放置在 /home/shiyanlou/Code 路径下方。

提示

你可以使用自行实现的最小二乘法函数计算 ww 和 bb 的值,也可以使用 scikit-learn 提供的线性回归类完成。提示代码如下:


def linear_plot():
    """
    参数:无

    返回:
    w -- 自变量系数, 保留两位小数
    b -- 截距项, 保留两位小数
    fig -- matplotlib 绘图对象
    """

    data = [[5.06, 5.79], [4.92, 6.61], [4.67, 5.48], [4.54, 6.11], [4.26, 6.39],
            [4.07, 4.81], [4.01, 4.16], [4.01, 5.55], [3.66, 5.05], [3.43, 4.34],
            [3.12, 3.24], [3.02, 4.80], [2.87, 4.01], [2.64, 3.17], [2.48, 1.61],
            [2.48, 2.62], [2.02, 2.50], [1.95, 3.59], [1.79, 1.49], [1.54, 2.10], ]

    ### TODO: 线性拟合计算参数 ###

    w = None
    b = None

    fig = plt.figure() # 务必保留此行,设置绘图对象

    ### TODO: 按题目要求绘图 ### 

    return w, b, fig # 务必按此顺序返回

如需使用 scikit-learn, Pandas 等第三方模块,可以通过 /home/shiyanlou/anaconda3/bin/python 路径执行。

图像示例:

此处输入图片的描述

知识点

  • 线性回归拟合
  • Matplotlib 绘图
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值