Ошибка значения: непрерывный формат не поддерживается для KNN

#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 — Руководство по стилю для кода Python

3. ошибка показывает наличие проблемы, evaluate_print и вам следует проверить в документации, какие данные она ожидает. Похоже, вы отправляете данные, которые он не может использовать, потому что они имеют неправильные значения.

4. основываясь на документации для evaluate_print , я думаю, что она нужна y_train_pred вместо y_train_scores

5. это дает мне ту же ошибку, когда я переключаюсь на y_train_pred