【问题标题】:Predict the value based on two parameters根据两个参数预测值
【发布时间】:2017-01-18 06:19:21
【问题描述】:

我正在尝试学习数值分析。我正在关注这篇文章-http://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html

我的数据如下所示:

date    hr_of_day   vals
2014-05-01  0   72
2014-05-01  1   127
2014-05-01  2   277
2014-05-01  3   411
2014-05-01  4   666
2014-05-01  5   912
2014-05-01  6   1164
2014-05-01  7   1119
2014-05-01  8   951
2014-05-01  9   929
2014-05-01  10  942
2014-05-01  11  968
2014-05-01  12  856
2014-05-01  13  835
2014-05-01  14  885
2014-05-01  15  945
2014-05-01  16  924
2014-05-01  17  914
2014-05-01  18  744
2014-05-01  19  377
2014-05-01  20  219
2014-05-01  21  106
2014-05-01  22  56
2014-05-01  23  43
2014-05-02  0   61

对于给定的日期和小时,我想预测 vals 并识别模式。

我已经写了这段代码:

import pandas as pd
from sklearn import datasets
from sklearn import metrics
from sklearn.linear_model import LogisticRegression

# read the data in
Train = pd.read_csv("data_scientist_assignment.tsv")
#print df.head()
x1=["date", "hr_of_day", "vals"]
#print x1
#print df[x1]
test=pd.read_csv("test.tsv")


model = LogisticRegression()
model.fit(Train[x1], Train["vals"])
print(model)
print model.score(Train[x1], Train["vals"])

print model.predict_proba(test[x1])

我收到这个错误:

KeyError: "['date' 'hr_of_day' 'vals'] not in index"

有什么问题。有没有更好的方法来做到这一点?

测试文件格式:

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

完全错误赌注:

Traceback (most recent call last):
  File "socratis.py", line 16, in <module>
    model.fit(Train[x1], Train["vals"])
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 1986, in __getitem__
    return self._getitem_array(key)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 2030, in _getitem_array
    indexer = self.ix._convert_to_indexer(key, axis=1)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/indexing.py", line 1210, in _convert_to_indexer
    raise KeyError('%s not in index' % objarr[mask])
KeyError: "['date' 'hr_of_day' 'vals'] not in index"

【问题讨论】:

  • @Merlin,这个问题包含代码并且是关于编程错误,而不是关于统计数据本身。国际海事组织,这完全是关于 SO 的主题。
  • 请包括完整的错误堆栈跟踪,而不仅仅是错误名称。
  • @cel: 更新了

标签: machine-learning classification logistic-regression


【解决方案1】:

建议阅读TSV时提供sep='\t' parameter

Train = pd.read_csv("data_scientist_assignment.tsv", sep='\t') # use TAB as column separator

当你解决这个问题时,队列中还有另一个问题:ValueError: could not convert string to float: '2014-09-13' 这是因为线性回归需要数字特征,而列 date 是字符串类型。

您可以通过将日期转换为时间戳(自纪元以来的秒数)来引入新列 timestamp 并将其用作特征:

Train['timestamp'] = pd.to_datetime(Train['date']).apply(lambda a: a.timestamp())
x1=["timestamp", "hr_of_day", "vals"]

从 ML 的角度来看,您不应将目标值 vals 用作输入特征。您还应该考虑将日期表示为单独的特征:日、月、年;或星期几,这取决于您要建模的内容。

【讨论】:

  • 在 x1 中省略 vals 后仍然出现相同的错误。测试文件格式是否正确?
  • @user3449212 尝试为read_csv 添加sep='\t' 参数。在进一步做任何事情之前,请确保您已正确加载 TSV 文件。 print(Train.columns)print(Train) 等。
  • 在 X 和 Y 中包含 vals 意味着您想使用 vals 来预测 vals,这是没有意义的。但从编程的角度来看,这并不重要,它不应该产生任何错误。
  • 谢谢,我更新了代码。打印看起来像 Index([u'2014-05-01', u'0', u'72'], dtype='object') Index([u'date', u'hr_of_day'], dtype='object') 但索引错误仍然存​​在
  • @user3449212 我已经重写了答案来解决实际问题:加载TSV时,你必须告诉解析器使用TAB作为分隔符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 2017-05-20
  • 2022-11-15
  • 1970-01-01
  • 2019-11-21
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多