使用逻辑回归预测参数值

Posted

技术标签:

【中文标题】使用逻辑回归预测参数值【英文标题】:Using logistic regression to predict the parameter value 【发布时间】:2017-01-19 13:47:58 【问题描述】:

我编写了不同的基本 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]]

【问题讨论】:

什么是你不明白的? “我不明白”不是问题。 @JulienBernu:编辑了问题。实际上结果它应该预测vals 的值而不是那个,我得到所有值都设置为0.00030676 的大矩阵 您正在使用 predict_proba,这就是您获得预测概率的原因。而是尝试使用 model.predict()。 1) 你的问题在我看来更像是回归,但是你使用的是逻辑回归(尽管它的名字,它是一个分类器),所以你可能使用了错误的技术(我可能错了tho) 和 2) 如前所述,将 predict_proba 替换为 predict 【参考方案1】:
    您正在使用 predict_proba() 提供类概率,而不是使用 predict() > 功能。 您使用了错误的模型。您数据中的目标变量具有连续数据,因此您必须使用线性回归逻辑回归实际上是一个分类器,分类任务需要离散数据(如固定数量的标签)。

【讨论】:

【参考方案2】:

使用以下代码获取预测标签:

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/

【讨论】:

以上是关于使用逻辑回归预测参数值的主要内容,如果未能解决你的问题,请参考以下文章

predict_proba() 预测单个值时的逻辑回归

逻辑回归预测错误

在逻辑回归中预测具有最高可能概率的某个标签

R中的回归(逻辑):寻找特定y值(结果)的x值(预测器)

在 Python 中使用逻辑回归的预测向量的准确度得分

机器学习逻辑回归对肿瘤预测