• 5.线性回归算法


    1.本节重点知识点用自己的话总结出来,可以配上图片,以及说明该知识点的重要性

    线性回归的应用以及它的代码实现:

     

     线性回归的原理:

    数组和矩阵的重要特性:

    对于权重的求解:

     梯度下降算法原理:

     梯度下降的代码实现:

    import random
    import time
    import matplotlib.pyplot as plt
    _xs = [0.1*x for x in range(0, 10)]  # 自己造一些数据
    _ys = [12*i+4 for i in _xs]
    print(_xs)
    print(_ys)
    # 实现梯度下降
    w = random.random()
    b = random.random()
    
    a1 = []
    b1 = []
    for i in range(100):
        for x, y in zip(_xs, _ys):
            o = w*x + b  # 预测值
            e = (o-y)  # 计算误差
            loss = e**2 # 计算损失
            # 求导
            dw = 2*e*x
            db = 2*e*1
            # 梯度下降
            w = w - 0.1*dw
            b = b - 0.1*db
            print('loss={0},w={1},b={2}'.format(loss, w, b))
        a1.append(i)
        b1.append(loss)
        plt.plot(a1, b1)
        plt.pause(0.1)
    
    plt.show()

    梯度下降的运行结果:

    2.思考线性回归算法可以用来做什么?(大家尽量不要写重复)

      线性回归可以用于:

      (1)音乐流行趋势预测

      (2)电影票房预估

      (3)学生成绩排名预测

    3.自主编写线性回归算法 ,数据可以自己造,或者从网上获取。(加分题)

     答:广告销量预测将来的投入和收益之间的关系。

    Advertising数据集是关于广告收益与广告在不同的媒体上投放的相关数据,分别是在TV,Radio,Newspaper三种媒体上投放花费与,投放所产生的收益的数据。

    (1)查看Advertising数据集:

     (2)线性回归实现广告销量预测

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    import matplotlib as mpl
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

    # 读取数据
    data = pd.read_csv('advertising.csv', index_col=0)
    #data1 = data[data['TV'].notna()] # 把有空值的一行去掉
    x = data1.iloc[:, :3] # 自变量
    y = data1.iloc[:, 3] # 因变量

    mpl.rcParams['font.sans-serif'] = ['simHei']
    mpl.rcParams['axes.unicode_minus'] = False
    # 划分训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)

    model = LinearRegression() # 构建模型
    model.fit(x_train, y_train) # 训练模型
    # 查看模型参数
    model.coef_ # 输出模型的权值
    model.intercept_ # 截距
    # 将自变量与对应系数进行打包
    feature = ['TV', 'Radio', 'Newspaper']
    a = zip(feature, model.coef_)
    for i in a:
    print(i)
    pre = model.predict(x_train) # 预测
    r2_score(y_train, pre)
    # 模型预测
    y_pre = model.predict(x_test)
    r2_score(y_test, y_pre)
    # 数据可视化
    plt.plot(range(len(y_pre)), y_pre, color='green', label='预测数据')
    plt.plot(range(len(y_pre)), y_test, color='red', label='真实数据')
    plt.legend(loc='upper right')
    plt.title('线性回归预测销量', fontsize=18)
    plt.show()


     (3)绘制预测值与实际值曲线:

  • 相关阅读:
    Python 文件Hash(MD5,SHA1)
    CDHtmlDialog探索Javascript与窗体交互
    C++ 实现不允许继承的类
    (一)JDBC入门及简介
    (二)JDBC 连接数据库
    2012年,总结
    canvas 时钟
    解决数据库日志文件过满的又一方法
    Windows XP 注册表修改大全
    windows2003中安装.netframework1.1
  • 原文地址:https://www.cnblogs.com/momo-er/p/12743679.html
Copyright © 2020-2023  润新知