#python #pandas #machine-learning #scikit-learn
#python #панды #машинное обучение #scikit-learn
Вопрос:
Играя с sklearn
и я хотел предсказать Close
цены TSLA на несколько дат, используя Open
, High
, Low
цены и Volume
. Я использовал очень простую модель для прогнозирования закрытия, и они предположительно были точными на 100%, и я не уверен, почему. Ошибка 0% заставляет меня чувствовать, что я неправильно настроил свою модель.
Код:
from os import X_OK
from numpy.lib.shape_base import apply_along_axis
import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error
tsla_data_path = "/Users/simon/Documents/PythonVS/ML/TSLA.csv"
tsla_data = pd.read_csv(tsla_data_path)
tsla_features = ['Open','High','Low','Volume']
y = tsla_data.Close
X = tsla_data[tsla_features]
# define model
tesla_model = DecisionTreeRegressor(random_state = 1)
# fit model
tesla_model.fit(X,y)
#print results
print('making predictions for the following five dates')
print(X.head())
print('________________________________________________')
print('the predictions are')
print(tesla_model.predict(X.head()))
print('________________________________________________')
print('the error is ')
print(mean_absolute_error(y.head(),tesla_model.predict(X.head())))
Вывод:
making predictions for the following five dates
Open High Low Volume
0 67.054001 67.099998 65.419998 39737000
1 66.223999 66.786003 65.713997 27778000
2 66.222000 66.251999 65.500000 12328000
3 65.879997 67.276001 65.737999 30372500
4 66.524002 67.582001 66.438004 32868500
________________________________________________
the predictions are
[65.783997 66.258003 65.987999 66.973999 67.239998]
________________________________________________
the error is
0.0
Данные:
Date,Open,High,Low,Close,Adj_Close,Volume
2019-11-26,67.054001,67.099998,65.419998,65.783997,65.783997,39737000
2019-11-27,66.223999,66.786003,65.713997,66.258003,66.258003,27778000
2019-11-29,66.222000,66.251999,65.500000,65.987999,65.987999,12328000
2019-12-02,65.879997,67.276001,65.737999,66.973999,66.973999,30372500
2019-12-03,66.524002,67.582001,66.438004,67.239998,67.239998,32868500
Комментарии:
1. Вы прогнозируете, используя тот же набор, который вы передали
fit
.
Ответ №1:
Вы совершаете ошибку, измеряя производительность вашей модели по набору данных, используемому для ее обучения.
Если вы хотите иметь надлежащую метрику оценки вашей производительности, вы должны разделить свой набор данных на 2 набора данных. Тот, который используется для обучения модели, а другой для измерения ее производительности. Вы можете разделить свой набор данных, используя sklearn.model_selection.train_test_split()
следующее:
tesla_model = DecisionTreeRegressor(random_state = 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
tesla_model.fit(X_train, X_test)
mae = mean_absolute_error(y_test,tesla_model.predict(X_test))
Взгляните на эту страницу Википедии, объясняющую набор данных differents в ML.