powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python. KNN
3 сообщений из 3, страница 1 из 1
Python. KNN
    #40081750
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть такой код с фейковыми данными

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
import numpy as np
from sklearn.neighbors import NearestNeighbors, KNeighborsClassifier, RadiusNeighborsClassifier
import matplotlib.pyplot as plt
%matplotlib inline

samples = np.array(
                    [                        
                        ['SKU1', 0., 0.],
                        ['SKU2', 0.15, 0.3],
                        ['SKU3', 0.3, 0.6],
                        ['SKU4', 0.5, 0.7],                        
                        ['SKU5', 0.7, 0.65],
                        ['SKU6', 0.85, 0.7],
                        ['SKU7', 1., 1.],
                    ]
                   )

X = samples[:, 1:].astype(np.float32)
Y = samples[:, 0].astype(np.object)

radius = 0.2
point = np.array([[0.79, 0.80]])


Нужно с помощью метода KNN найти одно ближайшее (похожее) SKU для заданной точки point .
...
Рейтинг: 0 / 0
Python. KNN
    #40081751
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дальше пишу такой код
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
#Вариант 1. Использование класса NearestNeighbors и метода kneighbors
nn = NearestNeighbors(n_neighbors=1, radius = radius, metric='euclidean', n_jobs=-1).fit(X)

distances, indices = nn.kneighbors(point)

print('Вариант 1')
print([Y[i] for i in np.asarray(indices)])


#Вариант 2 Использование класса NearestNeighbors и метода radius_neighbors
nn = NearestNeighbors(n_neighbors=1, radius = radius, metric='euclidean', n_jobs=-1).fit(X)

neigh_dist, neigh_ind = nn.radius_neighbors(point, sort_results = True)

print()
print('Вариант 2')
print([Y[i] for i in np.asarray(neigh_ind)])


#Вариант 3. Использование класса KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1, metric='euclidean', n_jobs=-1).fit(X, Y)
y_pred = knn.predict(point)

print()
print('Вариант 3')
print(y_pred)


#Вариант 4. Использование класса RadiusNeighborsClassifier
rnn = RadiusNeighborsClassifier(radius = radius, metric='euclidean', n_jobs=-1, ).fit(X, Y)
    
try:
    y_pred_ = rnn.predict(point)
except:
    y_pred_ = None

print()
print('Вариант 4')
print(y_pred_)


Выдает такой результат:
...
Рейтинг: 0 / 0
Python. KNN
    #40081752
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходя из этого возникают следующие вопросы:

1. Почему во втором варианте возвращает два SKU, если в классе для n_neighbors было задано 1?
Код: python
1.
nn = NearestNeighbors(n_neighbors=1, radius = radius, metric='euclidean', n_jobs=-1).fit(X)


2. Если смотреть на график, то на глаз заметно, что для заданной точки ближайшее SKU это SKU6. Но в четвертом методе возвращает другое SKU, то есть SKU5. Почему так?

3. Во втором варианте возвращает 2 SKU, а в первом одно SKU. Почему так?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python. KNN
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]