【问题标题】:Ways to handle negative value of prediction in regression model回归模型中预测负值的处理方法
【发布时间】:2021-02-23 14:08:18
【问题描述】:

我希望使用文本数据(描述)作为预测器来预测收入。这就是我的数据框的样子:

c_description
641  fierce roman commander marcus vinicius become ...   
645  melancholy poet reflect three woman love lose ...   
644  disturb blanche dubois move sister new orleans...   
643  lonely woman recall first love thirteen year p...   
642  three adolescent girl grow bengal india learn ...   

d_worldwide_gross_income  
641            1034933.275020  
645            1089736.217494  
644             505025.329393  
643              73424.113475  
642             544123.669819

这是建模代码:

def model():
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
import numpy as np
from sklearn import metrics

vectorizer = TfidfVectorizer()
x = vectorizer.fit_transform(model_df['c_description'])
vectorizer.get_feature_names()
y = model_df['d_worldwide_gross_income']

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1)
clf = Ridge()
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print(pred)

pred_df = pd.DataFrame({'Actual': y_test, 'Predicted': pred})
display(pred_df)

print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, pred))
print('Mean Squared Error:', metrics.mean_squared_error(y_test, pred))
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, pred)))

问题是,我得到了负面预测(在输出中加注星标),这是没有意义的(总收入不能为负数)。我假设当您预测一个包含大量 0 的向量化文本数据(稀疏矩阵)的连续变量时,这很常见。但是有没有办法处理这个问题?

输出:

           Actual       Predicted
14678  6833413.127504  2849365.333598
12631 15076388.644552  7301462.466993
16131  1512745.545534  3046698.088006
4406     25325.846617 **-1436044.714117**
21199   124397.540278  5321914.505052
Mean Absolute Error: 4102039.343052313
Mean Squared Error: 35381871200690.305
Root Mean Squared Error: 5948266.234852834

此外,MSE 非常高,模型的准确率似乎很低。我也在寻求提高准确性的建议。在这种情况下分类器是更好的选择吗?

我们将不胜感激,请提前联系,确保大家的安全。

【问题讨论】:

    标签: python regression data-modeling predict tf-idf


    【解决方案1】:

    避免遇到负值的一种方法是记录转换目标变量。您可以通过指数将其转换回您的实际比例。

    您的 MSE 会很高,因为您的收入值很高。请记住,您的 MSE 是 (predicted - observed)^2 ,因此它应该与您的目标值的方差处于同一尺度。

    要查看您的模型有多好,您可以考虑使用 R-squared。

    测试数据是否也只有 4 个观察值?如果是这样,它可能无法很好地捕捉您的模型性能。

    如果这是您拥有的数据,改进的一种方法是尝试为 Ridge() 使用不同的超参数。我看到你正在拟合默认值,你可以尝试不同的 alphas。

    最后,你有一个连续的目标变量,很可能你不想为此使用分类器。

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 2019-08-08
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2016-10-19
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多