gpt4 book ai didi

Python scikit-学习 : Why is my LinearRegression classifier's score so low?

转载 作者:行者123 更新时间:2023-11-30 09:26:44 24 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本将预测给定 future 日期的服务器上已用磁盘空间的百分比。 Use% 从此命令中获取 1 次/天,如下所示:

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 30G 24G 4.4G 85% /

并与日期一起记录。该脚本是用 Python 编写的,缺点是当我使用 LinearRegression 作为分类器时,我得到的分数非常低。代码如下:

import pandas as pd
import numpy as np
from sklearn import preprocessing, cross_validation, svm
from sklearn.linear_model import LinearRegression

# list of tuples whose format is (day_of_month, percent_used)
results = [(1, 83), (2, 87), (3, 87), (4, 87), (5, 89), (6, 88), (7, 83), (8, 75), (9, 73), (10, 73), (11, 74), (12, 77), (13, 77), (14, 79), (15, 79), (16, 79), (17, 79), (18, 79), (19, 80), (21, 80), (22, 81), (23, 84), (24, 85), (25, 85), (26, 85), (27, 85), (28, 85)]

labels = ['day', 'pct_used']
df = pd.DataFrame.from_records(results, columns=labels)

# convert list of days into a numpy array and reshape
X = np.array(df['day']).reshape(-1,1)

y = np.array(df['pct_used'])
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.4)
clf = LinearRegression(n_jobs=-1)
clf.fit(X_train, y_train)
print clf.score(X_test, y_test)
# predict day 30's pct_used value
print clf.predict(np.array([30]).reshape(-1,1))

它输出:

-0.19521578836110454
[81.22057369]

其中clf.score每次都是负数。我希望得到积极的结果,并且至少为 0.95 或更高,这样我就可以对预测充满信心。我不确定我是否使用了错误的分类器、需要更多数据、需要更多功能,或者在代码中做了其他错误的事情。

我发现的一些有趣的事情是,如果我更改初始结果列表以使 pct_used 更加线性增加,例如:

results = [(1, 73), (2, 73), (3, 74), (4, 75), (5, 76), (6, 77), (7, 78), (8, 78), (9, 80), (10, 80), (11, 81), (12, 82), (13, 83), (14, 84), (15, 85), (16, 85), (17, 85), (18, 86), (19, 86), (21, 87), (22, 88), (23, 89), (24, 89), (25, 90), (26, 91), (27, 91), (28, 92)]

然后分数会随着这个输出而飙升:

0.9852576797564747
[94.37028796]

所以这让我认为,只有当 Y 轴数据大部分是线性的时,LinearRegression 才能很好地用作分类器。当然,在现实世界中,磁盘空间的波动就像在我的原始数据集中一样,所以这就是为什么我想也许我应该使用不同的分类器,但我尝试了 sklearn.svm.SVR() 和这也是非常糟糕的分数。

我认为逻辑回归方法可以代替线性回归,在接下来的几天内使用率可能会超过 90%,也可能不会。或者我简要地阅读了有关“时间序列预测”的内容,尽管我不确定这是否符合标准(我是机器学习的新手......)。我很灵活,只是真正质疑我的设置出了什么问题,以及我是否需要完全采用新方法。

感谢您为改进代码提供的任何建议和具体编辑。

最佳答案

当您使用线性回归时。您实际上只是在数据中拟合一条线。如果数据不是线性的,那么这不是一个很好的方法。请注意,您的数据与日期之间不是线性的:

enter image description here

在数据上拟合一条线(即进行线性回归)得到的线不能很好地预测数据:

enter image description here

但是,您的数据的某些子集更加线性。例如,如果您从第 8 天开始使用线性回归,则会得到以下行:

enter image description here

你的“分数”大幅上升。运行代码 1000 次(在这部分数据上),平均得分为 0.875857。您可能想要提出一个模型来解释这样一个事实:在一定百分比下,用户可能会删除文件以释放更多空间。

关于Python scikit-学习 : Why is my LinearRegression classifier's score so low?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54227194/

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