0

Ich habe geschrieben, variieren grundlegende Sklearn-Code mit logistischen Regression, um den Wert vorherzusagen.Mit logistischen Regression, um den Parameter Wert vorherzusagen

Trainingsdaten sieht aus wie -

https://gist.github.com/anonymous/563591e0395e8d988277d3ce63d7438f

date hr_of_day vals 
01/05/2014 9 929 
01/05/2014 10 942 
01/05/2014 11 968 
01/05/2014 12 856 
01/05/2014 13 835 
01/05/2014 14 885 
01/05/2014 15 945 
01/05/2014 16 924 
01/05/2014 17 914 
01/05/2014 18 744 
01/05/2014 19 377 
01/05/2014 20 219 
01/05/2014 21 106 

und ich habe zuerst 8 Veröffentlichungen von Trainingsdaten ausgewählt, um nur den Klassifikator zu validieren, die

ist

ich den Wert von vals vorhersagen wollen , in Testdaten habe ich es als 0 gesetzt. Ist das korrekt?

date hr_of_day vals 
2014-05-01 0 0 
2014-05-01 1 0 
2014-05-01 2 0 
2014-05-01 3 0 
2014-05-01 4 0 
2014-05-01 5 0 
2014-05-01 6 0 
2014-05-01 7 0 

Mein Modellcode, funktioniert gut. Aber mein Ergebnis sieht gestört aus. Ich habe Wert von vals im Ergebnis erwartet. Statt dessen bekomme ich eine große Matrix mit allen Elementwerten wie 0.00030676.

Ich schätze es, wenn jemand Details geben oder mir helfen kann, mit diesem Ergebnis besser zu spielen.

import pandas as pd 
from sklearn import datasets 
from sklearn import metrics 
from sklearn.linear_model import LogisticRegression 
from datetime import datetime, date, timedelta 
Train = pd.read_csv("data_scientist_assignment.tsv", sep='\t', parse_dates=['date']) 
Train['timestamp'] = Train.date.values.astype(pd.np.int64) 
x1=["timestamp", "hr_of_day"] 
test=pd.read_csv("test.tsv", sep='\t', parse_dates=['date']) 
test['timestamp'] = test.date.values.astype(pd.np.int64) 
print(Train.columns) 
print(test.columns) 
model = LogisticRegression() 
model.fit(Train[x1], Train["vals"]) 
print(model) 
print model.score(Train[x1], Train["vals"]) 
print model.predict_proba(test[x1]) 

Ergebnisse wie folgt aussieht:

In [92]: print(model) 
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True, 
      intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1, 
      penalty='l2', random_state=None, solver='liblinear', tol=0.0001, 
      verbose=0, warm_start=False) 

In [93]: print model.score(Train[x1], Train["vals"]) 
0.00520833333333 

In [94]: 

In [94]: print model.predict_proba(test[x1]) 
[[ 0.00030676 0.00030676 0.00030676 ..., 0.00030889 0.00030885 
    0.00030902] 
[ 0.00030676 0.00030676 0.00030676 ..., 0.00030889 0.00030885 
    0.00030902] 
[ 0.00030676 0.00030676 0.00030676 ..., 0.00030889 0.00030885 
    0.00030902] 
..., 
[ 0.00030676 0.00030676 0.00030676 ..., 0.00030889 0.00030885 
    0.00030902] 
[ 0.00030676 0.00030676 0.00030676 ..., 0.00030889 0.00030885 
    0.00030902] 
[ 0.00030676 0.00030676 0.00030676 ..., 0.00030889 0.00030885 
    0.00030902]] 
+0

Was ist es, verstehst du nicht? "Ich verstehe nicht" stellt keine Frage. – Julien

+0

@JulienBernu: bearbeitet die Frage. Eigentlich im Ergebnis sollte es den Wert von "Vals" vorherzusagen, anstatt dass, ich bekomme große Matrix mit allen Werten auf 0.00030676 gesetzt – user123

+1

Sie verwenden Predict_Proba, das ist, warum Sie Vorhersagewahrscheinlichkeit erhalten. Versuchen Sie stattdessen, model.predict() zu verwenden. –

Antwort

3
  1. Sie verwenden predict_proba() die Klassenwahrscheinlichkeiten gibt, statt dass sollten Sie vorhersagen() Funktion .
  2. Sie verwenden ein falsches Modell. Die Zielvariable in Ihren Daten hat kontinuierliche Daten, daher müssen Sie lineare Regression verwenden. Logistische Regression funktioniert tatsächlich als Klassifikator und Klassifizierung Aufgaben erfordern diskrete Daten (wie in festen Anzahl von Etiketten).
1

Verwenden folgenden Code, um vorhergesagte Etiketten zu erhalten:

predicted_labels= model.predict(test[x1]) 

finden Sie zB folgende logistische Regression in sklearn zu verstehen:

# Logistic Regression 
from sklearn import datasets 
from sklearn import metrics 
from sklearn.linear_model import LogisticRegression 
# load the iris datasets 
dataset = datasets.load_iris() 
# fit a logistic regression model to the data 
model = LogisticRegression() 
model.fit(dataset.data, dataset.target) 
print(model) 
# make predictions 
expected = dataset.target 
predicted = model.predict(dataset.data) 
# summarize the fit of the model 
print(metrics.classification_report(expected, predicted)) 
print(metrics.confusion_matrix(expected, predicted)) 

Beispiel Quelle: http://machinelearningmastery.com/get-your-hands-dirty-with-scikit-learn-now/

Verwandte Themen