【问题标题】:Accuracy of multivariate classification and regression models with Scikit-Learn使用 Scikit-Learn 的多元分类和回归模型的准确性
【发布时间】:2019-10-30 12:26:28
【问题描述】:

我写了一个简单的线性回归模型和一个决策树模型,它们工作得很好。 我的问题是,如何计算这两个模型的准确性。我的意思是,计算分类模型和回归模型的准确性有什么区别?我需要将数据拆分为训练和测试吗?

到目前为止,我一直在使用.score(x_test, y_test),但我读到这不是模型的准确性。我曾尝试使用指标,但总是收到此错误:

ValueError: Found input variables with inconsistent numbers of samples: [2, 1]

请查看我的代码,我已经尝试让它工作,但我失败了。

这是代码:

import pandas as pd
from sklearn import linear_model
from sklearn import tree
from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score
from sklearn.metrics import mean_squared_error


dic = {'par_1': [10, 30, 13, 19, 25, 33, 23],
       'par_2': [1, 3, 1, 2, 3, 3, 2],
       'outcome': [101, 905, 182, 268, 646, 624, 465]}

df = pd.DataFrame(dic)

variables = df.iloc[:,:-1]
results = df.iloc[:,-1]

var_train, var_test, res_train, res_test = train_test_split(variables, results, test_size = 0.2, random_state = 4)

regression = linear_model.LinearRegression()
regression.fit(var_train, res_train)

input_values = [14, 2]

prediction = regression.predict([input_values])
print(prediction)

accuracy_regression = mean_squared_error(var_test, prediction)
print(accuracy_regression)


dic = {'par_1': [10, 30, 13, 19, 25, 33, 23],
       'par_2': [1, 3, 1, 2, 3, 3, 2],
       'outcome': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'yes']}

df = pd.DataFrame(dic)

variables = df.iloc[:,:-1]
results = df.iloc[:,-1]

var_train, var_test, res_train, res_test = train_test_split(variables, results, test_size = 0.2, random_state = 4)

decision_tree = tree.DecisionTreeClassifier()
decision_tree.fit(var_train, res_train)

input_values = [18, 2]

prediction = decision_tree.predict([input_values])[0]
print(prediction)

accuracy_classification = accuracy_score(res_test, prediction)
print(accuracy_classification)

【问题讨论】:

  • 同样,回归模型的准确性毫无意义,很多人都告诉过你。
  • 有什么方法可以评估回归模型吗?
  • 是的,当然,除了准确率之外,您还使用其他指标,例如平均绝对误差、R^2 分数等
  • 你能看到我发布的代码吗?我使用from sklearn.metrics import accuracy_score 进行分类,使用 r2_score 进行回归,但总是出错。你能告诉我我做错了什么吗

标签: python machine-learning scikit-learn


【解决方案1】:

准确率是用于分类但不用于回归的指标。在回归的情况下,可以使用 R 平方、负均方误差等。准确度定义为正确分类的数据点数占数据点总数,在连续变量的情况下不使用。

您可以使用以下指标来衡量回归模型的可预测性。 https://scikit-learn.org/stable/modules/classes.html#regression-metrics 例如,您可以使用

计算 R 平方
metrics.r2_score(y_true, y_pred[, …])

此外,可以为分类模型实施以下方法。 https://scikit-learn.org/stable/modules/classes.html#classification-metrics 可以使用

计算准确度
metrics.accuracy_score(y_true, y_pred[, …])

在您的情况下,您可以使用以下方法计算回归模型的 R 平方:

y_pred_test = regression.predict(x_test)
metrics.score(y_true, y_pred_test)

以下内容还为您提供了决策树的准确性。

y_pred_test = decision_tree.predict(x_test)
metrics.accuracy_score(y_true, y_pred_test)

【讨论】:

  • 谢谢,但你能告诉我如何在我的代码中使用它吗?
  • 你能把这部分变成我的代码吗?我不明白什么是 y_true,什么是 y_pred_test
  • 我收到错误 'ValueError: y_true and y_pred have different number of output (2!=1) 。我不知道为y_truey_pred_test 放什么。
  • 我已经更新了我的问题中的代码,请检查一下
猜你喜欢
  • 1970-01-01
  • 2016-10-23
  • 2020-01-29
  • 2019-11-18
  • 2023-03-25
  • 2013-06-20
  • 2014-11-24
  • 2017-01-04
  • 2015-12-15
相关资源
最近更新 更多