首页 > 解决方案 > Python中的线性回归不准确

问题描述

我正在学习有关 Python 中的线性回归和机器学习的教程,并决定通过查看我得到的正确数量中有多少错误来进一步了解它。我发现我的很多预测都是错误的(我将它们四舍五入,所以即使它们有很多小数位,它们也会被标记为正确)。有谁知道为什么会这样?非常感谢!

我的代码在这里:

import pandas as pd
import numpy as np
import sklearn
from sklearn import linear_model
from sklearn.utils import shuffle

data = pd.read_csv('student-mat.csv', sep=';')

data = data[['G1', 'G2', 'G3', 'failures', 'absences', 'studytime', 'freetime', 'goout']]
predict = 'G3'

att = np.array(data.drop([predict], 1))
lab = np.array(data[predict])

att_train, att_test, lab_train, lab_test = sklearn.model_selection.train_test_split(att, lab, test_size=0.1)

linear = linear_model.LinearRegression()
linear.fit(att_train, lab_train)

acc = linear.score(att_test, lab_test)
print('Accuracy of the test: ' + str(acc) + '\n')

predictions = linear.predict(att_test)
print()

right_counter = 0
wrong_counter = 0

for b in range(len(predictions) - 1):

     print(predictions[b], att_test[b], lab_test[b])

     if round(predictions[b]) == lab_test[b]:
        print("you're right")
        right_counter += 1
     else:
        print("you're wrong")
        wrong_counter += 1

print(f'Record: {right_counter} - {wrong_counter}')

标签: pythonnumpymachine-learninglinear-regression

解决方案


我建议学习线性回归模型的误差度量。RMSE 将是一个好的开始。这会给你一些关于为什么你的方法不起作用的直觉。简而言之,您可能需要一个比数字后面的小数点大得多的误差范围。

尝试将您的代码重写为

if lab_test[b] >= predictions[b] * .8 and lab_test[b] <= predictions[b] * 1.2

给自己一个 20% 的误差幅度,你会看到你的“准确度”上升。

要了解为什么需要如此大的误差范围,请了解 RMSE 和其他误差指标,以及如何将它们最小化。


推荐阅读