2015-03-31 14 views
5

Próbuję przewidzieć wielkość połączenia dla call center na podstawie różnych innych czynników. Mam dość czysty zestaw danych, dość mały, ale wystarczający. Potrafię szkolić i testować dane historyczne, zdobywać punkty, podsumowania itp. Jestem za życia, nie mogąc zrozumieć, w jaki sposób uzyskać prognozę przyszłych połączeń z wykorzystaniem prognozowanych danych o czynnikach. Moje dane są poniżej:sklearn LinearRegression.Predict() numer

Date DayNum factor1 factor2 factor3 factor4 factor5 factor6 factor7 factor8 factor9 VariableToPredict 
9/17/2014 1 592 83686.46 0 0 250 15911.8 832 99598.26 177514 72 
9/18/2014 2 1044 79030.09 0 0 203 23880.55 1238 102910.64 205064 274 
9/19/2014 3 707 84207.27 0 0 180 8143.32 877 92350.59 156360 254 
9/20/2014 4 707 97577.78 0 0 194 16688.95 891 114266.73 196526 208 
9/21/2014 5 565 83084.57 0 0 153 13097.04 713 96181.61 143678 270 

Kod mam tak daleko jest poniżej:

from sklearn import metrics 
from sklearn.preprocessing import StandardScaler 
from sklearn.cross_validation import KFold, cross_val_score 
from sklearn.linear_model import LinearRegression 
import pandas as pd 

d = pd.read_csv("H://My Documents//Python Scripts//RawData//Q2917.csv", "r", delimiter=",") 
e = pd.read_csv("H://My Documents//Python Scripts//RawData//FY16q2917Test.csv", "r", delimiter=",") 
#print(d) 
#b = pd.DataFrame.as_matrix(d) 
#print(b) 
x = d.as_matrix(['factor2', 'factor4', 'factor5', 'factor6'])  
y = d.as_matrix(['VariableToPredict']) 
x1 = e.as_matrix(['factor2', 'factor4', 'factor5', 'factor6']) 
y1 = e.as_matrix(['VariableToPredict']) 
#print(len(train)) 
#print(target) 
#use scaler 
scalerX = StandardScaler() 
train = scalerX.fit_transform(x1) 
scalerY = StandardScaler() 
target = scalerY.fit_transform(y1) 

clf = LinearRegression(fit_intercept=True) 
cv = KFold(len(train), 10, shuffle=True, random_state=33) 


#decf = LinearRegression.decision_function(train, target) 
test = LinearRegression.predict(train, target) 
score = cross_val_score(clf,train, target,cv=cv) 

print("Score: {}".format(score.mean())) 

To oczywiście daje mi błąd, że istnieją wartości Null w wartości Y, które istnieją, ponieważ jest puste i próbuję to przewidzieć. Problem polega na tym, że jestem na tyle nowy, aby pytać, że zasadniczo nie rozumiem, w jaki sposób należy to zbudować. nawet gdyby działało w ten sposób, nie byłoby to poprawne, nie uwzględnia przeszłych danych podczas budowania modelu w celu przewidywania przyszłości. Czy muszę mieć te w tym samym pliku prawdopodobnie? jeśli tak, to jak mogę nakazać rozważenie tych 3 kolumn od wiersza a do wiersza b, przewidzieć zależną kolumnę dla tych samych wierszy, a następnie zastosować ten model do analizy tych trzech kolumn dla przyszłych danych i przewidzieć przyszłe połączenia. Nie oczekuję tutaj całej odpowiedzi, to jest moje zadanie, ale wszelkie małe wskazówki byłyby bardzo cenne.

+0

Należy wyjaśnić, że powyższe dane jest tylko fragment. Nie próbuję prognozować na podstawie kilku wierszy. – Mellvinbaker

+0

Dla danych treningowych potrzebujesz zmiennej, którą chcesz przewidzieć. Czy to jest pytanie? –

+0

Niezupełnie. W przypadku wierszy danych w przeszłości chcę wyćwiczyć model regresji, ponieważ mam rzeczywiste dane dla zmiennych niezależnych i zależnych. Następnie za pomocą zmiennych niezależnych w pozostałych wierszach (przewidywane przyszłe wartości) można przewidzieć przyszłą zmienną zależną. – Mellvinbaker

Odpowiedz

8

Aby zbudować model regresji, potrzebne są dane treningowe i wyniki treningowe. Pozwalają one dopasować zestaw parametrów regresji do problemu.

Następnie, aby przewidzieć, potrzebujesz danych prognozowania, ale NIE wyników prognozowania, ponieważ ich nie masz - próbujesz je przewidzieć!

Poniższy kod, na przykład, będzie działać:

from sklearn.linear_model import LinearRegression 
import numpy as np 

trainingData = np.array([ [2.3,4.3,2.5], [1.3,5.2,5.2], [3.3,2.9,0.8], [3.1,4.3,4.0] ]) 
trainingScores = np.array([3.4,7.5,4.5,1.6]) 

clf = LinearRegression(fit_intercept=True) 
clf.fit(trainingData,trainingScores) 

predictionData = np.array([ [2.5,2.4,2.7], [2.7,3.2,1.2] ]) 
clf.predict(predictionData) 

Wygląda to tak, jakby jesteś wprowadzenie złą liczbę argumentów do rozmowy predict() - spojrzeć na moim fragmencie tutaj i powinno być w stanie wymyślić, jak to zmienić.

Tylko zainteresowania, można uruchomić następującą linię potem, aby uzyskać dostęp do parametrów regresji że pasuje do danych: print repr(clf.coef_)

Powiązane problemy