【问题标题】:r2 score turns out to be negativer2 分数结果为负
【发布时间】:2021-06-09 13:05:25
【问题描述】:

我研究了支持向量回归,但我遇到了一个问题:我的 r2 分数变为负数。这是正常的还是我的代码中有任何可更改的部分来解决这个问题?

import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt
from sklearn.svm import SVR
df = pd.read_csv('Position_Salaries.csv')
df.head()
X = df.iloc[:, 1:2].values
y = df.iloc[:, -1].values
from sklearn.preprocessing import StandardScaler
y = y.reshape(len(y),1)
x_scaler = StandardScaler()
y_scaler = StandardScaler()
X = x_scaler.fit_transform(X)
y = y_scaler.fit_transform(y)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.4, random_state = 42)
regressor = SVR(kernel="rbf")
regressor.fit(x_train,y_train.ravel())
y_pred = y_scaler.inverse_transform(regressor.predict(x_scaler.transform(x_test)))
from sklearn.metrics import r2_score
r2_score(y_scaler.inverse_transform(y_test), y_pred)

我的输出是-0.5313206322807349

【问题讨论】:

    标签: python machine-learning scikit-learn svm


    【解决方案1】:

    来自sklearn.metrics.r2_scoredocumentation

    最好的分数是 1.0,它可以是负数(因为模型 可以任意变差)。始终预测的常数模型 y 的期望值,忽略输入特征,将得到 R^2 0.0 分。

    【讨论】:

    • 所以,我的模型并不像我理解的那样好。那正确吗?我是否必须使用不同的算法或我需要做些什么来解决这个问题?
    • 您好,如果您的问题得到解答,请将答案标记为已接受。关于你的问题,如果没有你的数据,我真的无法知道。但我建议尝试不同的预测模型和/或数据预处理。
    【解决方案2】:

    documentation:

    最好的分数是 1.0,它可以是负数(因为模型可以任意变坏)

    【讨论】:

      【解决方案3】:

      在这部分,你的 X 是按比例缩放的版本

      X = x_scaler.fit_transform(X)
      

      在这一部分中,您的 x_test 也是缩放版本

      x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.4, random_state = 42)
      

      创建预测时,您不应再次转换输入,因为您的 x_test 已经在缩放版本中

      y_pred = y_scaler.inverse_transform(regressor.predict(x_scaler.transform(x_test)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-26
        • 1970-01-01
        • 2011-05-26
        • 2021-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多