gpt4 book ai didi

Python+SciKit -> 手动预测和 cross_val_score 预测的不同结果

转载 作者:行者123 更新时间:2023-11-30 23:07:35 25 4
gpt4 key购买 nike

我正在 Kaggle 中执行泰坦尼克号案例的学习任务。

如果我手动分离数据或使用 cross_val_score 执行线性回归,我的预测精度会有所不同。逻辑回归也是如此。

示例。

- 线性回归。

手册

Algorithm = LinearRegression()
kf = KFold(dataset.shape[0], n_folds=3, random_state=1)
predictions = []

for train, test in kf:

train_predictors = (dataset[Predictors].iloc[train])
train_target = dataset['Survived'].iloc[train]
Algorithm.fit(train_predictors, train_target)
test_predictions = Algorithm.predict(dataset[Predictors].iloc[test])
predictions.append(test_predictions)

predictions = np.concatenate(predictions, axis=0)
print(predictions.shape[0])
realed = list(dataset.Survived)
predictions[predictions > 0.5] = 1
predictions[predictions <= 0.5] = 0

accuracy2 = sum(predictions[predictions == dataset["Survived"]]) / len(predictions)
print("Tochnost prognoza: ", accuracy2 * 100, " %")

结果 - 78.34%

交叉验证分数

scores=cross_val_score(LinearRegression(), dataset[Predictors], dataset["Survived"], cv=3)
print(scores.mean())

结果 - 37.5%

- 逻辑回归。

这里我有 26,15% 的手动功能和 78,78% 的 cross_val_score 功能。

为什么?

最佳答案

您的代码中有几处看起来非常错误。

  1. 您的准确度计算错误
    这一行:

    accuracy2 = sum(predictions[predictions == dataset["Survived"]]) / len(predictions)

    不计算准确性。它的作用是当你有正确的预测时,取你所做的预测的平均值。这没有多大意义;)。
    不过,这很容易解决:

    accuracy2 = sum(predictions == dataset["Survived"] / len(predictions)
  2. 线性回归实际上执行回归
    使用线性回归来执行分类任务并不是一个好主意。在(二元)分类中,您期望输出范围为 [0; 1](概率),而线性回归通常会给你一个无限的范围。
    由于统计学家是线性回归的忠实粉丝,他们发明了逻辑回归,这实际上是对转换后的目标值的线性回归。
    底线:使用逻辑回归(不是线性回归)进行分类。

  3. 评分方式不是你想象的那样
    cross_val_score 采用一个scoring 参数。这里您没有指定它(所以它是None),这意味着它将查找估计器的默认评分方法。 LinearRegression 的默认评分方法不是准确性。它是 R^2 系数。这与回归相关,而不是真正与您想要做的事情相关。

    所以当你这样做时:

    scores=cross_val_score(LinearRegression(), dataset[Predictors], dataset["Survived"], cv=3)
    print(scores.mean())

    您得到的是 3 倍交叉验证的平均 R^2 系数。
    当您使用 LogisticRegression 执行此操作时,您将获得平均准确度,这正是您想要的。

第 1 点和第 2 点解释了使用 LogisticRegressioncross_val_scoreLinearRegression 上获得的结果。
我还不确定第一个案例,如果我找到一个好的解释,我会更新我的帖子。我觉得这非常令人惊讶,因为您在计算准确性方面犯的错误总是低估结果。当然,除非这不是您运行的实际代码。

关于Python+SciKit -> 手动预测和 cross_val_score 预测的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com