如何根据特定条件从集合中找到与我的测试项目最相似的项目?

时间:2019-04-09 10:44:53

标签: python-3.x pandas grouping similarity

我有一组球员和各种数据的数据集。这是该文件的示例。

                      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 Bellerintacint,{{1},我想找到最类似于blcks(索引= 0)的播放器},unsTcOff。 我如何使用a)完全使用任何手段和b)使用某些聚类或分组机制来实现?我知道人们会使用欧几里得距离来做类似的事情,但是我对方法论并不完全确定。

2 个答案:

答案 0 :(得分: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 :(得分:1)

此算法称为K均值

K均值是一种聚类算法,它试图将一组点划分为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)

根据标签,您可以看到哪些样本(玩家)具有相似性。