You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Gradient Descent(梯度下降)动态修改输入特征并自动执行迭代计算

适配任意特征维度的梯度下降实现方案

你目前写的梯度下降核心逻辑本身已经支持任意输入特征维度,numpy的矩阵运算会自动匹配维度,不需要修改核心计算逻辑。你只需要补充自动读取数据集维度、自动生成对应权重的逻辑,再添加损失存储和绘图的代码即可,实现流程如下:

  • 自动解析数据集维度
    不需要手动数特征数量,统一将数据集最后一列作为标签Y,前面所有列作为输入特征X,初始权重theta的维度直接和X的列数对齐即可:
import numpy as np
import matplotlib.pyplot as plt

# 读取数据集,skiprows=1跳过表头行,支持任意列数的数据集
data = np.loadtxt("你的数据集文件路径", skiprows=1)
# 取所有行、除最后一列外的所有列作为特征X
x = data[:, :-1]
# 取所有行、最后一列作为标签Y
y = data[:, -1:]
# 自动生成和特征维度匹配的初始theta,全0初始化即可
theta = np.zeros((x.shape[1], 1))
  • 改造梯度下降函数存储损失值
    原函数已经适配任意维度,只需新增损失值存储逻辑,同时不用手动传入样本量m,直接从X的行数读取更方便:
def gradientDescent(x, y, theta, alpha, numIterations):
    m = x.shape[0]
    xTrans = x.T
    cost_history = []
    for i in range(numIterations):
        hypothesis = np.dot(x, theta)
        loss = hypothesis - y
        cost = np.sum(loss ** 2) / (2 * m)
        cost_history.append(cost)
        # 梯度计算逻辑完全通用,自动适配任意特征维度
        gradient = np.dot(xTrans, loss) / m
        theta = theta - alpha * gradient
    return theta, cost_history
  • 调用函数并绘制损失曲线
    调用过程不需要修改,新增绘图代码即可:
# 自定义超参数
alpha = 0.001
num_iter = 1500
# 运行梯度下降
final_theta, cost_list = gradientDescent(x, y, theta, alpha, num_iter)
# 绘制迭代-代价曲线
plt.plot(range(num_iter), cost_list)
plt.xlabel("迭代次数")
plt.ylabel("代价")
plt.show()

注意事项

如果新增特征后梯度下降收敛速度变慢,建议先对所有特征做标准化/归一化处理,避免特征尺度差异过大影响收敛效果,这个操作也支持任意特征维度,不需要手动调整。

内容的提问来源于stack exchange,提问作者Gamblet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:39:04