Прогнозирование многоцелевого выхода методом вероятности c - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь предсказать несколько целей (например, скорость ветра и высоту волны) в определенном месте. Учитывая прошлые исторические данные, я пытаюсь оценить вероятность и наиболее вероятное значение (значение P50) для будущей даты этих двух выходных данных.

Я нашел такие алгоритмы, как регрессор с несколькими выходами, в пакете sklearn, который может предсказать множественные цели. Тем не менее, я не могу получить вероятностный диапазон c для прогноза. Есть ли способ получить это? Кроме того, вы рекомендуете другие методы для достижения этой цели?

Ниже приведен код, который я реализовал с использованием случайно сгенерированных данных о ветре и волне между 1970 и 2019 годами. В конце вы можете увидеть результаты предсказанного значения с использованием алгоритма вывода множественной регрессии, но без вероятности c неопределенность, которую я ищу.

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.externals import joblib
from sklearn.preprocessing import RobustScaler
from sklearn.linear_model import LinearRegression
import random 
numberOfDataSet = 3000
startYear = 1970
endYear = 2019
numberOfDays = 31 
numberOfMonths = 12
numberOfHours = 24

## Here I create random dates including hours, months, days, and years
years = []
months = []
days = [] 
hours = [] 
windSpeed = []
waveHeight = []
for data in range(numberOfDataSet):
    years.append(random.randint(startYear,endYear)) 
    months.append(random.randint(0,numberOfMonths-1))
    days.append(random.randint(0,numberOfDays-1)) 
    hours.append(random.randint(0,numberOfHours-1))
    ## Here I create random data for the wind and wave height: 
    windSpeed.append(random.randint(5,20))
    waveHeight.append(random.randint(3,8))


X = np.zeros((numberOfDataSet,4))  ## Array to store the year, month, day and hour for X values in the prediction
Y = np.zeros((numberOfDataSet,2))  ## Array to store the wind and wave height: 
## Assign data to dates and create a target array  --- ## 1 if wind and wave is not violating the limit of wind speed or wave height, 0 otherwise.:
for datex in range(numberOfDataSet):
        year = years[datex] - startYear
        month = months[datex]
        day = days[datex]
        hour = hours[datex]
        X[datex][0] = year
        X[datex][1] = month
        X[datex][2] = day
        X[datex][3] = hour
        Y[datex][0] = windSpeed[datex]
        Y[datex][1] = waveHeight[datex]


### Machine Learning Part: 

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split

from sklearn.datasets import load_linnerud
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.multioutput import MultiOutputRegressor


X_train, X_test, y_train, y_test = train_test_split(
    X, Y, random_state=4)
regr_multirf =MultiOutputRegressor(GradientBoostingRegressor(), n_jobs=-1).fit(X_train, y_train)

regr_multirf.fit(X_train, y_train)
y_multirf = regr_multirf.predict(X_test)
print y_multirf[:, 0],y_multirf[:, 1]  ## the prediction of test values 


## Testing on future date:
predictedYear = 2022 - startYear 
predictedMonth = 8
predictedDay = 12 
predictedHour = 11
y_multirf_test = regr_multirf.predict([[predictedYear,predictedMonth,predictedDay,predictedHour]])
print y_multirf_test
print regr_multirf.score(X_test,y_test)
print y_multirf_test.predict_proba(X_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...