#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 или любом конвертируемом формате.