0

Я написал различный базовый код sklearn с использованием логистической регрессии для прогнозирования значения.Использование логистической регрессии для прогнозирования значения параметра

Обучение данных выглядит -

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 

и я выбрал первые 8 пунктов от подготовки данных просто проверить классификатор, который

Я хочу, чтобы предсказать значение vals , в данных тестирования, я поставил его как 0. Это верно?

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 

Код моей модели, отлично работает. Но мой результат выглядит треугольником. Я ожидал значения vals. Вместо этого я получаю большую матрицу со всем значением элемента как 0.00030676.

Я ценю, если кто-то может сообщить подробности или помочь мне лучше сыграть с этим результатом.

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]) 

результатов выглядит следующим образом:

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

Что это такое, что вы не понимаете? «Я не понимаю» не ставит вопроса. – Julien

+0

@JulienBernu: отредактировал вопрос. Фактически в результате он должен предсказывать значение 'vals', а не то, что я получаю большую матрицу со всеми значениями, установленными в' 0.00030676' – user123

+1

. Вы используете pred_proba, поэтому вы получаете вероятность прогноза. Вместо этого попробуйте использовать model.predict(). –

ответ

3
  1. Вы используете predict_proba(), который дает вероятности класса, вместо того, что вы должны использовать предсказать() функции ,
  2. Вы используете Неверная модель. Целевая переменная в ваших данных имеет непрерывных данных, поэтому вам нужно будет использовать линейную регрессию . Логистическая регрессия действительно работает как классификатор и задачи классификации требуют дискретных данных (как в фиксированном числе меток).
1

Используйте следующий код, чтобы получить предсказанные метки:

predicted_labels= model.predict(test[x1]) 

Также попробуйте следующий пример, чтобы понять логистическую регрессию в sklearn:

# 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)) 

Пример Источник: http://machinelearningmastery.com/get-your-hands-dirty-with-scikit-learn-now/

Смежные вопросы