0

在尝试计算均方对数误差时,出现以下错误:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

计算均方误差不会给出错误。以下代码可用于重现该问题:

from sklearn.datasets import load_boston
dataset = load_boston()

import pandas as pd
df = pd.DataFrame(dataset.data, columns=dataset.feature_names, )

df["MEDV"] = dataset.target

#tried this, no difference
df = df.reset_index()

df.isnull().sum()
#No missing values

df.dtypes
# all float64

cols = ["LSTAT", "RM"]
X = df[cols]#.astype(np.float)
y = df["MEDV"]#.astype(np.float)

from sklearn.linear_model import LinearRegression
slr = LinearRegression()
slr.fit(X, y)
y_pred = slr.predict(X)

np.all(np.isfinite(X))
# true
np.all(np.isfinite(y))
#true

np.all(np.isfinite(y_pred))
#true

from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y, y_pred)
print(mse)

from sklearn.metrics import mean_squared_log_error
# THIS produces the error message:
msle = mean_squared_log_error(y, y_pred)
print(msle)

我做了几项检查:

  1. 没有缺失值
  2. 没有无限的价值
  3. 数据类型是 float64

我不明白为什么它给了我错误。有人知道我在做什么错吗?

亲切的问候,

雅普

4

2 回答 2

0

mean_squared_log_error(y, y_pred)如何工作?

  1. 它分别获取 y 和 y_pred 的日志。
  2. 取差异即 log(y) - log(y_pred)。
  3. 平方差
  4. 差值的平均值将是平均值。

即平均((log(y)-log(y_pred))**2)

因此,如果您假设它将取差值的平方然后应用对数,那么假设是错误的,因此它不适用于负值。

注意:我没有得到完全相同的错误,并且我得到“当目标包含负值时不能使用均方对数误差。”)

于 2019-05-17T03:46:44.737 回答
0

跑步:

y_pred[y_pred<0]

你得到:

array([-4.66638608, -2.08933711])

你知道,这是一个自然对数的问题。

于 2019-04-27T17:11:27.380 回答