使用机器学习和Python对约会资料进行排序

人工智能遇见磐创 2020-11-14 20:05:50
学习 Python 使用 机器 约会


作者|Marco Santos
编译|Flin
来源|towardsdatascience

在无休止地浏览成百上千个交友档案,却没有一个与之匹配之后,人们可能会开始怀疑这些档案是如何在手机上出现的。所有这些配置文件都不是他们要找的类型。他们已经刷了好几个小时甚至几天,都没有发现任何成功。他们可能会问:

“为什么这些约会应用程序会向我展示那些我知道我不适合的人呢?”

在很多人看来,用来显示约会档案的约会算法可能已经失效,他们厌倦了在应该匹配的时候向左滑动。每个交友网站和应用程序都可能利用自己的秘密交友算法来优化用户之间的匹配。但有时它会让人觉得它只是在向其他人展示随机用户,而没有任何解释。我们如何才能更多地了解这个问题,并与之作斗争?可以用一种叫做机器学习的方法。

我们可以使用机器学习来加速约会应用程序中用户之间的配对过程。使用机器学习,配置文件可以潜在地与其他类似的配置文件聚集在一起。这将减少互不兼容的配置文件的数量。从这些集群中,用户可以找到更像他们的其他用户。

集群配置文件数据

使用上面文章中的数据,我们能够成功地获得convenient panda DataFrame中的集群约会配置文件。

