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

读取UCI Auto-MPG数据集时字符串转浮点错误的技术求助

问题解决方法

核心错误原因

你使用的car_data是数据集的目录URL,而非具体的数据文件地址,导致pd.read_csv读取到的是UCI网站的HTML页面内容,不是实际的汽车数据,这才让horsepower列出现HTML标签字符串,无法转为浮点数。

修正后的完整代码

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# 修正为具体的数据文件URL
car_data = "https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data"
# 读取数据,指定分隔符为任意空白,处理缺失值标记'?'
auto_data = pd.read_csv(
    car_data,
    delim_whitespace=True,
    header=None,
    names=['mpg', 'cylinders', 'displacement','horsepower', 'weight', 'acceleration','model year', 'origin', 'car name'],
    na_values='?'
)
# 直接删除含缺失值的行
auto_data = auto_data.dropna(subset=['horsepower'])
# 转换horsepower为浮点型
auto_data['horsepower'] = auto_data['horsepower'].astype(float)
# 移除无关列
auto_data = auto_data.drop('car name', axis=1)

# 归一化处理
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(auto_data)
s_data = pd.DataFrame(data_scaled, columns=auto_data.columns)

# 拆分特征X和目标y(不需要转成三维数组,保持二维即可)
X = s_data.drop('mpg', axis=1).values
y = s_data['mpg'].values.reshape(-1, 1)

# 初始化参数
w = np.zeros((X.shape[1], 1))  # 维度匹配特征数
b = 0.0
alpha = 0.01
epochs = 50000
n_samples = len(X)

# 梯度下降迭代
for i in range(epochs):
    # 计算预测值
    y_pred = np.dot(X, w) + b
    # 计算梯度
    dw = (1/n_samples) * np.dot(X.T, (y_pred - y))
    db = (1/n_samples) * np.sum(y_pred - y)
    # 更新参数
    w -= alpha * dw
    b -= alpha * db

print("权重参数w:", w.flatten())
print("偏置参数b:", b)

关键修正点

  • 修正数据URL:将目录地址改为auto-mpg.data具体文件地址,确保读取到正确的数据集而非HTML页面。
  • 缺失值处理优化:用na_values='?'直接将?标记为缺失值,再用dropna删除对应行,比手动筛选更可靠。
  • 维度修复:原代码中fs_data = np.array([s_data])创建了三维数组,导致后续矩阵乘法维度不匹配,修正为直接用二维数组处理特征和目标变量。
  • 梯度下降计算优化:调整权重和偏置的计算逻辑,确保矩阵运算维度一致,避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06