python - 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}')
解决方案
我建议学习线性回归模型的误差度量。RMSE 将是一个好的开始。这会给你一些关于为什么你的方法不起作用的直觉。简而言之,您可能需要一个比数字后面的小数点大得多的误差范围。
尝试将您的代码重写为
if lab_test[b] >= predictions[b] * .8 and lab_test[b] <= predictions[b] * 1.2
给自己一个 20% 的误差幅度,你会看到你的“准确度”上升。
要了解为什么需要如此大的误差范围,请了解 RMSE 和其他误差指标,以及如何将它们最小化。
推荐阅读
- javascript - 如何在 iOS Safari 中获取当前屏幕方向?
- selenium - 从Github下载的pycharm项目不安装pycharm可以运行吗?
- xml - 在 Hive 中生成 XML 输出
- arduino - 我插入我的arduino,我的黄灯没有打开
- c - 如何在 C 中处理非选项命令行参数
- java - 文件不是在 Mac 上创建的
- openapi - FastAPI 中基于 Cookie 的身份验证
- javascript - 如何引用挂起事件的元素
- python - 没有自动调整散点图文本元素
- python - NameError: 名称 *model* 未定义;多对多字段/外键