#python #pandas #numpy #scikit-learn #knn
Вопрос:
Я получаю эту ошибку, я думаю, из-за двоичного y_test_pred (0 или 1), но я не уверен и не знаю, что изменить, чтобы это сработало
X-это годы(даты), а y-числа
По Данным Обучения:
Traceback (most recent call last):
File "C:UsersRomanDesktopKeyPoyd.py", line 93, in <module>
stock(AAPL, "AAPL")
File "C:UsersRomanDesktopKeyPoyd.py", line 84, in stock
evaluate_print(clf_name, yTrain, y_train_scores)
File "C:UsersRomananaconda3libsite-packagespyodutilsdata.py", line 283, in evaluate_print
roc=np.round(roc_auc_score(y, y_pred), decimals=4),
File "C:UsersRomananaconda3libsite-packagessklearnutilsvalidation.py", line 63, in inner_f
return f(*args, **kwargs)
File "C:UsersRomananaconda3libsite-packagessklearnmetrics_ranking.py", line 547, in roc_auc_score
return _average_binary_score(partial(_binary_roc_auc_score,
File "C:UsersRomananaconda3libsite-packagessklearnmetrics_base.py", line 74, in _average_binary_score
raise ValueError("{0} format is not supported".format(y_type))
ValueError: continuous format is not supported
from pandas import read_csv
from matplotlib import pyplot
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np
#from IPython.core.debugger import set_trace
#import data
AAPL= pd.read_csv('AAPL.csv', header=0, squeeze=True)
#function to get stock
def stock(s, title):
print(title)
#independent variables-Matrix
x= pd.to_datetime(s.iloc[:,0], dayfirst=True)
#print(type(x))
#X=pd.to_datetime(x)
x1=x.values
X=x1.reshape(-1,1)
print(X.shape)
#print(x)
#print(x1.reshape(-1,1))
#np.atleast_2d(X)
#print(len(x))
#dependent variables vectors
#Y = df.iloc[:, -1].values
Y = s.iloc[:, 1].values.reshape(-1,1)
print(len(Y))
from sklearn.model_selection import train_test_split
xTrain, xTest, yTrain, yTest = train_test_split(X, Y, test_size = 0.3 ,random_state = 0)#70% on train and 30% on test
# # train the COPOD detector
# from pyod.models.copod import COPOD
# clf = COPOD()
# clf.fit(xTrain)
# clf.reshape(-1,1)
# # get outlier scores
# y_train_scores = clf.decision_scores_ # raw outlier scores on the train data
# y_test_scores = clf.decision_function(xTest) # predict raw outlier scores on test
# # print("#####################")
# # print( "outlier:", y_test_scores)
from pyod.models.knn import KNN # kNN detector
from sklearn.metrics import roc_curve, roc_auc_score
# train kNN detector
clf_name = 'KNN'
clf = KNN()
clf.fit(xTrain)
# get the prediction label and outlier scores of the training data
y_train_pred = clf.labels_ # binary labels (0: inliers, 1: outliers)
print(y_train_pred)
y_train_scores = clf.decision_scores_ # raw outlier scores
print(y_train_scores)
# get the prediction on the test data
y_test_pred = clf.predict(xTest) # outlier labels (0 or 1)
y_test_scores = clf.decision_function(xTest) # outlier scores
from pyod.utils.data import evaluate_print
from sklearn.metrics import make_scorer
from sklearn.metrics import roc_auc_score
#myscore = make_scorer(roc_auc_score, multi_class='ovo',needs_proba=True)
# evaluate and print the results
print("nOn Training Data:")
evaluate_print(clf_name, yTrain, y_train_scores)
print("nOn Test Data:")
evaluate_print(clf_name, yTest, y_test_scores)
from pyod.utils.example import visualize
visualize(clf_name, xTrain, yTrain, xTest, yTest, y_train_pred,
y_test_pred, show_figure=True, save_figure=False)
stock(AAPL, "AAPL")
Заранее спасибо
Комментарии:
1. сначала вы могли бы использовать
print()
иprint(type())
посмотреть, что у вас есть в переменных.2. вы можете поместить все
imports
в начало файла — таким образом, мы увидим, какие модули нам нужны для запуска кода. Смотрите больше: PEP 8 — Руководство по стилю для кода Python3. ошибка показывает наличие проблемы,
evaluate_print
и вам следует проверить в документации, какие данные она ожидает. Похоже, вы отправляете данные, которые он не может использовать, потому что они имеют неправильные значения.4. основываясь на документации для evaluate_print , я думаю, что она нужна
y_train_pred
вместоy_train_scores
5. это дает мне ту же ошибку, когда я переключаюсь на y_train_pred