Python中的KNN实现

Posted

技术标签:

【中文标题】Python中的KNN实现【英文标题】:KNN implementation in Python 【发布时间】:2018-12-04 01:24:05 【问题描述】:

我正在尝试在 Python 中实现一个简单的 KNN 技术,我正在使用每分钟的股票价格数据,并使用我的 x 变量作为开盘价、收盘价和成交量数据来预测下一分钟的开盘价。我的代码如下:-

import numpy as np
import pandas as pd
import scipy
import matplotlib.pyplot as plt
from pylab import rcParams
import urllib
import sklearn
from sklearn.neighbors import KNeighborsRegressor
from sklearn import neighbors
from sklearn import preprocessing
from sklearn.cross_validation import train_test_split
from sklearn import metrics 
from googlefinance.client import get_price_data, get_prices_data, get_prices_time_data
import copy

np.set_printoptions(precision = 4, suppress = True)
rcParams['figure.figsize']=7,4
plt.style.use('seaborn-whitegrid')




param = 'q':"DJUSBK", 'i':"60",'x':"INDEXDJX",'p':"1Y" # Dow Joes Banks
djusbk = get_price_data(param)
ticker_list=['ASB','BXS','BAC','BOH','BKU'] # 5 stocks from the Dow Jones Bank Index
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] = df

asb = 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)


# Splitting your data into test and training data sets
X_prime = asb_prime_copy.ix[:,(0,1,2)].values
asb_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)].values
y = asb_open_next.ix[:,(0)].values

X = preprocessing.scale(X_prime)

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.5,random_state = 17)

#Building and Training Model  with Training Data
clf = neighbors.KNeighborsRegressor()
clf.fit(X_train,y_train)
print(clf)

# Evaluating the model's predictions against the test dataset
y_expect=y_test

y_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() 进行了更新,并且已经解决了之前的问题

【问题讨论】:

LogisticRegression: Unknown label type: 'continuous' using sklearn in python的可能重复 您已接受一个答案; “上一期”到底是什么意思?还有什么问题悬而未决吗??实际上,接受的答案 = 案例已关闭,除了可能的微小调整/澄清...我强烈建议您提出一个新问题。 【参考方案1】:

您正在处理回归问题:预测价格。所以从KNeighborsClassifier切换到KNeighborsRegressor就可以解决这个问题了。

【讨论】:

那我应该如何修改最后一行?我已经更新了代码的最后 3 行 您无法为回归问题生成分类报告 是的,您需要修改最后一行,因为分类指标对回归问题没有用处。检查哪些回归指标适合您的问题,并采用 provided 之一或根据需要计算您自己的指标。 @DebdiptaMajumdar 提供答案(并被接受!)后更新代码是不是好的做法,因为它使答案看起来无关紧要.您应该编辑您的帖子并指出,或者提出一个新问题...

以上是关于Python中的KNN实现的主要内容,如果未能解决你的问题,请参考以下文章

day-9 sklearn库和python自带库实现最近邻KNN算法

机器学习:KNN算法Python实现

人工智能之KNN算法

利用Python进行数字识别

利用Python进行数字识别

python_mmdt:从1到2--实现基于KNN的机器学*恶意代码分类器