KNN算法在Python中的实现

我正在尝试在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将解决此问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注