共计 3541 个字符,预计需要花费 9 分钟才能阅读完成。
作者 |Marco Santos
编译 |Flin
起源 |towardsdatascience
在无休止地浏览成千盈百个交友档案,却没有一个与之匹配之后,人们可能会开始狐疑这些档案是如何在手机上呈现的。所有这些配置文件都不是他们要找的类型。他们曾经刷了好几个小时甚至几天,都没有发现任何胜利。他们可能会问:
“为什么这些约会应用程序会向我展现那些我晓得我不适宜的人呢?”
在很多人看来,用来显示约会档案的约会算法可能曾经生效,他们厌倦了在应该匹配的时候向左滑动。每个交友网站和应用程序都可能利用本人的机密交友算法来优化用户之间的匹配。但有时它会让人感觉它只是在向其他人展现随机用户,而没有任何解释。咱们如何能力更多地理解这个问题,并与之作奋斗?能够用一种叫做机器学习的办法。
咱们能够应用机器学习来减速约会应用程序中用户之间的配对过程。应用机器学习,配置文件能够潜在地与其余相似的配置文件汇集在一起。这将缩小互不兼容的配置文件的数量。从这些集群中,用户能够找到更像他们的其余用户。
集群配置文件数据
应用下面文章中的数据,咱们可能胜利地取得 convenient panda DataFrame 中的集群约会配置文件。
在此 DataFrame 中,每一行都有一个配置文件,最初,在将 Hierarchical Agglomerative Clustering(https://www.datanovia.com/en/…)利用于数据集后,咱们能够看到它们所属的集群组。每个配置文件都属于一个特定的集群编号或组。
不过,这些小组能够进行一些改良。
对集群配置文件进行排序
应用集群文件数据,咱们能够依据每个文件之间的类似水平对后果进行排序,从而进一步细化后果。这个过程可能比你设想的更快更容易。
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.co…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/