Я читал о настройке гиперпараметров для алгоритма KNN и понял, что лучшая практика его реализации — убедиться, что для каждого сгиба мой набор данных должен быть нормализован и подвергнут избыточной выборке с использованием конвейера (во избежание утечки данных и переобучения). ).
Я пытаюсь определить наилучшее количество соседей (
), что дает мне максимальную точность в обучении. В коде я установил количество соседей в виде диапазона списка (1,50), а количество итераций cv=10.
Мой код ниже:
# dataset reading & preprocessing libraries
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
#oversmapling
from imblearn.over_sampling import SMOTE
#KNN Model related Libraries
import cuml
from imblearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split, GridSearchCV
from cuml.neighbors import KNeighborsClassifier
#loading the dataset
df = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/dataset/IanDataset.csv")
#filling missing values with zeros
df = df.fillna(0)
#replace the data in from being objects to integers
df["command response"].replace({"b'0'": "0", "b'1'": "1"}, inplace=True)
df["binary result"].replace({"b'0'": "0", "b'1'": "1"}, inplace=True)
#change the datatype of some features to be able to be used later
df["command response"] = pd.to_numeric(df["command response"]).astype(float)
df["binary result"] = pd.to_numeric(df["binary result"]).astype(int)
# dataset splitting
X = df.iloc[:, 0:17]
y_bin = df.iloc[:, 17]
# spliting the dataset into train and test for binary classification
X_train, X_test, y_bin_train, y_bin_test = train_test_split(X, y_bin, random_state=0, test_size=0.2)
#making pipleline that normalize, oversample and use classifier before GridSearchCV
pipe = Pipeline([
('normalization', MinMaxScaler()),
('oversampling', SMOTE()),
('classifier', KNeighborsClassifier(metric='eculidean', output='input'))
])
#Using GridSearchCV
neighbors = list(range(1,50))
parameters = {
'classifier__n_neighbors': neighbors
}
grid_search = GridSearchCV(pipe, parameters, cv=10)
grid_search.fit(X_train, y_bin_train)
print("Best Accuracy: {}" .format(grid_search.best_score_))
print("Best num of neighbors: {}" .format(grid_search.best_estimator_.get_params()['n_neighbors']))
На шагеgrid_search.fit(X_train, y_bin_train) программа повторяет ошибку, которую я получаю:
/usr/local/lib/python3.7/site-packages/sklearn/model_selection/_validation.py:619: FitFailedWarning: Estimator fit failed. The score on this train-test partition for these parameters will be set to nan. Details:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/sklearn/model_selection/_validation.py", line 598, in _fit_and_score
estimator.fit(X_train, y_train, **fit_params)
File "/usr/local/lib/python3.7/dist-packages/imblearn/pipeline.py", line 266, in fit
self._final_estimator.fit(Xt, yt, **fit_params_last_step)
File "/usr/local/lib/python3.7/site-packages/cuml/internals/api_decorators.py", line 409, in inner_with_setters
return func(*args, **kwargs)
File "cuml/neighbors/kneighbors_classifier.pyx", line 176, in cuml.neighbors.kneighbors_classifier.KNeighborsClassifier.fit
File "/usr/local/lib/python3.7/site-packages/cuml/internals/api_decorators.py", line 409, in inner_with_setters
return func(*args, **kwargs)
File "cuml/neighbors/nearest_neighbors.pyx", line 397, in cuml.neighbors.nearest_neighbors.NearestNeighbors.fit
ValueError: Metric is not valid. Use sorted(cuml.neighbors.VALID_METRICSeculidean[brute]) to get valid options.
Я не уверен, с какой стороны возникает эта ошибка. Это потому, что я импортирую алгоритм KNN из библиотеки cuML вместо sklearn? Или что-то не так с моей реализацией Pipeline и GridSearchCV?
Я читал о настройке гиперпараметров для алгоритма KNN и понял, что лучшая практика его реализации — убедиться, что для каждого сгиба мой набор данных должен быть нормализован и подвергнут избыточной выборке с использованием конвейера (во избежание утечки данных и переобучения). ). Я пытаюсь определить наилучшее количество соседей ([code]n_neighbors[/code]), что дает мне максимальную точность в обучении. В коде я установил количество соседей в виде диапазона списка (1,50), а количество итераций cv=10. Мой код ниже: [code]# dataset reading & preprocessing libraries import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler
#oversmapling from imblearn.over_sampling import SMOTE
#KNN Model related Libraries import cuml from imblearn.pipeline import Pipeline from sklearn.model_selection import train_test_split, GridSearchCV from cuml.neighbors import KNeighborsClassifier
#loading the dataset df = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/dataset/IanDataset.csv")
#filling missing values with zeros df = df.fillna(0)
#replace the data in from being objects to integers df["command response"].replace({"b'0'": "0", "b'1'": "1"}, inplace=True) df["binary result"].replace({"b'0'": "0", "b'1'": "1"}, inplace=True)
#change the datatype of some features to be able to be used later df["command response"] = pd.to_numeric(df["command response"]).astype(float) df["binary result"] = pd.to_numeric(df["binary result"]).astype(int)
# spliting the dataset into train and test for binary classification X_train, X_test, y_bin_train, y_bin_test = train_test_split(X, y_bin, random_state=0, test_size=0.2)
#making pipleline that normalize, oversample and use classifier before GridSearchCV pipe = Pipeline([ ('normalization', MinMaxScaler()), ('oversampling', SMOTE()), ('classifier', KNeighborsClassifier(metric='eculidean', output='input')) ])
print("Best Accuracy: {}" .format(grid_search.best_score_)) print("Best num of neighbors: {}" .format(grid_search.best_estimator_.get_params()['n_neighbors'])) [/code] На шагеgrid_search.fit(X_train, y_bin_train) программа повторяет ошибку, которую я получаю: [code]/usr/local/lib/python3.7/site-packages/sklearn/model_selection/_validation.py:619: FitFailedWarning: Estimator fit failed. The score on this train-test partition for these parameters will be set to nan. Details: Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/sklearn/model_selection/_validation.py", line 598, in _fit_and_score estimator.fit(X_train, y_train, **fit_params) File "/usr/local/lib/python3.7/dist-packages/imblearn/pipeline.py", line 266, in fit self._final_estimator.fit(Xt, yt, **fit_params_last_step) File "/usr/local/lib/python3.7/site-packages/cuml/internals/api_decorators.py", line 409, in inner_with_setters return func(*args, **kwargs) File "cuml/neighbors/kneighbors_classifier.pyx", line 176, in cuml.neighbors.kneighbors_classifier.KNeighborsClassifier.fit File "/usr/local/lib/python3.7/site-packages/cuml/internals/api_decorators.py", line 409, in inner_with_setters return func(*args, **kwargs) File "cuml/neighbors/nearest_neighbors.pyx", line 397, in cuml.neighbors.nearest_neighbors.NearestNeighbors.fit ValueError: Metric is not valid. Use sorted(cuml.neighbors.VALID_METRICSeculidean[brute]) to get valid options. [/code] Я не уверен, с какой стороны возникает эта ошибка. Это потому, что я импортирую алгоритм KNN из библиотеки cuML вместо sklearn? Или что-то не так с моей реализацией Pipeline и GridSearchCV?
Я пытаюсь написать проект OCR для идентификации цифр без использования каких-либо дополнительных библиотек. Я использую Pygame для рисования и визуализации числа для идентификации. Мне удалось заставить все это работать, но по какой-то странной...
Я получаю сообщение об ошибке: X содержит NaN. Я не увидел никаких значений NaN в наборе данных. Имейте в виду, что перед этим написано несколько строк кода.
Я пишу алгоритм обработки пространственных данных с использованием R-дерева для университетского проекта, где перед нами стоит задача написать алгоритм KNN в виде запроса диапазона с использованием оценки диапазона. Мы не были ограничены одним...
Я пишу алгоритм обработки пространственных данных с использованием R-дерева для университетского проекта, где перед нами стоит задача написать алгоритм KNN в виде запроса диапазона с использованием оценки диапазона. Мы не были ограничены одним...
Я пытался получить пример на странице документов.
cv2.KNearest() был заменен на cv2.ml.knearest_create () .
Однако следующий фрагмент кода все еще приводит к ошибке:
#!/usr/bin/python3
import cv2
import numpy as np
import matplotlib.pyplot as...