【线性回归】| Linear Regression实现示例

简介: 【线性回归】| Linear Regression实现示例
# 首先观察一下数据的分布
import pandas as pd
# 读取数据集
df = pd.read_csv('./data.csv')
df.head(5)

image.png


import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
# 利用这些点在平面坐标上进行绘图,将数据样本转化成数组
points = np.array(df)
# 提取列表中的第一列为x的值
X = points[:,0]
# 提取列表中的第二列为y的值
Y = points[:,1]
# 绘制散点图
plt.scatter(X,Y)
<matplotlib.collections.PathCollection at 0x1cf2d5e2448>

image.png

数据样本如上图所示,接下来使用梯度下降法拟合出一条直线满足次样本的分布


# 思路:列出损失函数 loss = ∑i(wxi + b - yi)**2
# 对于每一轮的迭代都会更新参数w与b,更新方程为:w' = w - lr*(dloss/dw)
# 一次梯读下降对w,b进行更新
b_start = 0
w_start = 0
iteration = 900
learning_rate = 0.0001
N = len(points)
# 一步的梯度下降,对b,w进行更新并返回
def Step_GradientDescent(b,w):
    lr = learning_rate
    # 求b,w的偏导数值
    for i in range(0,len(points)):
        dw = 2*X[i]*(w*X[i]+b-Y[i])/N
        db = 2*(w*X[i]+b-Y[i])/N
    # 进行更新
    w_updata = w - lr*dw
    b_updata = b - lr*db
    return b_updata,w_updata
# 实现梯度下降算法
def Total_GradientDescent(b,w):
    iteration_times = iteration
    for i in range(0,iteration_times):
        b,w = Step_GradientDescent(b,w)
    return b,w
# 计算方差
def Deviation_value(b,w):
    loss = 0
    for i in range(0,len(points)):
        loss += (w*X[i]+b-Y[i])**2
    return loss
def main():
    b = b_start
    w = w_start
    print("Before__b:{0},w:{1},Deviation value:{2}".format(b,w,Deviation_value(b,w)))
    b,w = Total_GradientDescent(b,w)
    print("After__b:{0},w:{1},Deviation value:{2}".format(b,w,Deviation_value(b,w)))
    return b,w
b,w = main()


可见得到了训练出来的结果

Before__b:0,w:0,Deviation value:556510.7834490552
After__b:0.0574654741275659,w:1.4440202845195163,Deviation value:11557.105373357175
# 根据以上结果,绘制出一条直线,与前述的散点图进行拟合
# axline((0, 0), (1, 1), linewidth=4, color='r')
plt.subplot(111)
plt.scatter(X,Y)
plt.axline((0,0.0574654741275659),slope=1.4440202845195163,linewidth=2, color='blue')
<matplotlib.lines._AxLine at 0x1cf2deeeb48>

image.png

这个结果是比较理想的,现在稍微更改一下学习率learning_rate与迭代次数iteration,损失值都会偏大,如下图所示:

learning_rate=0.0001,iteration=1100

image.png

learning_rate=0.0001,iteration=1000

image.png

目录
相关文章
|
机器学习/深度学习 数据挖掘 PyTorch
Logistic Regression 逻辑斯蒂回归
Logistic Regression 逻辑斯蒂回归
170 0
|
6月前
|
存储 算法 Serverless
Regression算法
Regression算法
109 2
|
7月前
Ridge,Lasso,Elasticnet回归
这篇文章探讨了多元线性回归与正则化的结合,包括Ridge、Lasso和Elasticnet回归。Ridge回归通过添加L2惩罚项提高模型鲁棒性,但可能牺牲一些准确性。Lasso回归引入L1范数,对异常值更敏感,能进行特征选择。Elasticnet结合L1和L2范数,允许在正则化中平衡两者。通过调整α和l1_ratio参数,可以控制整体正则化强度和正则化类型的比例。
73 0
|
7月前
|
机器学习/深度学习 算法
逻辑回归(Logistic Regression)详解
逻辑回归(Logistic Regression)详解
39 0
|
机器学习/深度学习 数据采集
2D Logistic Regression
2D Logistic Regression 是一种用于解决二分类问题的机器学习模型,它是 Logistic Regression 在多维空间中的扩展。在 2D Logistic Regression 中,我们使用一个二维平面(或多维空间中的超平面)来将不同类别的数据分开。
88 1
|
机器学习/深度学习 算法 API
逻辑回归(Logistic Regression)
逻辑回归(Logistic Regression)是一种用于解决分类问题的统计学习方法。它是一种广义线性模型,用于估计二分类问题中的概率。
154 2
|
机器学习/深度学习 数据采集
Logistic Regression
机器学习中的逻辑回归(Logistic Regression)是一种用于解决分类问题的线性模型。它通过拟合一条直线(或平面),将输入变量与输出变量(通常为二值变量,如 0 或 1)之间的关系表示出来。
65 0
|
机器学习/深度学习 PyTorch 算法框架/工具
Linear Model 线性模型
Linear Model 线性模型
91 0
|
机器学习/深度学习 算法 PyTorch
Linear Regression with PyTorch 用PyTorch实现线性回归
Linear Regression with PyTorch 用PyTorch实现线性回归
129 0
|
算法
单变量与多变量线性回归(Linear Regression with One Variable)
它被称作监督学习是因为对于每个数据来说,我们给出了“正确的答案”,即告诉我们:根据我们的数据来说,房子实际的价格是多少,这是一个回归问题。回归指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格,同时,还有另一种最常见的监督学习方式,叫做分类问题,当我们想要预测离散的输出值,例如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是0/1离散输出的问题。
214 0
单变量与多变量线性回归(Linear Regression with One Variable)