在此DataFrame中,每一行都有一个配置文件,最后,在将Hierarchical Agglomerative Clustering(https://www.datanovia.com/en/lessons/agglomerative-hierarchical-clustering/) 应用于数据集后,我们可以看到它们所属的集群组。每个配置文件都属于一个特定的集群编号或组。

不过,这些小组可以进行一些改进。

对集群配置文件进行排序

使用集群文件数据,我们可以根据每个文件之间的相似程度对结果进行排序,从而进一步细化结果。这个过程可能比你想象的更快更容易。

import random
# 随机选择一个集群
rand_cluster = random.choice(df['Cluster #'].unique())
# 将集群配置文件分配为新的DF
group = df[df['Cluster #']==rand_cluster].drop('Cluster #', axis=1)
## 矢量化所选集群中的BIOS
# 将Vectorizer适配到BIOS
cluster_x = vectorizer.fit_transform(group['Bios'])
# 创建一个包含矢量化单词的新DF
cluster_v = pd.DataFrame(cluster_x.toarray(), index=group.index, columns=vectorizer.get_feature_names())
# 连接向量DF和原始DF
group = group.join(cluster_v)
# 删除BIOS,因为不再需要它来代替矢量化
group.drop('Bios', axis=1, inplace=True)
## 在用户之间寻找关联
# 定位DF,以便我们与索引(用户)关联
corr_group = group.T.corr()
## 寻找排名前10位的类似用户
# 随机选择一个用户
random_user = random.choice(corr_group.index)
print("Top 10 most similar users to User #", random_user, '\n')
# 创建与所选用户最相似的前10名用户的DF
top_10_sim = corr_group[[random_user]].sort_values(by=[random_user],axis=0, ascending=False)[1:11]
# 打印结果
print(top_10_sim)
print("\nThe most similar user to User #", random_user, "is User #", top_10_sim.index[0])

代码分解

让我们将代码分解为从random开始的简单步骤,在整个代码中使用random来简单地选择集群和用户。这样做是为了使我们的代码可以适用于数据集中的任何用户。一旦我们有了随机选择的集群,我们就可以缩小整个数据集的范围,使之只包含那些带有所选集群的行。

矢量化

在缩小选定集群组的范围后,下一步涉及对该组中的bios进行矢量化。

用于此操作的矢量器与用于创建初始集群数据帧的矢量器相同-CountVectorizer()。(向量器变量是在我们对第一个数据集进行向量化时预先实例化的,这可以在上面的文章中看到)。

# 使向量化器适合Bios
cluster_x = vectorizer.fit_transform(group['Bios'])
# 创建一个新的DF,其中包含向量化的词
cluster_v = pd.DataFrame(cluster_x.toarray(),
index=group.index,
columns=vectorizer.get_feature_names())

通过对Bios进行矢量化处理,我们创建了一个二进制矩阵,其中包含每个bio中的单词。

然后,我们会将这个向量化的DataFrame加入到选定的组/集群DataFrame中。

# 将向量DF和原始DF连接起来
group = group.join(cluster_v)
# 删除Bios,因为不再需要它
group.drop('Bios', axis=1, inplace=True)

将两个DataFrame结合在一起之后,剩下的是矢量化的bios和分类列:

从这里我们可以开始找到彼此最相似的用户。

寻找约会文件之间的相关性

创建填充了二进制值和数字的DataFrame之后,我们就可以开始查找约会配置文件之间的相关性。每个约会档案都有一个唯一的索引号,我们可以将其用作参考。

一开始,我们一共有6600个约会档案。在聚类并缩小数据帧到所选聚类之后,约会配置文件的数量可以从100到1000不等。在整个过程中,约会配置文件的索引号保持不变。现在,我们可以使用每个索引号来引用每个约会配置文件。

每个索引号代表一个唯一的约会个人资料,我们可以为每个个人资料找到相似或相关的用户。这可以通过运行一行代码来创建相关矩阵来实现。

corr_group = group.T.corr()

我们需要做的第一件事是转置 DataFrame以便切换列和索引。这样做是为了使我们使用的相关方法应用于索引而不是列。一旦我们转换了DF,我们就可以应用.corr()方法,它将在索引之间创建一个相关矩阵。

该相关矩阵包含使用Pearson相关方法计算的数值。接近1的值彼此正相关,这就是为什么您将看到与自己的索引相关的索引为1.0000的原因。

查找排名前10的相似约会资料

现在,我们有了一个包含每个索引/约会档案的相关性得分的相关矩阵,我们可以开始根据它们的相似性对档案进行排序。

random_user = random.choice(corr_group.index)
print("Top 10 most similar users to User #", random_user, '\n')
top_10_sim = corr_group[[random_user]].sort_values(by=
[random_user],axis=0, ascending=False)[1:11]
print(top_10_sim)
print("\nThe most similar user to User #", random_user, "is User #", top_10_sim.index[0])

上面代码块中的第一行从相关矩阵中选择随机的约会配置文件或用户。从那里,我们可以选择具有所选用户的列,并对列中的用户进行排序,以便它只返回前10个最相关的用户(不包括所选索引本身)。

成功!—— 当我们运行上面的代码时,我们会得到一个用户列表,按照他们各自的相关得分进行排序。我们可以看到与随机选择的用户最相似的前10个用户。这可以与另一个集群组和另一个配置文件或用户一起再次运行。

结束语

如果这是一个约会应用程序,用户将能够看到前10名与自己最相似的用户。这将有望减少刷屏的时间,减少挫败感,并增加我们假设的约会应用程序用户之间的匹配度。假设的约会应用程序的算法将实现无监督机器学习聚类,以创建一组约会配置文件。在这些组中,算法将根据相关得分对配置文件进行排序。最后,它将能够向用户展示与自己最相似的约会档案。

原文链接:https://towardsdatascience.com/sorting-dating-profiles-with-machine-learning-and-python-51db7a074a25

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

版权声明
本文为[人工智能遇见磐创]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/panchuangai/p/13974487.html

  1. 利用Python爬虫获取招聘网站职位信息
  2. Using Python crawler to obtain job information of recruitment website
  3. Several highly rated Python libraries arrow, jsonpath, psutil and tenacity are recommended
  4. Python装饰器
  5. Python实现LDAP认证
  6. Python decorator
  7. Implementing LDAP authentication with Python
  8. Vscode configures Python development environment!
  9. In Python, how dare you say you can't log module? ️
  10. 我收藏的有关Python的电子书和资料
  11. python 中 lambda的一些tips
  12. python中字典的一些tips
  13. python 用生成器生成斐波那契数列
  14. python脚本转pyc踩了个坑。。。
  15. My collection of e-books and materials about Python
  16. Some tips of lambda in Python
  17. Some tips of dictionary in Python
  18. Using Python generator to generate Fibonacci sequence
  19. The conversion of Python script to PyC stepped on a pit...
  20. Python游戏开发,pygame模块,Python实现扫雷小游戏
  21. Python game development, pyGame module, python implementation of minesweeping games
  22. Python实用工具,email模块,Python实现邮件远程控制自己电脑
  23. Python utility, email module, python realizes mail remote control of its own computer
  24. 毫无头绪的自学Python,你可能连门槛都摸不到!【最佳学习路线】
  25. Python读取二进制文件代码方法解析
  26. Python字典的实现原理
  27. Without a clue, you may not even touch the threshold【 Best learning route]
  28. Parsing method of Python reading binary file code
  29. Implementation principle of Python dictionary
  30. You must know the function of pandas to parse JSON data - JSON_ normalize()
  31. Python实用案例,私人定制,Python自动化生成爱豆专属2021日历
  32. Python practical case, private customization, python automatic generation of Adu exclusive 2021 calendar
  33. 《Python实例》震惊了,用Python这么简单实现了聊天系统的脏话,广告检测
  34. "Python instance" was shocked and realized the dirty words and advertisement detection of the chat system in Python
  35. Convolutional neural network processing sequence for Python deep learning
  36. Python data structure and algorithm (1) -- enum type enum
  37. 超全大厂算法岗百问百答(推荐系统/机器学习/深度学习/C++/Spark/python)
  38. 【Python进阶】你真的明白NumPy中的ndarray吗?
  39. All questions and answers for algorithm posts of super large factories (recommended system / machine learning / deep learning / C + + / spark / Python)
  40. [advanced Python] do you really understand ndarray in numpy?
  41. 【Python进阶】Python进阶专栏栏主自述:不忘初心,砥砺前行
  42. [advanced Python] Python advanced column main readme: never forget the original intention and forge ahead
  43. python垃圾回收和缓存管理
  44. java调用Python程序
  45. java调用Python程序
  46. Python常用函数有哪些?Python基础入门课程
  47. Python garbage collection and cache management
  48. Java calling Python program
  49. Java calling Python program
  50. What functions are commonly used in Python? Introduction to Python Basics
  51. Python basic knowledge
  52. Anaconda5.2 安装 Python 库(MySQLdb)的方法
  53. Python实现对脑电数据情绪分析
  54. Anaconda 5.2 method of installing Python Library (mysqldb)
  55. Python implements emotion analysis of EEG data
  56. Master some advanced usage of Python in 30 seconds, which makes others envy it
  57. python爬取百度图片并对图片做一系列处理
  58. Python crawls Baidu pictures and does a series of processing on them
  59. python链接mysql数据库
  60. Python link MySQL database