7.1 简单线性回归算法

  1. 前提介绍:

为什么需要统计量?

统计量:描述数据特征

0.1 集中趋势衡量

0.1.1均值(平均数,平均值)(mean)

这里写图片描述

{6, 2, 9, 1, 2}


(6 + 2 + 9 + 1 + 2) / 5 = 20 / 5 = 4


0.1.2中位数 (median): 将数据中的各个数值按照大小顺序排列,居于中间位置的变量

    0.1.2.1. 给数据排序:1, 2, 2, 6, 9
    0.1.2.2. 找出位置处于中间的变量:2
        当n为基数的时候:直接取位置处于中间的变量
        当n为偶数的时候,取中间两个量的平均值


0.1.2众数 (mode):数据中出现次数最多的数

0.2

0.2.1. 离散程度衡量


    0.2.1.1方差(variance)

这里写图片描述

{6, 2, 9, 1, 2}

(1) (6 - 4)^2 + (2 - 4) ^2 + (9 - 4)^2 + (1 - 4)^2 + (2 - 4)^2 
   = 4 + 4 + 25 + 9 + 4
   = 46

(2) n - 1 = 5 - 1 = 4

(3) 46 / 4 = 11.5


0.2.1.2标准差 (standard deviation)

这里写图片描述

    s = sqrt(11.5) = 3.39
  1. 介绍:回归(regression) Y变量为连续数值型(continuous numerical variable)
    如:房价,人数,降雨量
    分类(Classification): Y变量为类别型(categorical variable)
    如:颜色类别,电脑品牌,有无信誉

  2. 简单线性回归(Simple Linear Regression)
    2.1 很多做决定过过程通常是根据两个或者多个变量之间的关系
    2.3 回归分析(regression analysis)用来建立方程模拟两个或者多个变量之间如何关联
    2.4 被预测的变量叫做:因变量(dependent variable), y, 输出(output)
    2.5 被用来进行预测的变量叫做: 自变量(independent variable), x, 输入(input)

  3. 简单线性回归介绍
    3.1 简单线性回归包含一个自变量(x)和一个因变量(y)
    3.2 以上两个变量的关系用一条直线来模拟
    3.3 如果包含两个以上的自变量,则称作多元回归分析(multiple regression)

  4. 简单线性回归模型
    4.1 被用来描述因变量(y)和自变量(X)以及偏差(error)之间关系的方程叫做回归模型
    4.2 简单线性回归的模型是:
    这里写图片描述
    其中: 参数 偏差

    1. 简单线性回归方程
      E(y) = β0+β1x
      这个方程对应的图像是一条直线,称作回归线
      其中,β0是回归线的截距
      β1是回归线的斜率
      E(y)是在一个给定x值下y的期望值(均值)
  5. 正向线性关系:
    这里写图片描述

  6. 负向线性关系:

这里写图片描述

  1. 无关系

这里写图片描述

  1. 估计的简单线性回归方程
    ŷ=b0+b1x
    这个方程叫做估计线性方程(estimated regression line)
    其中,b0是估计线性方程的纵截距
    b1是估计线性方程的斜率
    ŷ是在自变量x等于一个给定值的时候,y的估计值

  2. 线性回归分析流程:

这里写图片描述

  1. 关于偏差ε的假定
    11.1 是一个随机的变量,均值为0
    11.2 ε的方差(variance)对于所有的自变量x是一样的
    11.3 ε的值是独立的
    11.4 ε满足正态分布
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一款基于Python的科学计算库,主要用于机器学习和深度学习的研究。在PyTorch中,线性回归是最基本的机器学习模型之一,以下是PyTorch实现线性回归的示例代码。 首先,我们需要导入PyTorch库和一些必要的包: ``` python import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt ``` 接下来,我们需要定义一些超参数: ``` python input_size = 1 output_size = 1 num_epochs = 60 learning_rate = 0.001 ``` 这里,我们定义了输入和输出的维度,训练的轮数和学习率。 然后,我们需要准备训练数据和测试数据。在这个例子中,我们使用一个简单的数据集,包含了一些关于人口和收入的信息。我们的目标是根据人口预测收入。我们可以使用NumPy来生成数据集: ``` python x_train = np.array([[1.2], [2.4], [3.6], [4.8], [6.0], [7.2], [8.4], [9.6], [10.8], [12.0]]) y_train = np.array([[2.5], [4.8], [7.1], [9.4], [11.7], [14.0], [16.3], [18.6], [20.9], [23.2]]) x_test = np.array([[1.5], [3.0], [4.5], [6.0], [7.5], [9.0], [10.5], [12.0], [13.5], [15.0]]) y_test = np.array([[3.2], [6.4], [9.6], [12.8], [16.0], [19.2], [22.4], [25.6], [28.8], [32.0]]) ``` 接下来,我们需要将数据转换为张量,并且创建一个线性回归模型。在这个例子中,我们使用PyTorch的nn.Linear模块来实现线性回归模型: ``` python # Convert numpy arrays to torch tensors x_train = torch.from_numpy(x_train).float() y_train = torch.from_numpy(y_train).float() x_test = torch.from_numpy(x_test).float() y_test = torch.from_numpy(y_test).float() # Create linear regression model model = nn.Linear(input_size, output_size) ``` 然后,我们需要定义损失函数和优化器。在这个例子中,我们使用均方误差(MSE)作为损失函数,使用随机梯度下降(SGD)作为优化器: ``` python # Define loss function and optimizer criterion = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) ``` 接下来,我们可以开始训练模型。在每个epoch中,我们将模型的输出与实际值进行比较,并计算损失。然后,我们使用反向传播算法更新模型的参数。 ``` python # Train the model for epoch in range(num_epochs): # Forward pass outputs = model(x_train) loss = criterion(outputs, y_train) # Backward and optimize optimizer.zero_grad() loss.backward() optimizer.step() if (epoch+1) % 10 == 0: print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) ``` 最后,我们可以使用测试集来评估模型的性能: ``` python # Test the model with torch.no_grad(): predicted = model(x_test) test_loss = criterion(predicted, y_test) print('Test Loss: {:.4f}'.format(test_loss.item())) # Plot the graph plt.plot(x_test.numpy(), y_test.numpy(), 'ro', label='Original data') plt.plot(x_test.numpy(), predicted.numpy(), 'b-', label='Fitted line') plt.legend() plt.show() ``` 完整代码如下: ``` python import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt # Hyper-parameters input_size = 1 output_size = 1 num_epochs = 60 learning_rate = 0.001 # Toy dataset x_train = np.array([[1.2], [2.4], [3.6], [4.8], [6.0], [7.2], [8.4], [9.6], [10.8], [12.0]]) y_train = np.array([[2.5], [4.8], [7.1], [9.4], [11.7], [14.0], [16.3], [18.6], [20.9], [23.2]]) x_test = np.array([[1.5], [3.0], [4.5], [6.0], [7.5], [9.0], [10.5], [12.0], [13.5], [15.0]]) y_test = np.array([[3.2], [6.4], [9.6], [12.8], [16.0], [19.2], [22.4], [25.6], [28.8], [32.0]]) # Convert numpy arrays to torch tensors x_train = torch.from_numpy(x_train).float() y_train = torch.from_numpy(y_train).float() x_test = torch.from_numpy(x_test).float() y_test = torch.from_numpy(y_test).float() # Create linear regression model model = nn.Linear(input_size, output_size) # Define loss function and optimizer criterion = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) # Train the model for epoch in range(num_epochs): # Forward pass outputs = model(x_train) loss = criterion(outputs, y_train) # Backward and optimize optimizer.zero_grad() loss.backward() optimizer.step() if (epoch+1) % 10 == 0: print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) # Test the model with torch.no_grad(): predicted = model(x_test) test_loss = criterion(predicted, y_test) print('Test Loss: {:.4f}'.format(test_loss.item())) # Plot the graph plt.plot(x_test.numpy(), y_test.numpy(), 'ro', label='Original data') plt.plot(x_test.numpy(), predicted.numpy(), 'b-', label='Fitted line') plt.legend() plt.show() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值