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

VR应用数据集线性回归模型训练/测试准确率异常排查请求

VR应用数据线性回归模型R²分数异常问题排查

我使用2019-2021年VR应用领域调查数据(N为各领域应用数量,%为占总样本百分比)训练线性回归模型时,得到的R²分数极低甚至为负,代码步骤如下:

# 1. 导入库并读取CSV文件
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
df = pd.read_csv('VR_application.csv')

# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[['year']], df[['N', '%']], test_size=0.2, random_state=42)

# 3. 创建并训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)

# 4. 计算准确率(R-squared分数)
train_accuracy = r2_score(y_train, y_train_pred)
test_accuracy = r2_score(y_test, y_test_pred)

# 5. 输出结果
print(f"Train Accuracy: {train_accuracy}")
print(f"Test Accuracy: {test_accuracy}")

运行结果:

Train Accuracy: 0.004421041085529986
Test Accuracy: -0.09666987166765573

问题根源

  1. 缺失必要导入:代码中使用r2_score但未从sklearn.metrics导入,属于语法遗漏(能运行可能是环境预导入,但代码本身不完整)。
  2. 多目标回归逻辑错误:同时将N和%作为目标变量,二者高度相关(百分比由数量计算得出),单特征year无法拟合两个冗余目标,导致模型无有效学习信号。
  3. 特征维度严重不足:仅用year作为特征,而数据是「年份+领域」的二维分布,年份无法解释不同领域的应用数量/占比差异,特征完全无法覆盖数据规律。
  4. 数据结构理解偏差:数据集按领域和年份分组记录,应针对每个领域的时间趋势建模,或把领域作为分类特征加入模型,而非直接用年份拟合所有领域的聚合数据。

修正方案示例

方案1:按领域拆分,单独建模时间趋势

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

df = pd.read_csv('VR_application.csv')

# 遍历每个领域,针对该领域的年度数量变化建模
for domain in df['领域'].unique():
    domain_data = df[df['领域'] == domain]
    X = domain_data[['year']]
    y = domain_data['N']
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    model = LinearRegression()
    model.fit(X_train, y_train)
    
    train_r2 = r2_score(y_train, model.predict(X_train))
    test_r2 = r2_score(y_test, model.predict(X_test))
    
    print(f"领域:{domain}")
    print(f"训练集R²: {train_r2:.4f}")
    print(f"测试集R²: {test_r2:.4f}\n")

方案2:加入领域特征,构建多特征模型

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline

df = pd.read_csv('VR_application.csv')

# 用年份+领域作为特征,预测应用数量N
X = df[['year', '领域']]
y = df['N']

# 对分类特征「领域」做独热编码
preprocessor = ColumnTransformer(
    transformers=[('cat', OneHotEncoder(drop='first'), ['领域'])],
    remainder='passthrough'
)

# 构建预处理+回归的管道
model = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('regressor', LinearRegression())
])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model.fit(X_train, y_train)

train_r2 = r2_score(y_train, model.predict(X_train))
test_r2 = r2_score(y_test, model.predict(X_test))

print(f"训练集R²: {train_r2:.4f}")
print(f"测试集R²: {test_r2:.4f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:32:44