Как найти наиболее похожий элемент из набора на мой тестовый элемент в зависимости от определенных критериев?

#python-3.x #pandas #grouping #similarity

#python-3.x #pandas #группировка #сходство

Вопрос:

У меня есть набор данных группы игроков и различная статистика. Вот пример файла.

                       name      nat   tm  age        pos   cm  kg    app  
0          Héctor Bellerín  Arsenal   es   21  D(R),M(R)  177  74     36   
1          Mathieu Debuchy  Arsenal   fr   31       D(R)  177  76      2   
2          Mathieu Flamini  Arsenal   fr   32       M(C)  178  67  12(4)   
3                Petr Cech  Arsenal   cz   34         GK  196  90     34   
4  Alex Oxlade Chamberlain  Arsenal  eng   23     M(CLR)  180  70  9(13)   

    min  G  A yel red  spG   pa% aerWon moM  tac  int fouls offW clear drbP  
0  3240  1  5   3   -  0.4  85.7    1.1   1  1.6  1.8   0.5    -   2.4  0.6   
1   144  -  -   -   -  0.5  74.7      3   -  4.5  1.5   1.5    -   0.5  0.5   
2  1089  -  -   3   -  0.4  86.8    0.8   -  1.9  2.2   1.1  0.1   1.6  0.8   
3  3060  -  -   -   -    -    59    0.2   2    -    -     -    -     1    -   
4   925  1  -   -   -    1  82.5    0.4   -    1  0.5   0.5    -   0.4  0.5   

  blcks ownG   KP  drb fouled cOff disp unsT  avgP crosses longB thrB   season  
0   0.2    -  0.7  1.8    0.2    -    1  0.9  46.9     0.5   0.9  0.1  2015-16  
1     -    -  0.5  0.5    0.5    -    2  0.5  39.5       -     1    -  2015-16  
2   0.8    -  0.2  0.1    0.2    -  0.3  0.3  39.3     0.1   1.1    -  2015-16  
3     -    -    -  0.1    0.1    -    -    -  25.1       -   8.2    -  2015-16  
4   0.2    -  0.9  1.7    0.6  0.1  1.1  1.1    20     0.4   1.2    -  2015-16  
>>> 
  

Я хочу найти проигрыватель, наиболее похожий на Hector Bellerin (index = 0), по отношению к столбцам tac , int , blcks , unsT cOff , spG , и,,.
Как мне достичь этого, используя а) любые средства вообще и б) используя определенные механизмы кластеризации или группировки? Я знал людей, которые делали подобные вещи, используя евклидовы расстояния, но я не совсем уверен в методологии.

Комментарии:

1. Общая идея состоит в том, чтобы рассматривать игроков как векторы функций (tac, int, …), затем найти метрику для оценки сходства (или различия / расстояния) между векторами (игроками). У вас есть точная цель?

2. Я просто хочу найти десять лучших игроков, похожих на Bellerin, а также немного узнать о машинном обучении в процессе, так что нет, ничего очень точного @sentence

Ответ №1:

каждый игрок здесь является вектором, вы можете выполнить любое векторное подобие

Евклидово расстояние для вашей проблемы,

 player = tac   int   blcks   unsT   cOff   spG
distance(player_1, player_2) = sqrt (sqr(tac_1-tac_2)   sqr(int_1-int_2)   .....)
  

Комментарии:

1. Не могли бы вы порекомендовать учебное пособие для получения дополнительной информации о векторах?

2. @Abhishek следуйте этой статье dataaspirant.com/2015/04/11 / … , в нем обсуждаются некоторые методы векторного подобия

Ответ №2:

Этот алгоритм называется K-means

K-means — это алгоритм кластеризации, который пытается разделить набор точек на K наборов (кластеров) таким образом, чтобы точки в каждом кластере имели тенденцию находиться рядом друг с другом. Это неконтролируемо, потому что точки не имеют внешней классификации.

смотрите пример здесь:https://towardsdatascience.com/understanding-k-means-clustering-in-machine-learning-6a6e67336aa1

Простой пример, как применить этот метод:

    from sklearn.cluster import KMeans
   import numpy as np
   # Your dataset 
   X = np.array([[1, 2], [1, 4], [1, 0],
          [10, 2], [10, 4], [10, 0]])

   # Devide your  set into clusters by applying Kmeans algorithm
   kmeans = KMeans(n_clusters=2, random_state=0).fit(X)

   # Examine the labels ( We  decide to divide your dataset into 2  
   #clusters n_clusters=2)
   kmeans.labels_
   array([1, 1, 1, 0, 0, 0], dtype=int32)
  

На основе меток вы можете увидеть, какие образцы (проигрыватели) имеют сходство.

Комментарии:

1. Должен ли я сначала обучать модель некоторым данным?

2. Да, обычно вам нужно разделить свой набор данных для обучения и тестирования (70% / 30%). Да, именно вы должны сначала его обучить.

3. . fit(X[, y, sample_weight]) — Вычислить k-означает кластеризацию. Где вы обучаете модель на основе вашего обучающего набора данных predict(X[, sample_weight]) — предсказать ближайший кластер, к которому принадлежит каждый образец в X test.

4. Но как K-means будет работать для чего-то, что имеет более 2 координат, т.Е. Координаты x и y ? Я хотел бы найти похожий проигрыватель на основе ряда факторов (6 или 7) Кроме того, в вашем примере, какая польза от X - Numpy array ? Это обучающий набор?

5. да, конечно, это можно применить к вашему набору данных. Пожалуйста, приложите свой набор данных в формате json, csv или любом конвертируемом формате.