我正在尝试在Python中实现一个简单的KNN技术,我使用的是分钟级别的股票价格数据,并使用开盘价、收盘价和交易量作为我的x变量来预测下一分钟的开盘价。我的代码如下:
import numpy as npimport pandas as pdimport scipyimport matplotlib.pyplot as pltfrom pylab import rcParamsimport urllibimport sklearnfrom sklearn.neighbors import KNeighborsRegressorfrom sklearn import neighborsfrom sklearn import preprocessingfrom sklearn.cross_validation import train_test_splitfrom sklearn import metrics from googlefinance.client import get_price_data, get_prices_data, get_prices_time_dataimport copynp.set_printoptions(precision = 4, suppress = True)rcParams['figure.figsize']=7,4plt.style.use('seaborn-whitegrid')param = {'q':"DJUSBK", 'i':"60",'x':"INDEXDJX",'p':"1Y"} # 道琼斯银行指数djusbk = get_price_data(param)ticker_list=['ASB','BXS','BAC','BOH','BKU'] # 道琼斯银行指数中的5只股票ticker_dict = {}for i in ticker_list : param = {'q':i, 'i':"60",'x':"NYSE",'p':"1Y"} df = get_price_data(param) x=i ticker_dict[x] = dfasb = copy.deepcopy(ticker_dict['ASB'])asb_prime = pd.DataFrame(asb['Open'])asb_prime['Close'] = asb['Close']asb_prime['Volume'] = asb['Volume']asb_prime_copy = copy.deepcopy(asb_prime)# 将数据分割成测试和训练数据集X_prime = asb_prime_copy.ix[:,(0,1,2)].valuesasb_open_next = pd.DataFrame(copy.deepcopy(asb['Open']))asb_open_next.drop(asb_open_next.index[:1], inplace=True)asb_prime_copy= asb_prime_copy[:-1]X_prime = asb_prime_copy.ix[:,(0,1,2)].valuesy = asb_open_next.ix[:,(0)].valuesX = preprocessing.scale(X_prime)X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.5,random_state = 17)# 使用训练数据构建和训练模型clf = neighbors.KNeighborsRegressor()clf.fit(X_train,y_train)print(clf)# 评估模型在测试数据上的预测结果y_expect=y_testy_pred= clf.predict(X_test)print(metrics.classification_report(y_expect,y_pred))
在最后我遇到了一个错误。不确定为什么?我使用的是Python 3.x
File "C:\Users\gg\Anaconda3\lib\site-packages\sklearn\utils\multiclass.py", line 97, in unique_labels raise ValueError("Unknown label type: %s" % repr(ys))ValueError: Unknown label type: (array([ 28.2 , 28.375, 28.325, ..., 28.075, 28.275, 28.1 ]), array([ 28.23 , 28.4 , 28.32 , ..., 28.055, 28.28 , 28.08 ]))
正如下面答案中建议的,将KNeighborsClassifier()
更新为KNeighborsRegressor()
解决了之前的问题
回答:
您处理的是一个回归问题:预测价格。因此,将KNeighborsClassifier
切换到KNeighborsRegressor
将解决此问题。