Python 用于预测一年中的操作数的最佳机器学习算法是什么?

Python 用于预测一年中的操作数的最佳机器学习算法是什么?,python,scikit-learn,prediction,Python,Scikit Learn,Prediction,我有一个由两列组成的数据框架,第一列是一系列日期,第二列是2019年完成的操作数。我想应用ML来预测2020年的运营数量 在将日期转换为“int64”后,我尝试使用Sklearn LinearRegression进行预测,但预测值与我的预期值相差太远,系数为-3 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model

我有一个由两列组成的数据框架,第一列是一系列日期,第二列是2019年完成的操作数。我想应用ML来预测2020年的运营数量

在将日期转换为“int64”后,我尝试使用Sklearn LinearRegression进行预测,但预测值与我的预期值相差太远,系数为-3

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.externals import joblib
from sklearn import metrics
import datetime
df= pd.read_csv(r'...surgical_clean.csv')
df= pd.to_datetime(df['pd_date_of_operation']).value_counts().to_frame().reset_index()
year_start = np.datetime64(pd.to_datetime(2017, format= '%Y'))
df= df[(df['index'] >= year_start)].astype('int64')
x= df.iloc[:,:-1].values
y= df.iloc[:,1].values
x_train,x_test,y_train,y_test= train_test_split(x,y, test_size=0.2, random_state=0) 
regressor= LinearRegression()
model= regressor.fit(x_train,y_train)  
y_pred= model.predict(x_test).round(0)
>>>array([4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
       4., 4., 4., 4., 4., 4.])

你的方法完全错误。您可以使用机器学习来训练一个模型,该模型适合一组“”及其各自的“值”或“”

在你的情况下,你把约会当作一个特征,这正是你错的地方

日期不是功能。日期不是现象的特征(操作次数)。

您选择的“值”/“标签”是“操作数”。没有问题

在您着手修复代码中的错误之前,请纠正您对机器学习的理解

关于这个问题陈述要考虑的事情:

在您的数据集中,您可能有一些“变量”(即“特征”),它们会影响您的操作数量,如天气。下雨天,你的手术次数可能会减少,晴天的手术次数可能会增加(我不知道你说的“手术”是什么意思,但这只是我举的一个例子)。因此,天气将是一个“特征”,你可以在模型训练中使用。现在可能有不止一个“特性”(可能多达一百万,这取决于您的数据集)

找出数据集中所有可能的特征,然后选择合适的技术,如线性回归、聚类、支持向量机等


快乐学习!:)

非常感谢。这里的“手术”是指为患者进行的医疗程序。数据集由两列组成,一列是日期列,另一列是在此日期内完成的操作数。这项任务是预测在未来的日期将要进行多少次操作。当然可以。但这将涉及数据的特征工程:将时间序列数据转换为有监督的学习。在特征工程中,您将定义“滞后时间”或“滞后”(滞后X,X可以是1,2…)。一旦完成特征工程,就可以从时间序列预测开始。还有“平稳性”(stationarity)的概念。这是一个非常有趣的话题,一定要去看看。但对日期/时间应用线性回归不是时间序列预测。
print(model.coef_)
print(model.intercept_)
>>>[-3.81638905e-18]
9.546358714910848
from sklearn import metrics
print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred).round(1))
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred).round(1))
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)).round(1))
>>>Mean Absolute Error: 1.1
Mean Squared Error: 2.4
Root Mean Squared Error: 1.5
predict = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})
predict.sum()
>>>Actual       589.0
Predicted    636.0
dtype: float64