Day12:机器学习——线性回归梯度下降法

文章介绍了使用Python的NumPy库实现的线性回归模型,包括单元线性回归(单变量)和多元线性回归(多个变量),通过梯度下降法估计模型参数的过程。
摘要由CSDN通过智能技术生成

#1.单元线性回归梯度下降法
import numpy as np

# 生成一些示例数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)#生成一个大小为(100,1)的随机数数组,随机数在[0,2)范围之内
y = 4 + 3 * X + np.random.randn(100, 1)
'''#其中的np.random.randn(100,1)这一部分是生成一个大小为 (100, 1) 的随机数数组,
#其中的随机数是从标准正态分布中抽取的。这个部分添加了随机噪声到模型中,以模拟现实世界数据的不确定性和随机性。
'''

# 添加偏置项(intercept)
X_b = np.c_[np.ones((100, 1)), X]
'''np.c_这是NumPy中的一种特殊语法,用于连接两个数组。在这里,np.c_[] 用于将两个数组按列连接在一起,
其中第一个数组是全为1的数组,第二个数组是原始特征矩阵 X。这将创建一个新的特征矩阵 X_b,其中第一列是全为1的列(截距项),第二列是原始特征矩阵 X。
这行代码的目的是将原始特征矩阵 X 扩展为一个新的特征矩阵 X_b,该矩阵包含了截距项和原始特征,通常用于线性回归模型中,以便进行线性回归分析。
在线性回归中,截距项和原始特征的系数将用于拟合一个线性模型来预测目标变量。
'''


# 定义初始参数和学习率
theta = np.random.randn(2, 1)#初始化参数,theta=intercept,slope
learning_rate = 0.01
n_iterations = 1000#迭代次数

# 梯度下降训练模型
for iteration in range(n_iterations):
    #gradients = -2/100 * X_b.T.dot(y - X_b.dot(theta))
    gradients=1/100*X_b.T.dot(X_b.dot(theta)-y)
    '''
    1.X_b.dot(theta)计算预测值
    2.y-X_b.dot(theta)计算模型的预测误差
    3.X_b.T.dot(y - X_b.dot(theta))求导后的梯度向量,包含每个参数的偏导数
    '''
    theta = theta - learning_rate * gradients

# 训练后的参数
intercept, slope = theta

print("训练后的截距(intercept):", intercept)
print("训练后的斜率(slope):", slope)

#2.多元线性回归梯度下降法
import numpy as np

# 生成一些示例数据
np.random.seed(0)
m = 100  # 样本数量
n =  3 # 特征数量

# 生成随机特征和目标变量
X = 2 * np.random.rand(m, n)#X是(100,3)的矩阵
y = 4 + 3 * X[:, 0] + 2 * X[:, 1] + 5*X[:,2]+np.random.randn(m)
#y = 4 + np.dot(X, np.array([3, 5, 2,1])) + np.random.randn(m)

# 添加偏置项(intercept)
X_b = np.c_[np.ones((m, 1)), X]#X_b是(100,4)的矩阵


# 定义初始参数和学习率
theta = np.random.randn(n + 1)
learning_rate = 0.01
n_iterations = 20000

# 梯度下降训练模型
for iteration in range(n_iterations):
    #gradients = -2/m * X_b.T.dot(y - X_b.dot(theta))
    gradients = 1/m * X_b.T.dot(X_b.dot(theta)-y)
    theta = theta - learning_rate * gradients

# 训练后的参数
intercept=theta[0]
coefficients = theta[1], theta[2],theta[3]

print("训练后的截距(intercept):", intercept)
print("训练后的系数(coefficients):", coefficients)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值