【问题标题】:AttributeError - Even though there seem to be no attribute errorAttributeError - 即使似乎没有属性错误
【发布时间】:2017-12-30 17:00:05
【问题描述】:

我目前正在学习如何使用 Python 进行机器学习。在我进行过程中,解释器检测到 AttributeError,但我没有发现任何问题。有人可以帮忙解决这个错误吗?

我的代码:

import pandas as pd 
import quandl, math
import numpy as np 
import datetime
import matplotlib.pyplot as plt 
from matplotlib import style 
from sklearn import preprocessing, cross_validation, svm
from sklearn.linear_model import LinearRegression

style.use('ggplot')

quandl.ApiConfig.api_key = ''

df = quandl.get('EOD/V', api_key = '')
df = df[['Adj_Open','Adj_High','Adj_Low','Adj_Close','Adj_Volume',]]
df['ML_PCT'] = (df['Adj_High'] - df['Adj_Close']) / df['Adj_Close'] * 100.0
df['PCT_change'] = (df['Adj_Close'] - df['Adj_Open']) / df['Adj_Open'] * 100.0

df = df[['Adj_Close', 'ML_PCT', 'PCT_change', 'Adj_Volume']]

forecast_col = 'Adj_Close'

df.fillna(value=-99999, inplace=True)
forecast_out = int(math.ceil(0.01 * len(df)))
df['label'] = df[forecast_col].shift(-forecast_out)

X = np.array(df.drop(['label'], 1))
X = preprocessing.scale(X)
X = X[:-forecast_out]

df.dropna(inplace=True)
y = np.array(df['label'])
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2)

clf = LinearRegression(n_jobs=-1)
clf.fit(X_train, y_train)
confidence = clf.score(X_test, y_test)
print(confidence)

X_lately = X[-forecast_out:]
forecast_set = clf.predict(X_lately)
print(forecast_set, confidence, forecast_out)

df['Forecast'] = np.nan 

last_date = df.iloc[-1].name
last_unix = last_date.timestamp()
one_day = 86400
next_unix = last_unix + one_day

for i in forecast_set:
    next_date = datetime.datetime.fromtimestamp(next_unix)
    next_unix += 86400
    df.loc[next_date] = [np.nan for _ in range(len(df.columns)-1)]+[i]

df['Adj_Close'].plot()
df['Forecast'].plot()
plt.legend(loc = 4)
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()

错误:

C:\Python27\lib\site-packages\sklearn\cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
  "This module will be removed in 0.20.", DeprecationWarning)
0.989124557421
(array([ 94.46383723,  93.27713267,  93.15533011,  93.89038799,
        94.71390166,  95.29332756,  96.23047821,  96.51527839,
        96.17180986,  96.17575181,  96.68721678,  96.85114045,
        97.57455941,  97.98680762,  97.32961443,  97.55881174,
        97.54090546,  96.17175855,  94.95430597,  96.49002102,
        96.82364097,  95.63098589,  95.61236103,  96.24114818])Traceback (most recent call last):, 0.98912455742140903, 24)

  File "C:\Users\qasim\Documents\python_machine_learning\regression.py", line 47, in <module>
    last_unix = last_date.timestamp()
AttributeError: 'Timestamp' object has no attribute 'timestamp'
[Finished in 36.6s]

【问题讨论】:

标签: python python-2.7 machine-learning scikit-learn attributeerror


【解决方案1】:

问题在于 last_date 是 pandas Timestamp 对象,而不是 python datetime 对象。不过,它确实有类似datetime.timetuple() 的功能。试试这个:

假设last_date 是UTC,使用这个:

import calendar

...
last_date = df.iloc[-1].name
last_unix = calendar.timegm(last_date.timetuple())

如果last_date 在您的本地时区,请使用:

import time

...
last_date = df.iloc[-1].name
last_unix = time.mktime(last_date.timetuple())

【讨论】:

  • 太棒了。如果它解决了您的问题,介意接受答案吗?
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 2023-03-22
  • 2021-03-18
  • 1970-01-01
  • 2022-01-20
  • 2021-04-06
  • 2018-03-15
  • 2019-03-17
相关资源
最近更新 更多