Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python. KNN / 3 сообщений из 3, страница 1 из 1
05.07.2021, 11:29
    #40081750
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python. KNN
Здравствуйте!

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

Код: 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
05.07.2021, 11:31
    #40081751
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python. KNN
Дальше пишу такой код
Код: 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
05.07.2021, 11:33
    #40081752
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python. KNN
Исходя из этого возникают следующие вопросы:

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


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